Ввод и вывод массива
Элементы числового массива нужно вводить и выводить поэлементно в цикле.
#define N 20
…
float x[N];
int n,
i; // индекс элемента
scanf(“%d”,&n);
for(i=0; i< n; i++) // цикл ввода элементов массива
scanf(“%f”, &x[i]);
Для ввода и вывода символьного массива (строки символов) есть специальные функции gets() и puts().
Функция gets() вводит с клавиатуры строку, заменяя символ «перевод строки» нулевым байтом (нуль - символом).
Функция puts() выводит на экран строку, завершающуюся нуль-символом и перемещает курсор на новую строку. Например,
char st[80];
gets(st); puts(st);
Если в условии задачи даны переменные с индексами, для них не обязательно использовать массив. Массив нужен для входных или выходных данных, если их элементы обрабатываются неоднократно или не в том порядке, в котором вводятся или выводятся. В этих случаях приходится одновременно хранить в памяти все элементы в виде массива.
Рассмотрим задачи и решим, в каких задачах необходимы массивы для хранения данных:
11. Дано целое n>0 и последовательность вещественных чисел x1, x2,…, xn. Написать программу
а) для определения суммы и количества положительных элементов последовательности;
б) для определения количества элементов последовательности больших первого элемента x1;
в) для определения количества элементов последовательности больших последнего элемента xn.
12. Дано целое n>0 и последовательность вещественных чисел x1, x2,…, xn. Написать программу
а) для выдачи на экран только положительных чисел последовательности.
б) для выдачи на экран сначала всех отрицательных, а затем всех положительных чисел последовательности.
13. Даны значения температур каждого из n дней месяца ( n ≤ 31).
Написать программу
а) определения среднемесячной температуры;
б) определения количества дней, когда температура была выше среднемесячной.
14. Дан текст, продолжающийся до конца файла.
Написать программы для решения следующих задач.
а) Переставить символы текста в обратном порядке.
б) Подсчитать количество слов, содержащих букву ‘a’.
в) Вывести слова, содержащие букву ‘a’.
Для задач 11в, 12б, 13б, 14а, 14в необходимо использование массивов, в остальных задачах не требуются массивы.
Задача 11. Дано целое n>0 и вещественные x1, x2, ..., xn . Составить программу подсчета количества чисел больших первого числа - 11б (больших последнего числа – 11в).
Тест 11б. Вход: 4 3 12 7 5 Тест 11в. Вход: 4 3 12 7 5
Выход: k = 3 Выход: k = 2
/* Программа 11б. */ /* Программа 11в. */
#include <stdio.h> #include <stdio.h>
#define N 20
void main () void main ()
{ int n, i, k=0; { int n, i, k=0;
float m1, m; float m[N];
scanf (“%d”, &n); scanf (“%d”, &n);
scanf (“%f”, &m1);
for (i = 1; i < n; i++) for (i = 0; i < n; i++)
{ scanf (“%f”, &m); scanf (“%f”, &m[i]);
if (m > m1) k++; for (i=0; i < n-1; i++)
} if (m[i] > m[n-1]) k++;
printf (“k=%d\n”, k); printf (“k=%d\n”, k);
} }
Пояснения к программе.
1. Для решения задачи 11б достаточно хранить первое число в переменной m1, а остальные числа поочередно вводить в переменную m и сравнивать с величиной m1.
2. Для решения задачи 11в требуется хранить все числа в виде массива. Сначала данные в цикле вводятся в массив m, затем в следующем цикле каждый элемент массива сравнивается с последним элементом.
Задача 13. Даны значения температур каждого из n дней месяца (n ≤ 31). Написать программу для решения следующей задачи. Определить среднюю температуру за месяц. Вывести дни, когда температура была выше средней, и количество таких дней.
/* Программа 13 Средняя температура */
#include <stdio.h>
#define N 31
main ()
{ int n,
i,
k=0;
float t[N],
s=0;
scanf (“%d”, &n);
for (i = 0; i < n; i++) // цикл ввода значений температур
{ scanf (“%f”, &t[i]);
s = s + t[i]; // с вычислением суммарного значения
}
s = s/n; // вычисление среднего значения температур
printf (“Средняя температура =%.1f\n”, s);
printf (“\n Дни с температурой выше средней:\n”);
for (i = 0; i < n; i++)
if (t[i] > s)
{ printf (“%d ”, i+1); k++; }
printf (“\n Количество дней = %d”, k);
return 0;
}
Пояснения к программе.
1. Определяется массив t размером до 31 элемента (по количеству дней в самом длинном месяце). Количество используемых элементов массива задается вводом значения величины n.
2. В первом цикле вводятся элементы массива t – значения температур каждого дня месяца и вычисляется суммарная температура за месяц.
3. После ввода температур и вычисления суммарной температуры, определяется средняя температура за месяц.
4. Во втором цикле температура каждого из дней месяца проверяется на отклонение от средней температуры.
Задача 14а. Переставить символы текста в обратном порядке.
Тест. Вход: ПИРАМИДА Выход: АДИМАРИП
0 1 2 3 4 5 6 7 - индексы символов в массиве
/* перестановка символов текста в обратном порядке */
/* фрагмент программы */
char s, t[100];
int i, j, n;
gets (t); /* ввод строки */
n= strlen(t); /*определение длины строки */
for (i=0, j=n-1; i<j; i++, j--)
{ s=t[i]; t[i]=t[j]; t[j]=s; } /* Обмен t[i] <--> t[j] */
Пояснения к программе.
1. Строка просматривается с двух концов: от начала до середины строки с увеличением индекса символа i, от конца до середины строки с уменьшением индекса j, и выполняется обмен символа t[i] с символом t[j] через дополнительную переменную s.
Для приведенного теста цикл повторяется 4 раза до середины строки, с изменением i от 0 до 3, а j - от 7 до 4.
Контрольные вопросы и упражнения.
1. Объясните понятие размерности массива.
2. Составьте описания данных для представления целочисленного вектора длиной до 25 чисел и вещественной матрицы на 10 строк и 10 столбцов.
3. Запишите фрагмент программы для ввода элементов целочисленной матрицы размером 20 строк и 30 столбцов.
4. Запишите функцию ввода строки символов. Объясните, какой символ сохраняется как признак конца строки.
5. Дано натуральное число N>0 и массив А из N различных целых чисел. Напишите программу (или фрагмент программы) для решения следующей задачи. Переставить местами наибольший и наименьший элементы заданного массива и напечатать полученный массив.
6. Дан текст, произвольной длины, продолжающийся до конца файла. Напишите программу для решения следующей задачи. Определить, сколько раз каждый символ латинского алфавита входит в текст.
7. Дан текст, произвольной длины, продолжающийся до конца файла. Напишите программу для определения символа, встречающегося в тексте с максимальной частотой.
8. Дан текст, длиной не более 80 символов. Напишите программу определения, симметричен ли текст.
Бикмурзина
А.Р., Захарова З.Х., Хохлов Д.Г.