
- •Лекция №6
- •7.Сложные типы данных
- •7.1. Массивы
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •7.2. Структуры
- •Void main()
- •Void main()
- •Поля битов
- •Void main ()
- •Переменные с изменяемой структурой
- •12.3. Данные перечислимого типа
- •Void main()
- •Void main()
- •12.4. Объединения (смеси)
- •12.5. Тип void
Void main()
{
const N=2,M=3; /*размерность масcива А*/
static int A[N][M];
int B[N],C[N]; /*описание масcивов А,В,С*/
int MAX ;
int I,J;
//ввод элементов массива
printf("Bведите элементы массива А[%d][%d]\n ",N,M);
for (I=0;I<N;I++)
for (J=0;J<M;J++)
scanf("%d",&A[I][J]);
// нахождение наибольшего элемента последовательности
for (I=0;I<N;I++)
{
MAX=A[I][1];
for (J=0;J<M;J++)
if (A[I][J]>MAX) MAX=A[I][J];
if (MAX%2==0)
{
B[I] =MAX;
C[I]=0;
}
else
{C[I] =MAX;
B[I]=0;
}
}
printf("\nМассив B\n");
for (I=0;I<N;I++)
printf("%-4d",B[I]);
getch();
printf("\nМассив С\n");
for (I=0;I<N;I++)
printf("%-4d",C[I]);
getch();
}
Пример: Дан массив A[N][M]. Найти максимальный элемент каждой строки массива.
#include<stdio.h>
Void main()
{
const N=2,M=3;
static int A[N][M];
int I,J,MAX;
printf("Введите массив А[%d][%d]\n",N,M);
for(I=0;I<N;I++)
for(J=0;J<M;J++)
scanf("%d",&A[I][J]);
printf("\nМаксимальные элементы каждой строки:\n");
for(I=0;I<N;I++)
{
MAX=A[I][1];
for(J=0;J<M;J++)
if (A[I][J]>MAX) MAX=A[I][J];
printf("%d\n",MAX);
}
}
Самостоятельная проработка:
Пример: Дан двумерный массив A[N][M]. Поменять местами 1 и 2 строку, а затем поменять местами 1 и 3 столбец.
#include <stdio.h>
Void main()
{
const n=3,m=3;
static int a[n][m];
int i,j,k;
printf(" Введите массив %d X %d\n",n,m);
for(i=0;i<n;i++)
for (j=0;j<m;j++)
scanf("%d",&a[i][j]);
for(j=0;j<m;j++)
{
k=a[1][j];
a[1][j]=a[2][j];
a[2][j]=k;
}
printf(" 1 и 2 строки поменяли местами\n");
for(i=0;i<n;i++)
{
for (j=0;j<m;j++)
printf("%d",a[i][j]);
printf("\n");
}
for(i=0;i<n;i++)
{
k=a[i][1];
a[i][1]=a[i][3];
a[i][3]=k;
}
printf(" 1 и 3 столбцы поменяли местами\n");
for(i=0;i<n;i++)
{
for (j=0;j<m;j++)
printf("%d",a[i][j]);
printf("\n");
}
}
Пример объявления символьного массива.
char str[] = “объявление символьного массива“;
char str[] ={ “объявление символьного массива“};
Следует учитывать, что в символьном литерале находится на один элемент больше, так как последний из элементов является управляющей последовательностью '\0'.
Пример: Дано натуральное n, символы S1,..,Sn. Подсчитать наибольшее число букв А, идущих подряд в данной последовательности
символов.
#include<stdio.h>
#include<conio.h>
Void main()
{
const N=10;
int I,K,K1;
char S[N];
K=0; K1=0;
printf("ВВЕДИТЕ СТРОКУ СИМВОЛОВ\n");
scanf("%s",S);
for (I=0;I<N;I++)
{
if (S[I]=='A') K=K+1; else K=0;
if ((K>1)&&(K>K1)) K1=K;
}
printf("КОЛИЧЕСТВО СТОЯЩИХ ПОДРЯД А = %d",K1);
getch();
}
7.2. Структуры
Структура - это набор из одной или более переменных, возможно различных типов, сгруппированных под одним именем для удобства обработки. Структуры - это составной объект, в который входят элементы любых типов(за исключением функций в языке С) . В отличие от массива, который является однородным объектом, структура может быть неоднородной. Тип структуры определяется записью вида:
struct [Тег] { ТипДанных Описатель1;
………
ТипДанных ОписательN; }[СписокИдентификаторов]
В структуре обязательно должен быть указан хотя бы один компонент. ТипДанных указывает тип структуры для объектов, находящихся в описателях. В простейшей форме описатели представляют собой идентификаторы или массивы. Наличие тега необязательно, тег является идентификатором структуры.
Пример объявления структур:
struct koord{ double x,y; } s1, s2, sm[9];
struct { int year;
char moth, day; } date1, date2;
Переменные s1, s2 определяются как структуры, каждая из которых состоит из двух компонент х и у. Переменная sm определяется как массив из девяти структур. Каждая из двух переменных date1, date2 состоит из трех компонентов year, moth, day. >p>
Наличие СпискаИдентификаторов в записи типа структуры также необязательно. Объявление СпискаИдентификаторов, как структур, допускается с использованием тега структуры, описанной ранее, в форме:
struct Тег СписокИдентификаторов;
Пример объявления структур:
struct studeut st1,st2;
Использование тегов структуры необходимо для описания рекурсивных структур. Ниже рассматривается использование рекурсивных тегов структуры.
struct node { int data;
struct node * next; } st1_node;
Тег структуры node действительно является рекурсивным, так как он используется в своем собственном описании, т.е. в формализации указателя next. Структуры не могут быть прямо рекурсивными, т.е. структура node не может содержать компоненту, являющуюся структурой node, но любая структура может иметь компоненту, являющуюся указателем на свой тип, как и сделано в приведенном примере.
Инициализация структуры осуществляется при помощи заключенного в фигурные скобки списка инициализаторов для компонент структуры. Инициализаторы даются по возрастанию номеров компонентов.
Пример:
struct ft{ int a;
char s[12];
float g;} f={6,”Hello”,5.72};
Доступ к компонентам структуры осуществляется с помощью указания имени структуры и следующего через точку имени выделенного компонента, например:
st1.name=”Иванов”;
st2.id=st1.id;
st1_node.data=st1.age;
Пример: Дан массив из 5 записей. Каждая запись содержит три поля: первое поле – название продукции; второе поле – количество продукции; третье – год выпуска.
Вывести на экран список и количество продукции, год выпуска которой не меньше 1997 и не больше 1999г.
#include<stdio.h>
#include<conio.h>