На занятии рассматривается конструкции языка Си — циклы. Разбираются примеры работы с циклами и даются задания
Содержание:
Понятия счетчика и сумматора в Си
Счетчик:
При работе с счетчиком предусматриваются следующие действия:
- Обнулить:
- В каждой итерации цикла увеличивать счетчик на единицу:
с=0; |
с=с+1; |
Сумматор:
Работа с сумматором предполагает следующие шаги:
- Обнулить:
- В каждой итерации цикла увеличивать сумматор на новое значение:
s=0; |
s=s+x; |
Цикл Си While
Цикл с предусловием. Пока условие истинно, выполняются операторы тела цикла.
while (условие) { оператор1; оператор2; … }
Пример: Выводить на экран степени двойки до 1000
1 2 3 4 5 6 7 8 | main(){ int i=2; while (i<=1000) { i = i*2; printf("%d\n",i); } } |
Пример: Выполнить сложение всех цифр от 1 до 1000
Показать решение:
1 2 3 4 5 6 7 8 9 10 11 | main(){ int sum,i; sum=0; i=1; while (i<=100) { sum += i; // сумматор ++i; // счетчик } printf("Сумма=%d\n",sum); } |
Задача c 2-2_1: Для x=2700, 900, 300, 100 … вычислять и печатать y=x/4+20 и z=2y+0.23 до тех пор пока произведение y и z не станет меньше 1/x
Для вывода использовать функцию Си printf
Для вывода использовать функцию Си printf
Цикл Си do while
Цикл с постусловием. Пока условие истинно, выполняются операторы тела цикла
1 2 3 4 5 6 7 do { оператор1; оператор2; … } while (условие);
Пример: Выводить на экран степени двойки до 1000
Показать решение:
1 2 3 4 5 6 7 8 9 | main(){ int i=2; do { i = i*2; printf("%d\n",i); } while (i<=1000); } |
Задача c 2-2_2: В компьютер вводятся числа. После ввода каждого числа нужно печатать, сколько среди них уже введено отрицательных. Закончить ввод, когда отрицательных станет >5
Ввод чисел осуществлять оператором си scanf, а вывод — printf
Ввод чисел осуществлять оператором си scanf, а вывод — printf
Показать аналог в Pascal
1 2 3 4 5 6 7 8 9 10 | var i,numb:integer; begin i:=0; repeat readln(numb); if numb<0 then inc(i); writeln('otricat=',i); until (i>=5); end. |
Операторы цикла Си for
Простая конструкция:
1 2 for (переменная=начальное значение; условие; приращение значения) оператор;Конструкция с составным оператором:
1 2 for (переменная=начальное значение; условие; приращение значения) {оператор1; оператор2;}Пример:
1 2 3 4 for (int i=1; i<=10; i++) { операторы; }
Важно: Цикл for используется в том случае, когда известно точное количество повторов, которое нужно выполнить
Пример: Выводить на экран числа от 1 до 10
1 2 3 4 5 6 | main() { int r; for (r = 1; r <= 10; r++) printf("%d\n", r); } |
Задача c 2-2_3: При помощи циклов
for
напечатать: 1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1
Дополните код:
1 2 3 4 5 6 7 8 9 | #include<stdio.h> main() { int i; for(i=1; i<=10; i++) printf("%d",i); for (...) printf("%d",i); } |
Показать аналог в Pascal
1 2 3 4 5 6 7 | var i: integer; begin for i:=1 to 10 do write(i:3); for i:=9 downto 1 do write(i:3); end. |
Задача c 2-2_4: В компьютер вводятся 10 чисел. Подсчитать по отдельности количество отрицательных, положительных чисел и тех, что превышают число 10
Для подсчета использовать счетчики.
Для подсчета использовать счетчики.
Вложенные циклы
1 2 3 4 5 6 for(…) { for(…) { … } }
1 2 3 4 5 6 7 8 9 10 | main() { int row, column; for (row = 1; row <= 10; row++) { for (column = 1; column <= 10; column++) printf("*"); puts("\n"); } } |
Показать аналог в Pascal
1 2 3 4 5 6 7 8 9 10 11 | var row, column, x: integer; begin for row:= 1 to 10 do begin for column:= 1 to 10 do begin x:= row * column; write(x:4); end; writeln; end; end. |
Задача c 2-2_6: Вывести символ
*
в следующем порядке:Показать аналог в Pascal
1 2 3 4 5 6 7 8 9 | var row,column:integer; begin for row:= 1 to 10 do begin for column:= 1 to row do write('*':2); writeln; end; end. |
Вопросы для самоконтроля:
На каком основании вы будете осуществлять выбор между циклами
Для чего предназначены параметры цикла
В каком случае прекращается выполнение цикла
Что такое вложенный цикл языка Си?
Каково назначение оператора
for
, do
и while
? for
? for
?break
?