Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
15
Добавлен:
03.03.2016
Размер:
2.4 Mб
Скачать

2. Вывод одномерного массива на экран.

Для компактности изображения массива на экране в каждой строке экрана целесообразно печатать несколько элементов массива.

Пусть формат вывода элемента вещественного массива имеет вид 8:2. Устанавливая между числами два пробела, в одной строке экрана можно разместить 8 чисел (строка экрана содержит 80 позиций). Тогда программа вывода может иметь вид:

.....................

k=0;

for (i=0;i<n;i++)

{

k++;

if (k<8)

printf("%8.2lf ",x[i]);

else

{

k=0;

printf("%8.2lf\n",x[i]);

}

}

if (k>0) printf("\n");

.....................

Переменная k - это счетчик количества чисел, выводимых в одну строку экрана. Пока k < 8, функция printf("%8.2lf ",x[i]) размещает очередные элементы массива в одной и той же строке экрана через 2 пробела. При k = 8 после вывода числа производится переход на следующую строку экрана printf("%8.2lf\n",x[i]), при этом счетчику k присваивается нулевое значение.

Предположим, что в массиве X количество элементов не кратно 8. Тогда вывод последнего элемента будет осуществлен без перехода на новую строку экрана. Если в программе после вывода массива X выполняется еще вывод хотя бы одного числа, то это число будет размещено в той же строке экрана, где расположен элемент , что по крайней мере неэстетично. Для предотвращения такой ситуации в вышеприведенной программе записан оператор "if (k>0) printf("\n");".

Если известно, что печатаемые значения будут занимать менее, например, 8 символов, то можно воспользоваться оператором:

for(i=0; i<n;i++) printf("%8.2lf",x[i]);

без использования счетчика выведенных значений. В этом случае, в строке распечатается 10 значений, разделенных, по меньшей мере, одним пробелом, после чего курсор автоматически будет переведен на следующую строку. Этот способ уменьшает сложность программы печати значений массива и применим в тех случаях, когда можно в формате печати задать длину поля числом, на которое 80 будет делиться без остатка.

Примеры обработки одномерных массивов

Пример 1. Вычислить среднее арифметическое значение элементов массива .

Блок-схема

Си-программа

#define NMAX 500

int main()

{

int i, // параметр цикла

n; // кол-во элементов массива

float S; // среднее арифметическое значение

float X[NMAX]; // исходный массив

//Ввод и печать n, X

S=0;

for (i=0;i<n;i++)

S += X[i];

S /= n;

//Печать S

getch();

return 0;

}

В программе переменная S используется, как сумматор. Поэтому в программе перед накоплением в переменной S суммы элементов массива X производится обнуление этой переменной оператором S = 0. Вместо этого оператора можно было использовать инициализацию переменной при ее определении, если до использования в цикле ее значение не изменялось.

Следует обратить внимание еще на одно обстоятельство. Массиву Х в программе выделяется память, необходимая для размещения 500 элементов. В принципе в программе можно было бы написать: for (i=0;i<NMAX;i++).

Однако это означало бы, что программа может обрабатывать лишь массив, содержащий 500 элементов, но не 499 или 100. Поэтому для обеспечения универсальности работы программы обработке подвергается текущее количество элементов n в предположении, что 0<n<NMAX.

Пример 2. Вычислить среднее арифметическое значение положительных элементов массива .

Блок-схема

Отличие решения этой задачи от предыдущего примера заключается в том, что перед накоплением сумы элементов массива в S проверяется его значение (оно должно быть положительным X[i] > 0). В переменной k подсчитывается количество таких чисел. В частном случае в массиве X может не быть ни одного положительного элемента (k==0). Тогда при отсутствии оператора «if (k>0)» было бы деление на нуль, что даст неправильный результат. В программе используется оператор «if (k)», т.к. значение k может быть только нулевым или больше нуля.

Си-программа

#define NMAX 500

int main()

{

int i, // параметр цикла

k, // счетчик положительных чисел

n=10;// кол-во элементов массива

float S; // среднее арифметическое значение

float x[NMAX]; // исходный массив

//Ввод и печать n, X

S=k=0;

for (i=0;i<n;i++)

if (x[i]>0)

{

S+=x[i]; k++;

}

if (k)

S/=k;

//Печать S

getch();

return 0;

}

102

Соседние файлы в папке Методические указания