- •Глава III. Массивы и указатели
- •9. Массивы
- •9.1. Общие принципы организации массивов
- •9.2. Объявление и инициализация массивов
- •9.3. Заполнение массива данными и вывод элементов массива
- •1. Заполнение массива данными
- •2. Вывод элементов массива
- •9.4. Типовые задачи на обработку одномерных массивов
- •1. Поиск максимального (минимального) значения в массиве и его индекса
- •2. Подсчет суммы значений элементов массива, удовлетворяющих заданному условию
- •3. Подсчет элементов массива, удовлетворяющих заданному условию
- •4. Поиск значений
- •5. Формирование массива по заданному условию
- •6. Перестановка элементов массива в обратном порядке
- •7. Циклический сдвиг элементов массива
- •8. Сортировка элементов массива в порядке возрастания (убывания)
- •9.5. Типовые задачи на обработку двумерных массивов
- •10. Указатели
- •10.1. Назначение указателей
- •10.2. Объявление и инициализация указателей
- •10.3. Операции над указателями
- •10.4. Выражения и арифметические действия с указателями
- •10.5. Связь указателей с массивами
- •10.6. Операторы new и delete. Константа null
- •10.7. Динамические массивы
- •10.8. Массивы указателей
- •Содержание
9.3. Заполнение массива данными и вывод элементов массива
1. Заполнение массива данными
1) Заполнение массива в процессе вычислений
Этот способ заполнения элементов массива особенно удобен, когда между элементами существует какая-либо зависимость, например, арифметическая или геометрическая прогрессии, или элементы связаны между собой рекуррентным соотношением.
Пример. Создать массив m длины 10, занести в его i -ю ячейку значение i2 .
#include <stdio.h>
void main()
{
int m[10], i;
for(i=0; i<10; i++) m[i] = i*i;
}
Пример. Сформировать массив из 5 строк и 5 столбцов, у которого элементы равны произведению своих индексов.
#include <stdio.h>
void main()
{
int mas[5][5],i,j;
for(i=0; i<5; i++)
for(j=0; j<5; j++)
mas[i][j] = i*j;
}
2) Ввод элементов массива с клавиатуры
Используется обычно тогда, когда между элементами не наблюдается никакой зависимости.
Пример. Ввод элементов одномерного массива с клавиатуры
const int n=10;
int i, mas[n];
printf("Введите элементы массива\n"); // подсказка для ввода
for(i=0; i<n; i++)
{
printf("mas[%d]=", i);
scanf("%d", &mas[i]); // ввод элемента массива с номером i
}
Пример. Ввод элементов двумерного массива с клавиатуры
const int m=3,n=4;
int i,j,mas[m][n];
printf("Введите элементы массива\n");
for(i=0; i<m; i++)
for(j=0; j<n; j++)
{
printf("mas[%d][%d]= ", i,j);
scanf("%d", &mas[i][j]);
}
3) Чтение элементов массивы из файла (текстового или двоичного)
2. Вывод элементов массива
Пример. Вывод элементов одномерного массива
for(i=0; i<n; i++)
printf("mas[%d]=%d\n", i,mas[i]);
или
for(i=0; i<n; i++)
printf(" %d", mas[i]);
Пример. Вывод элементов двумерного массива
for(i=0; i<m; i++)
for(j=0; j<n; j++)
printf("mas[%d][%d]=%d\n", i,j,mas[i][j]);
или
for(i=0; i<m; i++)
{
for(j=0; j<n; j++) printf(" %d", mas[i][j]);
printf("\n");
}
Пример. Программа, которая умножает все элементы массива, введенного с клавиатуры, на 2 и выводит полученный массив на экран.
#include <stdio.h>
void main()
{
const int n=10;
int i, A[n];
printf("Введите элементы массива\n");
for(i=0; i<n; i++)
{
printf("A[%d]=", i);
scanf("%d", &A[i]);
}
for(i=0; i<n; i++)
{
A[i]=A[i]*2; // умножение элемента массива на 2
printf(" %d", A[i]); // вывод элемента массива
}
}
9.4. Типовые задачи на обработку одномерных массивов
В задачах на обработку одномерных массивов наиболее часто встречаются следующие алгоритмы:
1. Поиск максимального (минимального) значения в массиве и его индекса
Пример. Программа поиска максимального элемента массива и его индекса.
#include <stdio.h>
void main()
{
const int n=10;
int i, A[n], max, imax;
printf("Введите элементы массива\n");
for(i=0; i<n; i++)
{
printf("A[%d]=", i);
scanf("%d", &A[i]);
}
max=A[0]; imax=0; // предполагаем, что A[0] – максимальный
for(i=1; i<n; i++) // перебор с элемента 1
if (A[i]>max) { max=A[i]; imax=i; }
printf("Максимальный элемент массива: %d\n", max);
printf("Индекс максимального элемента: %d\n", imax);
}
Чтобы найти минимальный элемент, достаточно изменить условие в условном операторе на обратное (A[i] < max). Конечно, вспомогательную переменную в этом случае лучше (но не обязательно!) назвать min.
Примечание. Если в массиве есть несколько элементов, равных максимальному, то в результате работы программы будет выведен индекс первого максимального элемента.
При решении данной задачи можно обойтись одной дополнительной переменной. Дело в том, что по номеру элемента можно легко найти его значение в массиве. На этом основана приведенная ниже программа.
#include <stdio.h>
void main()
{
const int n=10;
int i, A[n], imax;
// ввод массива А
imax=0; // Предполагаем, что 0 – индекс максимального эл-та
for(i=1; i<n; i++)
if (A[i]>A[imax]) imax=i; // Запомнили новый номер
printf("Максимальный элемент A[%d]=%d\n", imax, A[imax]);
}
