- •Лекция №6
- •7.Сложные типы данных
- •7.1. Массивы
- •Void main()
- •Void main()
- •7.2. Структуры
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Поля битов
- •Void main ()
- •Переменные с изменяемой структурой
- •12.3. Данные перечислимого типа
- •Void main()
- •Void main()
- •12.4. Объединения (смеси)
- •12.5. Тип void
Void main()
{
const N=10; /*размерность масcива А*/
static float A[N]; /*описание масcива А */
float k ;
int I,J,m ;
//ввод элементов массива
printf("Bведите через пробел %d чисел\n ",N);
for (I=0;I<N;I++) scanf("%f",&A[I]);
// Сортировка
for(I=0;I<N-1;I++)
for (J=I+1;J<N;J++)
if (A[I]<A[J])
{
k=A[I];
A[I]=A[J];
A[J]=k;
}
//вывод отсортированного массива
printf("\nОтсортированный массив\n");
for (I=0;I<N;I++)
printf("%8.2f\n",A[I]);
}
Пример: Дан массив A[N]. Найти произведение положительных элементов первой половины массива и сумму отрицательных элементов второй половины массива. Использовать цикл while.
#include<stdio.h>
#include<conio.h>
Void main()
{
const N=10;
int I,P,S;
static int A[N];
printf("Введите %d чисел\n",N);
I=0;
P=1;
while(I<N/2)
{ scanf("%d",&A[I]);
if (A[I]>0) P=P*A[I];
I++;}
I=N/2+1;
S=0;
while (I<N)
{ scanf("%d",&A[I]);
if (A[I]<0) S=S+A[I];
I++;}
printf("P= %d\n",P);
printf("S= %d",S);
getch();
}
В языке С++ определены только одномерные массивы, но поскольку элементом массива может быть массив, можно определить и многомерные массивы. Они формализуются списком КонстантныхВыражений следующих за идентификатором массива, причем каждое КонстантноеВыражение заключается в свои квадратные скобки.
Форма записи многомерного массива:
СпецификаторТипа ИмяМассива [КонстантноеВвыражение1] …[КонстантноеВыражениеN];
Каждое КонстантноеВыражение в квадратных скобках определяет число элементов по данному измерению массива, так что объявление двухмерного массива содержит два КонстантныхВыражения, трехмерного - три и т.д. Отметим, что в языке С++ первый элемент массива имеет индекс равный 0.
Инициализация массива выполняется при помощи заключенного в фигурные скобки списка инициализаторов. Инициализаторы даются по возрастанию индекса массива.
Примеры:
int w[3][3] = { { 2, 3, 4 },
{ 3, 4, 8 },
{ 1, 0, 9 } };
int a[2][3]; /* представлено в виде матрицы
a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2] */
В последнем примере объявлен массив w[3][3]. Списки, выделенные в фигурные скобки, соответствуют строкам массива, в случае отсутствия скобок инициализация будет выполнена неправильно.
Самостоятельная проработка:
В языке С++ можно использовать сечения массива, как и в других языках высокого уровня (PL1 и т.п.), однако на использование сечений накладывается ряд ограничений. Сечения формируются вследствие опускания одной или нескольких пар квадратных скобок. Пары квадратных скобок можно отбрасывать только справа налево и строго последовательно. Сечения массивов используются при организации вычислительного процесса в функциях языка С++, разрабатываемых пользователем.
Примеры:
int s[2][3];
Если при обращении к некоторой функции написать s[0], то будет передаваться нулевая строка массива s.
int b[2][3][4];
При обращении к массиву b можно написать, например, b[1][2] и будет передаваться вектор из четырех элементов, а обращение b[1] даст двухмерный массив размером 3 на 4. Нельзя написать b[2][4], подразумевая, что передаваться будет вектор, потому что это не соответствует ограничению, наложенному на использование сечений массива.
Пример: Дан двумерный массив A[N][M]. Выполнить сортировку массива по возрастанию.
#include<stdio.h>
#include<conio.h>
main()
{
const N=2,M=3; /*размерность масcива А*/
static int A[N][M];
static int B[N*M]; /*описание масcивов А,В,С*/
int I,J,K;
//ввод элементов массива
K=1;
printf("Bведите элементы массива А[%d][%d]\n ",N,M);
for (I=0;I<N;I++)
for (J=0;J<M;J++)
{
scanf("%d",&A[I][J]);
B[K]=A[I][J];
K=K+1;
}
for (I=0;I<N*M-1;I++)
for (J=I+1;J<N*M;J++)
if (B[I]<B[J])
{ K=B[I];
B[I]=B[J];
B[J]=K;
}
K=1;
for (I=0;I<N;I++)
for (J=0;J<M;J++)
{
A[I][J]=B[K];
K=K+1;
}
printf("\nОтсортированный массив \n");
for (I=0;I<N;I++)
{
for (J=0;J<M;J++)
printf("%4d",A[I][J]);
printf("\n");
}
getch();
}
Пример: Дан двумерный массив NxM целых чисел, где N=2, а M=3. Сформировать массив В, состоящий из четных максимальных элементов каждой строки массива, и массив С, состоящий из максимальных нечетных элементов каждой строки массива.
#include<stdio.h>
#include<conio.h>
