Similar presentations:
Многомерные массивы в C
1. Многомерные массивы в C
Описание двумерного массива строится из описания одномерногопутем добавления второй размерности, то есть элементом
массива может быть в свою очередь тоже массив, например:
int a[4][3];
Анализ подобного описания необходимо проводить в направлении
выполнения операций [], то есть слева направо. Таким образом,
переменная a является массивом из четырех элементов, что
следует из первой части описания a[4].
Каждый элемент a[i] этого массива в свою очередь является
массивом из трех элементов типа int, что следует из второй части
описания.
2. Многомерные массивы в C
Пусть объявлен массивa
int a[3][4]
100
a[0]
a[1]
106
100
a[2]
114
101
102
122
103
104
a[0][0]
15
106
a[0][1]
24
107
108
a[1][0]
-11
114
a[0][2]
-17
109
110
a[1][1]
98
115
116
a[2][0]
-5
122
105
124
111
112
a[1][2]
20
117
118
a[2][1]
14
123
a[0][3]
-42
a[1][3]
-3
119
120
a[2][2]
56
125
126
113
121
a[2][3]
48
127
128
129
3. Многомерные массивы в C
Пусть объявлен массивa
int a[3][4]
100
a[0]
a[1]
106
100
a[2]
114
101
102
122
103
104
a[0][0]
15
106
108
a[1][0]
-11
114
a[0][2]
-17
109
110
a[1][1]
98
115
116
a[2][0]
-5
122
105
a[0][1]
24
107
124
a[0][3]
-42
111
112
a[1][2]
20
117
118
a[2][1]
14
123
Имя двумерного массива без
квадратных скобок за ним имеет
значение адреса первого
элемента этого массива, то есть
значение адреса первой строки
— одномерного массива из трех
элементов.
a[1][3]
-3
119
120
a[2][2]
56
125
126
113
121
a[2][3]
48
127
128
129
4. Многомерные массивы в C
Пусть объявлен массивa
int a[3][4]
100
a[0]
a[1]
106
100
a[2]
114
101
102
122
103
104
a[0][0]
15
106
a[0][1]
24
107
108
a[1][0]
-11
114
a[0][2]
-17
109
110
a[1][1]
98
115
116
a[2][0]
-5
122
105
124
a[0][3]
-42
111
112
a[1][2]
20
117
118
a[2][1]
14
123
Имя двумерного массива с
одним индексным выражением
в квадратных скобках за ним
обозначает соответствующую
строку двумерного массива и
имеет значение адреса первого
элемента этой строки.
Например, в нашем случае a[2]
является адресом величины
типа int, а именно ячейки, в
которой находится число -5
a[1][3]
-3
119
120
a[2][2]
56
125
126
113
121
a[2][3]
48
127
128
129
5. Многомерные массивы в C
Пусть объявлен массивa
int a[3][4]
100
a[0]
a[1]
106
100
a[2]
114
101
102
122
103
104
a[0][0]
15
106
a[0][1]
24
107
108
a[1][0]
-11
114
a[0][2]
-17
109
110
a[1][1]
98
115
116
a[2][0]
-5
122
105
124
a[0][3]
-42
111
112
a[1][2]
20
117
118
a[2][1]
14
123
Имя двумерного массива с
двумя индексными
выражениями в квадратных
скобках за ним обозначает
соответствующий элемент
двумерного массива и имеет тот
же тип. Например, в нашем
примере a[1][3] является
величиной типа int, а именно
ячейкой, в которой находится
число -3
a[1][3]
-3
119
120
a[2][2]
56
125
126
113
121
a[2][3]
48
127
128
129
6. Многомерные массивы в C
При решении задач двумерные массивы удобно представлять кактаблицу данных (например, чисел), каждый элемент которой имеет
двойную нумерацию --- номер строки и номер столбца таблицы.
Пусть дан двумерный массив A размером 4×10:
Индексы столбцов
Индексы строк
0 1 2 3 4 5 6 7 8 9
0 -2 4 14 -1 9 32 0 -7 16 8
1 3 4 -4 -3 -9 24 11 -1 6 4
2 -1 34 6 -1 9 14 5 4 12 8
3 -2 5 11 -9 5 32 0 -7 16 27
A
Имя мас сива
В этом массиве значение элемента A[2][6] равно 24 (элемент расположен
на пересечении второй строки и шестого столбца).
7. Многомерные массивы в C
Индексы столбцовИндексы строк
0 1 2 3 4 5 6 7 8 9
0 -2 4 14 -1 9 32 0 -7 16 8
1 3 4 -4 -3 -9 24 11 -1 6 4
2 -1 34 6 -1 9 14 5 4 12 8
3 -2 5 11 -9 5 32 0 -7 16 27
A
Имя мас сива
Если элементу массива A[2][6] присвоить значение -6 (A[2][6]=-6),
а элементу массива A[4][3] присвоить значение элемента A[1][10]
(A[4][3]=A[1][10]), то массив примет следующий вид:
Индексы столбцов
Индексы строк
0 1 2 3 4 5 6 7 8 9
0 -2 4 14 -1 9 32 0 -7 16 8
1 3 4 -4 -3 -9 -6 11 -1 6 4
2 -1 34 6 -1 9 14 5 4 12 8
3 -2 5 8 -9 5 32 0 -7 16 27
A
Имя мас сива
8. Многомерные массивы в C
// Ввод/вывод элементов массива#include <stdio.h>
#define SIZE1 5
void main() {
int ar1[SIZE1][SIZE1];
for (int i=0; i<SIZE1; i++)
for (int j=0; j<SIZE1; j++)
ar1[i][j]=i+j;
for (int i=0; i<SIZE1; i++) {
for (int j=0; j<SIZE1; j++)
printf("%d ",ar1[i][j]);
printf("\n");
}
}
9. Многомерные массивы в C
Дан двумерный массив A размером n×m. Составить программу,которая находит сумму всех элементов массива.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE1 100
void main() {
srand(time(NULL));
int a[SIZE1][SIZE1], sum=0, i, j, n, m;
printf(" n = "); scanf("%d",&n);
printf(" m = "); scanf("%d",&m);
for (i=0; i<n; i++)
for (j=0; j<m; j++)
a[i][j]=rand()%10;
10. Многомерные массивы в C
Дан двумерный массив A размером n×m. Составить программу,которая находит сумму всех элементов массива.
for (i=0; i<n; i++) {
for (j=0; j<m; j++)
printf ("%d ", a[i][j]);
printf("\n");
}
printf("\n");
for (i=0; i<n; i++)
for (j=0; j<m; j++)
sum+=a[i][j];
printf ("sum =%d",sum);
}
11. Многомерные массивы в C++.
Дан двумерный массив A размером n×m. Составить программу,которая находит сумму элементов каждой строки массива.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE1 100
void main() {
srand(time(NULL));
int a[SIZE1][SIZE1], sum, i, j, n, m;
printf(" n = "); scanf("%d",&n);
printf(" m = "); scanf ("%d",&m);
for (i=0; i<n; i++)
for (j=0; j<m; j++)
a[i][j]=rand()%10;
12. Многомерные массивы в C
Дан двумерный массив A размером n×m. Составить программу,которая находит сумму элементов каждой строки массива.
for (i=0; i<n; i++) {
for (j=0; j<m; j++)
printf("%d", a[i][j]);
printf("\n");
}
printf("\n");
for (i=0; i<n; i++) {
sum=0;
for (j=0; j<m; j++)
sum+=a[i][j];
printf ("sum %d = %d ",i+1,sum);
}
}
13. Многомерные массивы в C
Дан двумерный массив A размером 6×8. Составить программу,которая находит наибольший элемент в каждой строке и выводит его
экран.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE1 6
#define SIZE2 8
void main() {
srand(time(NULL));
int a [SIZE1][SIZE2], max, i, j;
for (i=0; i<SIZE1; i++)
for (j=0; j<SIZE1; j++)
a[i][j]=rand()%20;
14. Многомерные массивы в C
Дан двумерный массив A размером 6×8. Составить программу,которая находит наибольший элемент в каждой строке и выводит его
экран.
for (i=0; i<SIZE1; i++) {
for (j=0; j<SIZE1; j++)
printf("%d ",a[i][j]);
printf("\n");
}
printf("\n");
for (i=0; i<SIZE1; i++) {
max=a[i][0];
for (j=1; j<SIZE1; j++)
if (a[i][j]>max)
max=a[i][j];
printf ("max=%d", max);
}
}
15. Обработка элементов массива
СортировкиОчень часто в задачах требуется упорядочить некоторую
последовательность, то есть выполнить сортировку элементов
массива.
Существует большое количество различных
алгоритмов
сортировки.
Подробное
описание
различных
методов
сортировок, их эффективности можно найти в книгах Д. Кнута,
Н. Вирта.
16. Обработка элементов массива
Сортировка простым выбором (по возрастанию)1. В исходной последовательности выбирается наименьший элемент.
2. Найденный элемент меняется местами с первым элементом.
Затем эти операции повторяются с оставшимися n-1 элементами.
То есть в последовательности, начиная со второго элемента,
выбирается наименьший, затем он меняется местами со вторым.
Далее операции повторяются с оставшимися n-2 элементами и т.д.,
пока массив не окажется упорядоченным.
17. Обработка элементов массива
В программе, записанной ниже, последовательность, состоящая из nцелых чисел, упорядочивается в порядке возрастания с помощью
сортировки методом простого выбора.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE1 100
void main() {
srand(time(NULL));
int a[SIZE1], m, k, n, i, j;
cin>>n;
for (i=0; i<n; i++)
a[i]=rand()%20;
for (i=0; i<n; i++)
printf("%d",a[i]);
printf("\n");
18. Обработка элементов массива
В программе, записанной ниже, последовательность, состоящая из nцелых чисел, упорядочивается в порядке возрастания с помощью
сортировки методом простого выбора.
for (i=0; i<n-1; i++) {
k=i;
for (j=i+1; j<n; j++)
if (a[j]<a[k])
k=j;
m=a[i]; a[i]=a[k]; a[k]=m;
}
for (i=0; i<n; i++)
printf("%d", a[i]);
}
19. Обработка элементов массива
Сортировка методом пузырька (по возрастанию)Данный алгоритм основан на принципе сравнения и обмена пары
соседних элементов до тех пор, пока не будут рассортированы все
элементы.
1. В исходной последовательности просматриваются пары соседних
элементов. Если элементы некоторой пары находятся в
неправильном порядке (например, левее стоит больший элемент), то
меняем их местами. В результате, наибольший элемент окажется в
последовательности последним.
2. Затем в последовательности, просматриваются пары соседних
элементов, за исключением последнего элемента. Если элементы
некоторой пары находятся в неправильном порядке (левее стоит
больший элемент), то их меняют местами.
Далее операции повторяются с оставшимися n-2 элементами и т. д.
до тех пор, пока в просматриваемой части последовательности не
останется только один элемент.
20. Обработка элементов массива
В программе, записанной ниже, последовательность, состоящая из nцелых чисел, упорядочивается в порядке возрастания с помощью
сортировки методом пузырька.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE1 10
void main() {
srand(time(NULL));
int a[SIZE1], m, n, i, j;
cin>>n;
for (i=0; i<n; i++)
a[i]=rand()%20;
for (i=0; i<n; i++)
printf("%d", a[i]);
printf("\n");
21. Обработка элементов массива
В программе, записанной ниже, последовательность, состоящая из nцелых чисел, упорядочивается в порядке возрастания с помощью
сортировки методом пузырька.
for (i=n-1; i>0; i--)
for (j=1; j<=i; j++)
if (a[j-1]>a[j]) {
m=a[j-1]; a[j-1]=a[j]; a[j]=m;
}
for (int i=0; i<n; i++)
printf("%d", a[i]);
printf("\n");
}
22. Обработка элементов массива
Даны натуральное число n и двумерный массив размером n × m.Составить программу, упорядочивающую по возрастанию элементы
каждой строки. Полученный массив вывести на экран.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE1 100
void main() {
srand(time(NULL));
int a[SIZE1][SIZE1], i, j, n, m, t, l, k;
printf(" n = "); scanf("%d", &n);
Printf(" m = "); scanf("%d", &m);
for (i=0; i<n; i++)
for (j=0; j<m; j++)
a[i][j]=rand()%10;
23. Обработка элементов массива
Даны натуральное число n и двумерный массив размером n × m.Составить программу, упорядочивающую по возрастанию элементы
каждой строки. Полученный массив вывести на экран.
for (i=0; i<n; i++) {
for (j=0; j<m; j++)
printf("%d", a[i][j]);
printf("\n");
}
printf("\n");
for (i=0; i<n; i++)
for (j=0; j<m-1; j++) {
l=j;
for (k=j+1; k<m; k++)
if (a[i][k]<a[i][l])
l=k;
t=a[i][j]; a[i][j]=a[i][l]; a[i][l]=t;
}
24. Обработка элементов массива
Даны натуральное число n и двумерный массив размером n × m.Составить программу, упорядочивающую по возрастанию элементы
каждой строки. Полученный массив вывести на экран.
for (i=0; i<n; i++) {
for (j=0; j<m; j++)
printf("%d", a[i][j]);
printf("\n");
}
printf("\n");
}