- •1. Двоичная система счисления.
- •2. Восьмеричная система счисления.
- •3. Шестнадцатеричная система счисления.
- •4. Сложение и вычитание в 2, 8 и 16 c/c.
- •2. Вещественные числа (числа с плавающей запятой).
- •3. Логические данные.
- •1. Алфавит языка Си
- •2. Элементы языка
- •3. Типы данных
- •1. Формульно-словесный способ.
- •2. Блок-схемный способ.
- •Ввод - вывод одномерного массива
- •2. Вывод одномерного массива на экран.
- •Примеры обработки одномерных массивов
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;
}