Тема 2
Разработка программ с циклами Лекция 2. 3 .
Массивы и параметрические циклы.
Литература
Основная:
Подбельский В.В., Фомин С.С. Программирование на языке Си: Учеб. пособие. – М.: Финансы и статистика, 2004.
Дополнительная:
С/ C ++ Структурное программирование. Практикум. Программирование на языке высокого уровня. Питер, 2004.
Юркин А. Задачник по программированию. Гриф МО. Учебное пособие, Питер, 2002.
Шмидт Г. Самоучитель Си++. СПб.: БХВ – Петербург, 2004.
Вопросы:
1. Массивы и переменные с индексом.
2. Параметрические циклы for .
3. Вложенные циклы.
4. О ператоры b reak и continue .
1. Массивы и переменные с индексом
Массив объединяет совокупность однотипных переменных. Массивы бывают одномерные и многомерные.
Описание одномерного массива включает:
1. Указание типа элементов . Применяются такие же типы как и у простых переменных;
2. Наименование . Выбирает программист по обычным правилам;
3. Количество элементов массива . Запись количества элементов производится в квадратных скобках.
Элементы массива нумеруются, начиная с нуля .
Примеры объявления одномерных массивов:
int x [30];
float y [12];
Первое объявление – описание одномерного массива " х " из 30 величин типа int с номерами х [0] , х [1], ..., х [29];
Второе объявление – описание одномерного массива " y " из 12 величин типа float с номерами y [0] , y [1], ..., y [11].
Обращение к элементу массива
Указывается имя массива и индекс (номер элемента в массиве)
у[2]
у[ i ]
х[2* j ]
Значение индекса должно быть целой положительной величиной – константой, переменной, выражением целого типа.
Элементы массива можно применять везде, где применялись простые переменные.
Двумерные массивы
Пример объявления двумерного массива " y 1"
float y 1[10][5];
Нумерация элементов (расположение элементов в памяти)
y [0][0], y [0][1], ..., y [0][4], y [1][0], ..., y [9][4].
При размещении первым изменяется правый индекс.
Обращение к элементу массива производится по имени массива и двум индексам, например
у[ i ][2* j ]
Одномерный и двумерный массив соответствует в математике понятию вектор , матрица соответственно.
Возможно объявление и использование массивов большей мерности (трехмерных, четырехмерных и т.д.).
2. Параметрические циклы for
Цикл типа for
for ( операторы 1 ; условие ; операторы 2 )
{
тело цикла ;
}
Схема выполнения цикла
операторы 1
Ложно
Условие
Истинно
тело цикла
операторы 2
Вычислить значение функции y с точностью delta
Очередной i +1 член ряда z i +1 формируется на основе предыдущего z i по соотношению
z i +1 = – z i * x /( i +1),
начальные значения z 1= x , i = 1.
delta;) //операторов 1 и 2 нет { i=i+1; yi= –yi*x/i; y=y+yi; } Второй вариант записи фрагмента программы for (y=x,i= 1 ,yi=x; fabs(yi)delta; i++ , yi*= –x/i, y+= yi ); //тела цикла нет Третий вариант записи фрагмента программы for(y = x,i =1 ,yi = x ; fabs(yi) delta;) { i ++ ; yi * = –x/i; y + =yi; } " width="640"
Первый вариант записи фрагмента программы
y = x ; i =1; yi = x ;
for(;fabs(yi)delta;) //операторов 1 и 2 нет {
i=i+1;
yi= –yi*x/i;
y=y+yi; }
Второй вариант записи фрагмента программы
for (y=x,i= 1 ,yi=x; fabs(yi)delta;
i++ , yi*= –x/i, y+= yi ); //тела цикла нет
Третий вариант записи фрагмента программы
for(y = x,i =1 ,yi = x ; fabs(yi) delta;) { i ++ ;
yi * = –x/i;
y + =yi; }
Программа расчета среднего балла по учебной дисциплине в группе (количество курсантов в группе не более 35)
#include
void main()
{
int oz[35], i, j, kur;
float sb ;
m1: printf ("\nVvedite kol-vo kursantov, ot 1 do 35 chelovek \nkur= ");
scanf("%d",&kur);
if (kur35)
{
printf("\nKol-vo kursantov d. b . ot 1 do 35. Povtorite vvod");
goto m1;
}
printf("\nVvedite ozenki\n");
for(j=0; j
/*расчет среднего балла*/
for (sb=0, j=0; j
printf("\nSredniy ball= %4.2f\n", sb/kur);
}
3. Вложенные циклы
Расчет среднего балла по 6 учебным дисциплинам
int oz[35][6], i, j, kur, dis;
float sb ;
…
for (i=0; i
{
for (sb=0, j=0; j
printf("\nDisziplina № %d: Sredniy ball = %4.2f", i+1, sb/kur);
}
Циклы обязательно должны быть вложенными , т.е. не должны пересекаться. Глубина вложения практически не ограничена.
4 . О ператоры b reak и continue .
35) printf ("\ n Kol-vo kursanov d. b . ot 1 do 35 . Povtorite vvod ”); else break ; } " width="640"
Оператор break передает управление к оператору, следующему за циклом.
y=x; i=1; yi=x;
while (1) //заведомо истинное условие
{
i++; yi*=–x/i; y+=yi;
if (fabs(yi)
}
Применения при проверке правильности исходных данных
while ( 1 ) //заведомо истинное условие
{
scanf ("% d ",& kur );
if ( kur kur 35) printf ("\ n Kol-vo kursanov d. b . ot 1 do 35 . Povtorite vvod ”); else break ;
}
Оператор continue позволяет в любой точке тела цикла завершить текущую итерацию и перейти к проверке условия выхода из цикла. Оператор continue целесообразно применять, когда от итерации к итерации изменяется последовательность выполняемых операторов тела цикла, т.е. тело цикла содержит разветвления.
Вопросы для самоподготовки
1. Назначение массивов, размерность массивов.
2. Понятие индекса массива, тип значений и диапазон изменения индекса.
3. Назначение цикла типа for .
4. Сущность этапов выполнения цикла типа for .
5. Формы записи цикла типа for .
6. Требования к оформлению вложенных циклов.
6, n 100) . " width="640"
Составление программ инженерных задач с параметрическими циклами
Задача 1
Составить программу для расчета среднего значения и среднеквадратического отклонения результатов измерений вещественных величин. Количество измерений и результаты измерений задаются вводом.
Расчетные соотношения:
среднее значение
R ср = (r(1) + r(2) + …+ r(n)) / n;
среднеквадратическое отклонение
S = {(r(1)*r(1) + r(2)*r(2) + …+ r(n)*r(n)) / n - R ср *R ср } 0,5 .
Здесь r(i) – результаты измерений, n - количество измерений ( n 6, n 100) .
100* T в (i) . " width="640"
Задача 2
Составить блок схему алгоритма и программу для расчета коэффициента готовности K г_с , среднего времени безотказной работы To _с и среднего времени восстановления работоспособности T в_с системы, состоящей из n элементов.
Исходные данные:
- количество элементов системы n ;
- среднее время безотказной работы элемента To(i) ;
- среднее время восстановления работоспособности элемента T в (i) ;
Все величины неотрицательные, кроме того, n , расчетные соотношения справедливы при To(i) 100* T в (i) .
Расчетные соотношения:
K г_с = To _с/( To _с + T в_с) . Коэффициент готовности системы.
K г( i ) = To ( i ) /( To ( i ) + T в( i )) . Коэффициент готовности элемента.
K г_с = 1 – (1 - K г( 1 ) )*(1 - K г( 2 ) )*…*(1 - K г( n ) ) .
T в_с = (T в( 1 ) /To ( 1 ) + T в( 2 ) /To ( 2 ) + …+ T в( n ) /To ( n ) )/(1/To ( 1 ) +
+ 1/To ( 2 ) + … + 1/To ( n ) ) .
To _с = T в_с * K г_с *(1 - K г_с ) .
Задания к летучке
Составить рекуррентное выражение и написать текст программы для вычисления значений функции. Значения аргумента х задается вводом. Результат расчета отобразить на экране.
Вариант 1
Вариант 1


Массивы и параметрические циклы (180.5 KB)

