
Обработка массивов
Массивом называется упорядоченная совокупность однотипных данных, имеющая общее имя.
Объявление массива:
int m[10]; //одномерный массив из 10 целых элементов
float a[4][5]; //двумерный массив из 4 строк и 5 столбцов (таблица)
Элементы массива пронумерованы по порядку и хранятся в соседних ячейках памяти. Поэтому к элементам массива можно обращаться по номеру:
m[0] m[1] m[2] и т.д. или через указатели.
Любая обработка массива, в том числе ввод и вывод, происходит при помощи цикла. Двумерные массивы обрабатываются при помощи двойного вложенного цикла.
Пример 15(а).
Вычислить сумму и количество элементов одномерного массива, значения которых кратны 3.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
int m[10]; //объявление одномерного массива из 10 элементов
int i,sum=0,k=0;
clrscr();
randomize(); //инициализация генератора случайных чисел
for (i=0;i<10;i++) //цикл для перебора номеров массива
{
m[i]=random(100)-50; //элементам массива присвоим случайные значения
printf("%5i",m[i]); //вывод элементов массива на экран
}
printf("\n"); //перевод строки
for (i=0;i<10;i++) // цикл для перебора номеров массива
{
if (m[i]%3==0)
{k++; //вычисляем количество элементов кратных 3
sum+=m[i];} //вычисляем сумму элементов кратных 3
}
printf("k=%i sum=%i", k, sum); //вывод ответов
getch();
}
Пример 15(б).
Приведем пример программы с тем же заданием, но массив будем обрабатывать с помощью указателей.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
int m[10]; //объявление одномерного массива из 10 элементов
int i,sum=0,k=0;
int *p1,*p2; // объявление указателей на целый тип
clrscr();
randomize(); //инициализация генератора случайных чисел
p1=&m[0]; //установим указатель 1 на начало массива
p2=&m[9]; //установим указатель 2 на конец массива
while (p1<p2) //цикл пока не дошли до конечного адреса
{
*p1=random(100)-50; //элементам массива присвоим случайные значения
printf("%5i", *p1); //вывод элементов массива на экран
p1++; //добавление адреса
}
printf("\n"); //перевод строки
p1=&m[0]; //заново установим указатель 1
while (p1<p2) //цикл пока не дошли до конечного адреса
{
if (*p1%3==0)
{k++; //вычисляем количество элементов кратных 3
sum+=*p1; //вычисляем сумму элементов кратных 3
p1++;}
}
printf("k=%i sum=%i", k, sum); //вывод ответов
getch();
}
Пример 16(а).
Вычислить сумму положительных элементов двумерного массива.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
int m[4][5]; //объявление двумерного массива из 4 строк и 5 столбцов
int i,sum=0,k=0;
clrscr();
randomize(); //инициализация генератора случайных чисел
for (i=0;i<4;i++) //цикл для перебора номеров строк массива
{
for (j=0; j<5; j++) //цикл для перебора номеров столбцов массива
{
m[i][j]=random(100)-50; //элементам массива присвоим случайные значения
printf("%5i",m[i][j]); //вывод элементов массива на экран
}
printf("\n"); //перевод строки, чтобы получилась таблица
}
for (i=0;i<4;i++) //цикл для перебора номеров строк массива
{
for (j=0; j<5; j++) //цикл для перебора номеров столбцов массива
{
if (m[i][j]>0)
sum+=m[i][j]; //вычисляем сумму положительных элементов
}
}
printf("sum=%i", sum); //вывод ответа
getch();
}
Пример 16(б).
Вычислить сумму положительных элементов каждого столбца двумерного массива.
for (j=0; j<5; j++) //цикл для перебора номеров столбцов массива
{ sum=0; //для каждого столбца сумма считается с нуля
for (i=0;i<4;i++) //цикл для перебора номеров строк массива
{if (m[i][j]>0)
sum+=m[i][j]; //вычисляем сумму положительных элементов
}
printf("столбец %i sum=%i", j, sum); //вывод суммы каждого столбца
}