/* ввод счета*/
main( )
{
int i, score[10];
for (i = 0; i <= 9; i++)
scanf(" %d", &a[i]); /* ввод десяти результатов*/
printf("Введены следующие результаты :\n" );
for (i = 0; i <= 9; i++)
printf(" %5d", a[i]); /* проверка правильности ввода*/
printf("\n");
}
В понятие хорошего стиля программирования входит эхо-печать только что введенных величин. Она даст уверенность, что в программе будут обрабатываться те данные, для которых она предназначена.
Применяемый здесь способ гораздо более удобен, чем использование 10 различных операторов scanf()и 10 отдельных операторов printf()для ввода и проверки десяти результатов, определяющих число набранных очков. Цикл forобеспечивает очень простои и удобный способ использования индексов массивов.
Какого типа операции могли бы мы выполнить над этими данными? Мы могли бы найти их среднее, величину стандартного отклонения (мы знаем даже, как это сделать) и максимальное значение счета, а также произвести их сортировку в некотором порядке. Займемся двумя простейшими задачами: нахождением среднего и максимального результатов.
Чтобы вычислить среднее, мы можем добавить к нашей программе приведенный ниже фрагмент:
int sum, average;
for(i = 0, sum = 0; i <= 9; i++) /* две инициализации*/
sum + = a[i]; /* суммирование элементов массива */
average = sum/10; /*классический метод усреднения */
printf(" Средний результат равен %d.\n", average);
Для нахождения максимального результата к программе можно добавить следующий фрагмент:
int highest;
for(highest = а[0], i = 1; i <= 9; i++)
if(a[i] > highest) highest = a[i];
printf ("Максимальный результат равен %d.\n", highest);
Здесь мы начинаем с того, что полагаем переменную highestравной величине а[0]. Затем производится сравнение значения highestс каждым элементом массива. Когда обнаруживается, что некоторая величина больше текущего значения переменной highest, ей присваивается эта новая большая величина.
Теперь объединим все части программы. На псевдокоде алгоритм ее работы можно записать следующим образом:
ввод результатов.
эхо-печать результатов.
вычисление и печать среднего значения.
вычисление и печать максимального значения.
Кроме того, мы несколько обобщим нашу программу:
/* результаты*/
#define NUM 10
main( )
{
int i, sum, average, highest, score [NUM];
printf(" Укажите10 результатов. \n");
for(i = 0; i < NUM; i++)
scanf(" %d" , &scorc[i]); /* ввод десяти результатов */
printf(" Введены следующие результаты:\n");
for(i = 0; i
printf("%5d", score[i]);/* проверка правильности ввода*/
printf("\n");
tor(i = 0, sum = 0; i < NUM; i++)
sum + = score[i]; /* суммирование элементов массива */
average = sum/NUM; /* классический метод усреднения */
printf(" Средний результат равен %d.\n", average);
for(highest = score[0], i = 1; i < NUM; i++)
if(score[i] > highest) /* какая из величин больше*/
highest = score[i];
printf(" Максимальный результат равен %d.\n", highest);
}
Мы заменили число 10символической константой и воспользовались тем, что выражения i <=(NUM-1)и i < NUMэквивалентны.
Давайте сначала посмотрим, как это программа работает, а затем сделаем несколько замечаний.
Укажите 10 результатов:
76 85 62 48 98 71 66 89 70 77
Введены следующие результаты:
76 85 62 48 98 71 66 89 70 77
Средний результат равен 74. Максимальный результат равен 98.
Первый момент, который необходимо отметить, состоит в том, что мы использовали четыре различных цикла for. Вас может заинтересовать вопрос: является ли это на самом деле необходимым или мы можем некоторые из данных операций объединить в одном цикле? Такая возможность существует, и она позволила бы сделать программу более компактной. Однако мы побоялись следовать такому подходу (видите, какие мы впечатлительные люди!), поскольку это противоречит принципу модульности. Смысл, заключенный в данной фразе, состоит в том, что программа должна быть разбита на отдельные единицы, или "модули", причем каждый из них должен выполнять одну задачу. (Наша запись на псевдокоде отражает деление программы на четыре модуля.) Такое разбиение облегчает чтение текста программы. Возможно, еще более важным является то, что если отдельные части программы не перемешаны, ее коррекция или модификация упрощаются. Для этого необходимо только исключить из программы требуемый модуль, заменить его новым, а оставшуюся часть программы не изменять.
Читать дальше