Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КПиЯП.docx
Скачиваний:
7
Добавлен:
25.09.2019
Размер:
75.59 Кб
Скачать

Массивы

Спецификатор типа описания [конст выр]

Спецификатор типа описатель [ ]

В качестве спецификатора типа выступает любой тип данных. Константное выражение в скобках задаёт его размерность. Данное константное выражение может отсутствовать в следующих случаях:

-если при описании массив инициализируется( присваивается начальное значение массиву)

-если массив объявлен как формальный параметр функции

-если массив объявлен как ссылка на массив явно определённый в другом файле

В языке С определены только одномерные массивы, но поскольку элементом массива может быть массив, можно определять и многомерные.

Многомерные массивы формализуются списком константных выражений следующих за идентификатором массива, причём каждое константное выражение заключается в свои квадратные скобки.

int a [2] [3];

a[0] [0] a[0] [1] a [0] [2]

a [1] [0] a [1][1] a [1][2]

массивы можно инициализировать явно, когда не указывается размерность.

Int a[]={1,2,3}

Int a[5]={1,2,3,0,0}

Int [3][3]={{2,3,4}{3,4,8}{1,0,9}}

Int main()

{Int n [10]

For (int i=0;i<10;i++)

N[i]=0 или cin>> n[i];

Cout<<”Элемент”<< set w(13)(отступ, сидит в библиотеке <iomanip>)<<”Значение”<<endl( как \n);

For (i=0;i<10;i++)

Cout<<setw(7)<<i<<setw(13)<<n[i]<endl;

Return 0;

}

Для изменения размерности массива

Const int

Corsize=10

Char n[]= “first”-6 знаков т.к. в конце 0 для завершения.

Задание 1:

Проинициализировать массив чётными начальными значениями.

К 40 студентам обратились с просьбой оценить качество пищи в студенческом кафетерии по 10 бальной системе. Перенести данные в массив, вывести среднюю оценку качеству пищи.

Дан массив размерностью 5х5 . найти максимальное значение в 1м секторе, сумму элементов 2ого и 4ого секторов и минимальное значение в 3м секторе.

Int a[100];

Int main ()

{int i=0;

For( b=2;i=0,i<=100;i++);

{a[i]=b;

B+=2;

}

Return 0;

}

Int a[40] #include stdlib.h

Int main ()

{sum= 0;

For (i=0,i<=40l;i++)

{a[i]= rand()% 10;

Sum=sum+rand()%10;}

Int res;

Res=sum/40

Cout<< res;

Return 0;

}

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

{for (j=1;j<4;j++)

{if (max>mas[i][j])

Max = mas[i][j]

}

}

Cout << max;

For (int i=0;i<n;i++)

{for (int j<n;j++)

{If ((i!=j)&&(i!=n-1-j))

If ((j>0)&&(j<1))

If (( i>0)&&(i<=n-1-j);

Z+= A[i][j]

Else

Y=(y<A[i][j])?

Else if ((y>i)&(y<=n-1)

If ((i>=0)&&(i<=n-1-j))

X=(x>A[i][j]?x:a[i][j]

Else

Z+=A[i][j])

}

Max=-1000

Min=1000

For (inti=0;i<=size;i++)

For (int j=0;j<=size;j++)

{a[i][j]=rand()%10;

If ( j>i)&&(j<=size-1)

Max=(max>a[i][j]?max:a[i][j])

If (j>i)&&(j>=size-1)

Sum+=a[i][j]

If (j<i)&&(j>=size-1)

Min=(min<a[i][j]?min:a[i][j])

If (j<i)&&(j<size-1)

Sum+=a[i][j]

Строки

Строка- последовательность символов, обрабатываемая как единый модуль в С любая строка заканчивается завершающим нулевым символом \о. ввести строку можно

char word [20];

cin>>word;

cin.getline(x,y,z)

x-массив,куда будет сохраняться строка

y-размерность, сколько символов считывается

z- символ-ограничитель конца строки, по умолчания ентер( можно не писать)

cin.getline(word,20,\n)

Библиотека работ со строками- <string.h> / <cstring>

Char strcpy(char s1,const char s2) копировать свой второй аргумент в свой первый аргумент, являющийся массивов символов который должен быть достаточно большим, что бы вместить строку и завершающий нулевой символ

Char strncopy(char s1,const char s2,size_t n) эквивалент предыдущей, но копируется только н символов

Size_t определён в библиотеке stddef.h

Char ctrcat(char s1, const char s2) добавляет свой второй аргумент-строку к своему первому аргументу массиву символов, уже содержащего строку

Char ctrcat(char s1, const char s2,size_t n) копирует н символов.

Int strcmp( const char s1,const char s2) сравнивает символ за символом, строку в первом аргументе со строкой во втором, возвращает ноль если две строки равны, отрицательное значение если первая строка меньше чем вторая и положительное, если первая больше чем вторая.

Int strncmp( const char s1,const char s2,size_t n) сравнивает только н символов обеих строк

Char strtok (char s1,const char s2) используется для превращения строки в последовательность лексем- последовательность символов, разделённое разделителями( пробел для слов, точка !,? или многоточие для предложения)

Size_t strlen (const char s) размер строки, нулевой символ не учитывается

<ctype.h>- библиотека упрощающая жизнь

Int isdigit(int c) возвращает истинно если аргумент цифра

Int isalpha( int c) если агрумент буква(только английские)

Int islower ()возвращает истинно если аргумент строчный

Int isupper() если элемент прописной

Int tolwer() изменяют регистры на противоположный

Int toupper()

Int isspace()Возвращает истинно, если аргумент является разделителем

Int ispunct()Возвращает истинно если элемент является знаком пунктуации

Doubleatof()

Int atoi()

Long atoi()

Char [] = “поздравляю с 1 сентября”;

Char y[35],z[15];

Cout<< “строка в х”<<x<<endl;

cout<<”строка в у”<<strcpy(y,z)<< endl;

Strncpy(z,x,14);

Z[14]= ‘\o’;

Cout<< “строка в z”<< z< endl;

Char s1[25]=””;

Char s2[]=””;

Char s3[40]=””;

Cout<< s1<endl<<s2<endl;

Cout << strcat(s1,s2)<<”\n”;

Cout << strncat(s3,s1,12);

Cout <<endl<<strcat(s3,s1);

Продемонстрировать возможности функций strcmp,strncmp и функций strlend.

Дана строка. Посчитать количество слов в строке, вывести исходную строку, строку в обратном порядке и только чётные слова(чётное количество букв)

char stroka sor = {0};

char*temp;

int strs=0;

temp=strtor (stroka, "");

while (templ=Null);

{temp=strtok (Null,"");

if (temp=Null)

{if (strlen (temp%2=0)

strs+1;

strepy (_str...(temp)obr);}

{

cout<<obr;

-getch();

Структуры. Объединения

Структура- составной объект в который входят элементы разных типов за исключением функций. В отличие от массива, который является однородным объектом. Структура не однородна. Тип структуры определяется записью вида:

Struct {список определений};

В структуре должен быть указан хотя бы 1н элемент . список определений имеет следующую общую структуру-тип данных описатель.

Struct { doublex,y;} s1,s2,sm[9];

Struct

{ int year;

Char month,day;} date1,date2;

Переменные с1 и с2 определяются как структуры состоящие из двух полей вещественного типа

Это массив структур, каждый элемент которой содержит в себе компоненты вещественного типа

Существует другой тип записи

Struct teg

Struct st1 { doublex,y;} ;…{st1,s1;

Обращение к элементам структуры осуществляется с помощью имени структуры, через точку.

Struct bout

{char model[16];

Int year;

Float price;

};

Int main()

Int I,k;

Bout :boats[50];

Cout<<”how many boats”;

Cin>>k;

For(i=0,i<k,i++)

{cout<<”input a model”;

Cin>>boats[i].model;

Cout<<”imput the year of the creation of the boat”;

Cin>>boats[i].year;

Cout<<”imput the price”;

Cin>>boats[i].price;

} cout<<endl;

For (i=0,i<k,i++)

{ cout<<”the boat”<<boat[i].model<<”the year of the creation”<<boat[i].year<<endl;

Cout<< “the boat was sold”;

Объединение. Смесь

Объединение подобно структуре, однако в каждый момент времени может использоваться только один элемент объединения

Union

{описание элементов ;

}

Элементы описываются также как и в структуре.

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

-для инициализации используемого объекта памяти, если в каждый момент времени только один из объектов является активным

-для интрапритации основного представления одного объекта, как если бы этому объекту был присвоен другой тип

Struct emplouer

{ char name[64];

Int age;

Unsigned int employer-number

Struct date

{int day;

Int month;

Int year;

}hire_date;

Float salary;}

New_employer

Особый вид полей структуры, который используется для компактного хранения некоторых типов данных( например флажков). При описании битового поля после имени поля, через двоеточие указвается длина поля в битах, т.е. целое положительное число

Struct bitcord

{unsigned face:4; король дама…

Unsigned suit:2; масть

Unsigned color :1; цвет

};

Имеются сведения о сотруднике- фамилия имя отчество, должность, дата поступления на работу(год), дата увольнения, оклад. Заполнить информацию о сотрудниках. Вывести сведения о тех сотрудниках, стаж которых превышает 5 лет. Вывести список уволенных сотрудников.

Тип имя (аргумент)

{операторы;

Return знач;(истенные числа, выражения, const)

}

Пример:

#include <iostream.h>

Int square (int);

Int main()

{ for (int x=1;x<=10;x++)

{Cout<<sqare(x)<<” “;

Cout<<endl;

Return 0;

}

Int square (int y)

{Return y*y;}

Прототип- это явное объявление функции, которое предшествует определению

Задание 1:

Написать функцию возведения целого числа в куб.

#include <iostream.h>

Int square (int);

Int main()

Cin>>y;

{ for (int x=1)

{Cout<<square(x)<<” “;

Cout<<endl;

Return 0;

}

Int square (int y)

{Return y*y*y;}

Задание 2:

Написать функцию нахождения максимального из трёх целых чисел.

#include <iostream.h>

Int square (int);

Int main()

For (int z=1;z<=3;z++)

Cin>>h[z];

{ for (int x=1)

{Cout<<square(x)<<” “;

Cout<<endl;

Return 0;

}

Int square (int y)

{Return

For (int i=1;i<=2;i++)

{Min=h[i];

If (h[i]<h[i+1})

Min=h[i+1];

}

Cout<<min;

;}

Задание 3:

Написать функцию, которая выводит значения косинусов угла начиная с 90 с интервалом в 5 градусов

#include <iostream.h>

Int square (int);

Int main()

{ for (int x=1;x<=10;x++)

{Cout<<sqare(x)<<” “;

Cout<<endl;

Return 0;

}

Int square (int y)

{Return cos(pi/180*x);}