Главная страница

Лекции 1 семестр матанализ. лекции 1 семестр (1). Литература Герберт. Шилдт. С руководство для начинающих


Скачать 1.38 Mb.
НазваниеЛитература Герберт. Шилдт. С руководство для начинающих
АнкорЛекции 1 семестр матанализ
Дата19.02.2023
Размер1.38 Mb.
Формат файлаdoc
Имя файлалекции 1 семестр (1).doc
ТипЛитература
#945406
страница3 из 9
1   2   3   4   5   6   7   8   9

Исходные данные


I. Квадратурные формулы для вычисления интеграла (всюду ):

а) формула прямоугольников

;

За приближенное значение интеграла принимается такое, при котором .



II. Подынтегральная функция. Представим

.

Функция (x):

;

Функция (z):

;
III. Числовые данные




a

b



M

t1

t2

t3

t4

t5

t6

а)

0

1

0,1

3

-3,7

1,8

7,2

-

-

-

//Tabulating the integral function

#include "stdafx.h"

#include

#include

#include

#include

#include

using namespace std;

const int lengthColumn=20;

const int Indent=7;

const int lengthTable=43;

//////////////////////////

double Fi(double x)

{

return cos(x)*cos(x);

}

///////////////////////////////

double Psi(double x)

{

return (1-x*x)/(1+x*x);

}

/////////////////////////

double F(double x,double t)

{

return Psi(x)*Fi(x+ t/(1+x*x));

}

///////////////////////////////////////

void create(ifstream &f, double* x, int n)

{

if(!f)

{

cout<<" Can't open file!"<
system("pause");

exit(-1);

}

int i;

for(i=0;i>x[i];

}

/////////////////////////////////////////

void show(ofstream &f, double* x, int n)

{

int i;

for(i=0;i
f<
f<
}

/////////////////////////////////////////

double Integral(double a, double b, double e, double t)

{

double h,J1,J2;

int i,n;

n=1; h=(b-a)/n;

J2=h*F(a+h/2, t);

do

{

J1=J2;

n=n*2;

h=(b-a)/n;

J2=0;

for (i=0;i<=n-1;i++)

J2=J2+F(a+(2*i+1)*h/2,t);

J2=J2*h;

}while (fabs(J2-J1)>e);

return J2;

}

//////////////////////////////////////

void star(ofstream &f, int n, int m)

{

f.width(n);

int i;

for(i=0;i
f<<'*';

f<
}

/////////////////////////////////////

void star1(ofstream &f, int n, int m)

{

f.width(n); f<<'*';

int i;

for(i=0;i
{

f.width(lengthColumn+1);

f<<'*';

}

f<
}

//////////////////////////////////////

void table(ofstream &f,double* x,double* y,int m, char a[2][15])

{

int i;

f<
star(f,Indent+1,lengthTable);

star1(f,Indent+1,2);

f.width(Indent+1);

f<<'*';

for(i=0;i<2;i++)

{

f.width(10);

f<
f.width(11);

f<<'*';

}

f<
star1(f,Indent+1,2);

star(f,Indent+1,lengthTable);

for(i=0;i
{

star1(f,Indent+1,2);

f.width(Indent+1);

f<<'*';

f.width(lengthColumn-5);

f<
f.width(6);

f<<'*';

f.width(lengthColumn-5);

f<
f.width(6);

f<<'*';

f<
star1(f,Indent+1,2);

star(f,Indent+1,lengthTable);

}

}
/////////////////////////////

int main()

{

ifstream in("arb.txt");

ofstream out("integral.txt");

double a,b,eps;

int m,i;

char name_task[80];

char name_t_y[2][15];

in.getline(name_task,80);

for(i=0;i<2;i++)

in>>name_t_y[i];

out<
for(i=0;i<2;i++)

out<
out<in>>a>>b>>eps>>m;

out<<"a= "<
out<<"b= "<
out<<"eps= "<
out<<"m= "< double* t, *y;

t=new double[m];

y=new double[m];

create(in, t,m);

out<<"arguments : "<
show(out,t,m);

for(i=0;i
y[i]=Integral(a,b,eps,t[i]);

out<<"values of the integral function "<
show(out,y,m);

out<
out<
table(out,t,y,m,name_t_y);
in.close();

out.close();

delete []t;

delete []y;

system("pause");

return 0;

}

Файл arb.txt
Tabulating the integral function

t[i] y[i]

0 1 0.001 3 -3.7 1.8 7.2

//////////////////////////////////////

Файл integeral.txt
Tabulating the integral function

t[i] y[i]

a= 0

b= 1

eps= 0.001

m= 3

arguments :

-3.7 1.8 7.2

values of the integral function

0.406703 0.0658141 0.335945

Tabulating the integral function
*******************************************

* * *

* t[i] * y[i] *

* * *

*******************************************

* -3.7 * 0.406703 *

* * *

*******************************************

* 1.8 * 0.0658141 *

* * *

*******************************************

* 7.2 * 0.335945 *

* * *

*******************************************

Вторая версия вычисление интеграла без файла

#include "stdafx.h"

#include

#include

#include

#include

using namespace std;

const int lengthColumn=20;

const int Indent=7;

const int lengthTable=43;

//////////////////////////

double Fi(double x)

{

return cos(x)*cos(x);

}

///////////////////////////////

double Psi(double x)

{

return (1-x*x)/(1+x*x);

}

/////////////////////////

double F(double x,double t)

{

return Psi(x)*Fi(x+ t/(1+x*x));

}

///////////////////////////////////////

void create(double* x, int n)

{

int i;

for(i=0;i
{

cout<<"x["<
cin>>x[i];

}

}

/////////////////////////////////////////

void show( double* x, int n)

{

int i;

for(i=0;i
cout<
cout<
}

/////////////////////////////////////////

double Integral(double a, double b, double e, double t)

{

double h,J1,J2;

int i,n;

n=1;

h=(b-a)/n;

J2=h*F(a+h/2, t);

do

{

J1=J2;

n=n*2;

h=(b-a)/n;

J2=0;

for (i=0;i<=n-1;i++)

J2=J2+F(a+(2*i+1)*h/2,t);

J2=J2*h;

}while (fabs(J2-J1)>e);

return J2;

}

//////////////////////////////////////

void star( int n, int m)

{

cout.width(n);

int i;

for(i=0;i
cout<<'*';

cout<
}


/////////////////////////////////////

void star1( int n, int m)

{

cout.width(n); cout<<'*';

int i;

for(i=0;i
{

cout.width(lengthColumn+1);

cout<<'*';

}

cout<
}

//////////////////////////////////////

void table(double* x,double* y,int m, char a[2][15])

{

int i;

cout<
star(Indent+1,lengthTable);

star1(Indent+1,2);

cout.width(Indent+1);

cout<<'*';

for(i=0;i<2;i++)

{

cout.width(10);

cout<
cout.width(11);

cout<<'*';

}

cout<
star1(Indent+1,2);

star(Indent+1,lengthTable);

for(i=0;i
{

star1(Indent+1,2);

cout.width(Indent+1);

cout<<'*';

cout.width(lengthColumn-5);

cout<
cout.width(6);

cout<<'*';

cout.width(lengthColumn-5);

cout<
cout.width(6);

cout<<'*';

cout<
star1(Indent+1,2);

star(Indent+1,lengthTable);

}

}

/////////////////////////////

int main()

{

double a,b,eps;

int m,i;

char name_task[80];

char name_x_y[2][15]; // x[i] y[i]

cout<<" enter the name of the table"<
cin.getline(name_task,80);//

for(i=0;i<2;i++)

{

cout<<" x[i] y[i] ";

cin>>name_x_y[i];// x[i] y[i]

}

cout<
cout<
for(i=0;i<2;i++)

cout<
cout<
cout<<" a= "; cin>>a;

cout<<" b= "; cin>>b;

cout<<" eps= "; cin>>eps;

cout<<" m= "; cin>>m;

double* t, *y;

t=new double[m];

y=new double[m];

create( t,m);

cout<<"arguments : "<
show(t,m);

for(i=0;i
y[i]=Integral(a,b,eps,t[i]);

cout<<"value of integeral"<
show(y,m);

cout<cout<
table(t,y,m,name_x_y);
delete []t;

delete []y;

system("pause");

return 0;
}

////////////////////////////////////////

Форматированный ввод-вывод данных.
До сих пор при вводе или выводе информация в наших примерах программ действовали параметры форматирования, которые С++-система ввода вывода использует по умолчанию. Но программист может сам управлять форматом представления данных , причем двумя способами. Первый способ предполагает использование функций-членов класса ios, а второй - функций специального типа, именуемых манипуляторами.

Форматирование данных с использованием функций-членов класса ios

В системе ввода-вывода С++ каждый поток связанс набором флагов форматирования информации. В классе ios объявляется перечисление fntflags, в котором определены следующие значения
adjustfield

basefield

boolalpfa

dec

fixed

floatfield

hex

internal

left

oct

right

scientific

showbase

showpoint

showpos

skipws

unitbuf

upprecase
Эти значения используются для установки или очистки флагов форматирования.

Если флаг skipws установлен , то при потоковом вводе данных ведущие пробельные символы , или символы пропуска (т.е. пробелы , символы табуляции и новой строки ), отбрасываются.

…..

Установка и сброс флагов форматирования
Для установки любого флага используется функция setf(), которая является членом класса ios.

Лекция №10

Строки
Чаще всего одномерные массивы используются для создания символьных строк. Первый ( и наиболее популярный ) предполагает , что строка определяется как символьный массив , который завершается символом (‘\0’). Таким образом, строка с завершающим нулем состоит из символов и конечного нуль-символа. Строка С++ - это строка с завершающим нулем.

Однако существует и другой тип представлениястрок в С++.

Он заключается в применении объектов класса string, который является частью библиотеки классов С++. Таким образом, класс string – не встроенный тип.


Основы представления строк
Объявляя символьный массив , предназначенный для хранения строки с завершающим нулем, необходимо учитывать признак ее завершения и задавать длину массива на единицу больше длины самой большой строки из тех , которые предполагается хранить в массиве.

#include "stdafx.h"

#include

using namespace std;
int main()

{

char a[]="KAZAN";

// 0 символ обозначает конец строки.

cout<
system("pause");

return 0;

}


char b[11]; - если нужно ввести 10 символов;

cin>>a; //Ввод строки Kazan State University

cout<
// Массив читается только до пробела.


С++ позволяет определятьстроковые константы (литералы)

Строковый литерал – это список символов, заключенный в двойные кавычки

Например:

"pause"

"Привет"

"Мне нравится С++ "

""

Строка называется нулевой. Она состоит только из одного нулевого символа (признака завершения строки). Нулевые строки используются для представления пустых строк.

Программа 1

#include "stdafx.h"

#include

using namespace std;
int main()

{

const int n=30;

char S[n];

char T[n];

char R[n];

cout << "enter 3 words s=" << endl;

cin>>S;

cout << "string S="<
system("pause");

//Ввод строки Kazan State University

//На экране будет только слово Kazan

cin>>T>>R;

cout<
// эти два слова остались во входном потоке

// они заносятся в переменные Т и R и выводятся

system("pause");

return 0;

}


Программа 2

Функции cin.get(), cin.getline().
//get_getline

#include "stdafx.h"

#include

using namespace std;

int main()

{

const int n=30;

char S[n];

cout<<" new line ch= "<<(int)'\n'<
cout<<" 0-symbol ch= "<<(int)'\0'<cout<< "enter S1="<< endl;

cin.getline(S,n); //Ввод строки Kazan State University

cout<<" S1="<
char V[]="abc";

cout<<"V= "<
cout<
// печатает abc0

system("pause");

return 0;

}

Метод getline считывает из входного потока n-1 символов

или менее ( если символ перевода строки встретится раньше) и записывает их в строковую переменную S. Символ перевода строки тоже считывается (удаляется) из входного потока, но не записывается в строковую переменную, вместо него размещается

завершающий 0.

Если в строке исходных данных более n-1 символов, следующий ввод будет выполняться из той же строки , начиная с первого несчитанного символа

//cinget_get

#include "stdafx.h"

#include

using namespace std;

int main()

{

const int n=30;

char S[n];

cout<<"enter string s= ";

cin.get(S,n);

cout<<" S= "<
cin.get();

cout<<"enter string s= ";

cin.get(S,n);

cout<<" S= "<
system("pause");

return 0;

}

Никогда не обращайтесь к разновидности метода get с двумя аргументами два раза подряд, не удалив \n из входного потока
/После каждого использования cin.get(S,n)

необходимо очищать входной поток от символа начало новой строки, который не снимается функцией cin.get(S,n) при считывании этого символа на экране появляется пустая строка
Во входном потоке остается \n символ новой строки; для того чтобы , снять с потока символ новой строки,

необходимо применить функцию cin.get() без формальных

параметров

Обработка символьной информации.


Задача 1

Задана символьная строка, содержащая

фамилию , имя и отчество.

Создать три символьные строки , содержащие

отдельно фамилию, имя и отчество.
//fio_string

#include "stdafx.h"

#include

using namespace std;

const int n=80;

int main()

{
char a[n],b[n],c[n],d[n];

cout<<" enter fio=";

cin.getline(a,n);

cout<<"a="<
int i,j;

for( i=0;a[i]!=' ';i++) b[i]=a[i];

b[i]='\0';

i++;

j=0;

while(a[i]!=' ')

{

c[j]=a[i];

i++;

j++;

}

c[j]='\0';

i++;

j=0;

while(a[i]!='\0')

{

d[j]=a[i];

i++; j++;

}

d[j]='\0';

cout<<"b="<
cout<<"c="<
cout<<"d="<
system("pause");

return 0;

}

Задача 2
Вывод введенной строки символов в обратном порядке.

Ввод строки в массив.
//gusen_8_1
#include "stdafx.h"

#include

using namespace std;
int main()

{

char str[20];

int i,n;

cout << "Enter string:";

cin >> str;

// Можно ввести не более 19 символов.

// Подсчет количества символов в строке.

// Символ '\0' – признак конца строки.

for(n=0; str[n]!='\0'; n++);

for(i=n-1; i>=0 ;i--)

cout << str[i];

// Посимвольный вывод строки.

cout << endl;

system("pause");

return 0;

}

Задача 3
Вывод введенной строки символов в обратном порядке.

Ввод строки в массив.

Второй вариант программы с использованием библиотеки

работы со строками символов – string.
//gusen_8_2
#include "stdafx.h"

#include

//#include

using namespace std;
int main()

{

char str[20];

int i,n;

cout << "Enter string:";

cin >> str; // Можно ввести не более 19 символов.

// Подсчет количества символов в строке.

n = strlen(str);

for(i=n-1; i>=0 ;i--)

cout << str[i]; // Посимвольный вывод строки.

cout << endl;

system("pause");

return 0;

}
Задача 4
Исключить из строки все символы, не являющиеся

буквами. Ввод строки в массив.
//arb2014_gusen_8_3

#include "stdafx.h"

#include

#include

using namespace std;
int main()

{

const int m=30;

char str[m];

int n;
cout << "Enter string :";

cin >> str; // Можно ввести не более 29 символов.

for (int i=0; str[i] != '\0'; i++)

if ( str[i]>='a' && str[i]<= 'z' || str[i]>='A' && str[i]<= 'Z')

cout << str[i];
cout << endl;

system("pause");

return 0;

}

Задача 5
Определить, является ли введенное слово полиндромом.

Ввод строки в массив.
//arb2014_gusen_8_4

#include "stdafx.h"

#include
using namespace std;

int main()

{

const int m = 20;

char str[m];

int i,n;

bool fl = true;

cout << "Enter string:";

cin >> str; // Можно ввести не более 19 символов.
// Подсчет количества символов в строке.

// Символ ‘\0’ – признак конца строки.

for(n=0; str[n]!='\0'; n++);

for(i=0; i
if (str[i] != str[n-i-1])

fl = false;
cout << (fl ? "Polindrom" : "Non polindrom")<
system("pause");

return 0;

}


Задача 6
Сортировка слова в лексикографическом порядке

методом “пузырька”.

Ввод строки в массив.

//arb2014_gusen_8_5

#include "stdafx.h"

#include

using namespace std;
const int m=20;

int main()

{

char str[m], k;

int i,j,n;

bool fl = true;

cout << "Enter string:";

cin >> str; // Можно ввести не более 19 символов.

// Подсчет количества символов в строке.

// Символ ‘\0’ – признак конца строки.

for(n=0; str[n]!='\0'; n++);

for(i=0;i
{

fl = false;

for(j=0;j
if (str[j] > str[j+1])

{

k=str[j];

str[j]= str[j+1];

str[j+1] = k;

fl = true;

}

}

cout << str << endl;

// Вывод С-строки (последний символ - ‘\0’)

system("pause");

return 0;
}

Задача 7
Дан текст, состоящий из слов, разделенных пробелами и

заканчивающийся точкой.

Вывести на экран этот текст, печатая каждое слово в обратном

порядке.
Чтение производится в буфер (массив) по одному слову.

Длина каждого слова не должна превышать 29 символов.
//arb2014_gusen_8_6

#include "stdafx.h"

#include

#include

using namespace std;
int main()

{

char buf[30];

int n;

bool fl=true;

cout << "Enter text :";

while(fl)

{

cin >> buf; // Чтение слова в массив.

n = strlen(buf); // Возвращает кол-во символов в строке.

if (buf[n-1] == '.')

{

n--;

fl=false;

}

for (int i=n-1; i>=0; i--)

cout << buf[i];

if (fl)

cout << ' ';

}

cout << '\n';

system("pause");

return 0;
}

Задача 8
Дан текст, состоящий из слов, разделенных пробелами и

заканчивающейся точкой. Подсчитать, сколько слов содержит

ровно две буквы m.
Посимвольный ввод входного текста.

Длина слов не ограничена.

Функция get() вводит очередной символ из входного потока

и возвращает его в качестве своего значения.

Функция get(f) вводит символ в переменную f.
//arb2014_gusen_8_7

#include "stdafx.h"

#include

using namespace std;

int main()

{

char symb;

int count_word=0,count_let=0;

cout << "Enter text:";

symb=cin.get(); // Ввод символа (в том числе и пробела)

while (symb != '.')

{

if (symb==' ')

{

if (count_let==2) count_word++;

count_let=0;

}

else

if (symb=='m') count_let++;

symb=cin.get(); // Экв. cin.get(symb);

}

if (count_let==2) count_word++;

cout << "Word count = " << count_word <
system("pause");

return 0;

}

// Другой вариант решения:

// Заголовок цикла while ((symb=cin.get()) != '.') и

// удалить операторы symb=cin.get();

Задача 9
Дан текст, состоящий из строк и заканчивающейся пустой

строкой (‘\n’). Если последний символ строки цифра N, то

первые N символов строки заменить символом &.
Функция getline(buf,size,symb) читает символы из входного

потока, пока не встретится символ symb (включая и его).

Будет прочитано size-1 символов, если symb не встретится.

Вместо symb (или в конце строки) подставляется ‘\0’.

Результат чтения помещается в массив buf.

и возвращает его в качестве своего значения.

//arb2014_gusen_8_8

#include "stdafx.h"

#include

#include

using namespace std;

int main()

{

const int size=100;

char buf[size];

int n,i,lstr;

cout << "Enter text:\n";

while(1)

{

cin.getline(buf, size, '\n');

if (buf[0] == '\0')

break;

lstr=strlen(buf);

if (buf[lstr-1] >= '1' && buf[lstr-1] <= '9') // Если цифра.

n = buf[lstr-1] - '0';

else

n = 0;

for(i=0; i
buf[i] = '&';

cout << "Result :" << endl << buf <
cout<< "Enter new line or press 'Enter' :"<
}

system("pause");

return 0;

}

Задача 10
Подсчитать количество строк, введенных с экрана терминала.
Ввод конца файла с экрана терминала: z в первой позиции

новой строки и

Функция read(buf, size) читает в массив buf или size символов,

или меньшее количество.

Если читается конец файла, то функция gcount() возвращает количество прочитанных символов.
//arb2014_gusen_8_9

#include "stdafx.h"

#include

#include

using namespace std;

int main()

{

const int size=10;

char buf[size];

int n,i,count=0;

cout << "Enter text:"<
while(!cin.eof())

{

cin.read(buf, size);

n=cin.gcount();

for(i=0; i
if(buf[i]=='\n')

count++;

}

cout << "Number of line =" << count <<'\n';

system("pause");

return 0;

}

Лекция №11

Библиотечные функции обработки строк


Операции над строками

Для строк не определена операция присваивания,

поскольку строка является не основным типом данных,

а массивом.



  1. strcpy()

  2. strncpy()


Формат strcpy(to, from)- копирует содержимое строки from в строку to.

to по длине не меньше from.
Присваивание выполняется с помощью функций стандарной библиотеки

или посимвольно "вручную" (что менее предпочтительно,

так как чревато ошибками)

Например, чтобы присвоить строке to строку from, можно воспользоваться функциями strcpy или strncpy:
Функция strcpy(to,from) копирует все символы строки,

yказанной вторым параметром (from), включая завершающий 0, в строку, указанную первым параметром (to).
Функция strncpy(to,from,n) выполняет то же самое, но не более n символов, то есть числа символов ,указанного третим параметром. Если нуль-символ в исходной строке встртится раньше, копирование прекращается, а оставшиеся до n символы строки to заполняются нуль-символами. В противном случае (если n меньше или равно длине строки from) завершающий нуль-символ в to не добавляется.
Обе эти функции возвращают указатель на результирующую строку. Если области памяти , занимаемой строкой-назначением и строкой-источником, перекрываются, поведение программы не определено.



  1. strcat()

Формат strcat(s1, s2)-присоединяет строку s2 к концу строки s1.

Примечание строка s2 не меняется.


  1. strcmp()

Формат strcmp (s1, s2)- сравнивает s1 с s2( лексико-графический)

s1 =s2 функция возвращает 0

s1 >s2 функция возвращает положительное значение

s1

  1. strclen()

strclen(s) – возвращает количество символов , не считая

Программист должен сам заботиться о том , чтобы в строке-приемнике хватило места для строки-источника ( в данном случае при выделении памяти значение переменной m должно быть больше или равно 100), и о том, чтобы строка всегда имела завершающий нуль-символ.

____________________________________________

Внимание

Выход за границы строки и отсутствие нуль-символа являются распространенными причинами ошибок в программах обработки строк.

**************************************************

// Never trouble trouble, till trouble troubles you

// Никогда не беспокойте проблему , пока проблема не //беспокоит Вас
#include "stdafx.h"

#include

#include

using namespace std;

int main()

{

int m;

char a[100] = "Never trouble trouble";

cout<<"Enter length of string m= ";

cin>>m;

char *p = new char[m];

strcpy_s(p,30,a);

cout<<"String p= "<

//char b[100] = "Good day!";

//strncpy(p,b,strlen(b)+1);

//cout<<"String b= "<
system("pause");

return 0;

}
****************************************************

Если задать m=20, то напечатается

"Never trouble trouble" и

"Good day!" и нет никаких сообщений
Если задать m=3, то напечатается

"Never trouble trouble" и

"Good day!" и

сообщения об ошибке и "приложение будет закрыто"

хотя под строку p было выделено 3 байта

*************************************************
// Never trouble trouble, till trouble troubles you

//Никогда не беспокойте проблему, пока проблема не //беспокоит Вас

//arb2014_basic_functions

#include "stdafx.h"

#include

#include

using namespace std;

int main()

{

int m;

char a[100] = "Never trouble trouble";

cout<<"Enter length of string m= ";

cin>>m;

char *p= new char[m];

strcpy(p,a);

cout<<"length p="<cout<<"String p= "<
char b[100] = "Good day!";

strncpy(p,b,strlen(b)+1));

cout<<"String p= "<

system("pause");

return 0;
}
Комментарии.

Введем m=30 и m=3 для первой функции

strcpy(p,a);

cout<<"length p="<
//длина всегда 30 (?)

//arb2009_stroka5_1

#include "stdafx.h"

#include

#include

using namespace std;

int main()

{

char a[100] = "Never trouble trouble";

int m;

cout<<"Enter length of string m= ";

cin>>m;
char *p = new char[m];

char *q = new char [m];

strcpy(p,a);

cout<<"String p= "<
char b[100] = "Good day!";

strncpy(p,b,3);

cout<<"String p= "<

strncpy(q,b,3);

cout<<"String q= "<
system("pause");

return 0;
}

**********************************************

Если введем m=3

оператор:

strcpy(p,a);

cout<<"String p= "<
результат:

String p= Never trouble trouble;
операторы:

char b[100] = "Good day!";

strncpy(p,b,3);

cout<<"String p= "<
результат:

String p= Gooer trouble trouble;
операторы

strncpy(q,b,strlen(b)+1);

cout<<"String q= "<результат

String p= "Good day!";

и сообщение об ошибке
Если введем m=10

Все тоже самое, но нет сообщения об ошибке
Указатель p адресует память, в которую скопировали

строку "Never trouble trouble".

Теперь туда же снова копируем новую строку

"Good day!", но только из этой строки берем 3 символа

Поскольку в этих 3 символах не встречается нуль-символ,то печать строки продолжается до нуль-символа , который был поставлен первый раз.

Будет напечатано Gooer trouble trouble
p |.|------->| Never trouble trouble\0 |

Nev заменяется Goo

p |.|------->| Gooer trouble trouble\0 |
**************************************************


Функции преобразования

Для преобразования строки в целое число используется функция atoi(str).Функция преобразует строку, содержащую символьное представление целого числа, в соответствующее целое число.

Признаком конца числа служит первый символ, который не может быть интерпретирован как принадлежащий числу.

Если преобразование не удалось возвращает 0.
Аналогичные функции преобразования строки в длинное целое число (long) и в вещественное число с двойной точностью (double) называются atol и atof соответственно.

Пример
#include "stdafx.h"

#include

#include

using namespace std;

int main()

{

char a[]= "10) Height-162sm, weight-59.55 kg";

int num;

long height;

double weight;

num = atoi(a);

height = atol(&a[11]);

weight = atof(&a[25]);

cout<
1   2   3   4   5   6   7   8   9


написать администратору сайта