Вложение конструкции оператора if
При использовании вложенных конструкций действует правило: конструктор else всегда соответствует ближайшему слева конструктору if, не имеющему части else.
Пример 3.2:
if (x >1)
if (y= =2)
z =5;
else
z = 6;
Здесь часть else относится ко второму оператору if.
Пример3.3: Программа функции sqn(x). Она вычисляет знак введенного числа х, т.е. sgn(x) принимает значение 1, если х > 0, значение -1, если x < 0, и значение 0, если х=0.
#include <stdio.h>
main()
{
int sqn;
float x;
printf (“Введите число”);
scanf (“% f “, &x);
if (x>0)
{ sqn =1; printf (“число %f положительное sqn = %d \n “,x, sqn);}
if (x= =0)
{ sqn=0; printf (“число %f равно нулю sqn= %d \n”, x, sqn);}
if (x<0) { sqn = -1; printf (“число %f отрицательное sqn= %d \n”, x, sqn);}
}
Здесь мы не использовали оператор else.
Часто встречается необходимость использовать конструкцию if – else – if:
if (условие) оператор;
else if(условие) оператор;
else if((условие)оператор;
…..
else оператор;
В этой форме условия проверяются сверху вниз. Как только какое-либо из условий принимает значение “истинно”, выполнится оператор, следующий за этим условием., а вся остальная конструкция будет проигнорирована.
Запишем фрагмент программы примера 3.3 с использованием оператора else.
………………..
if (x>0) { sqn = 1; printf (“число %f положительное \n”, x); }
else if (x<0)
{ sqn= -1; printf (“число %f отрицательное \n”, x); }
else { sqn =0; printf (“число %f равно нулю \n”, x); }
Операторы организации цикла
Если в программе имеет место периодическое повторение некоторой последовательности действий, то говорят о наличии цикла.
Циклические вычисления в языке Си реализуются операторами for ... , while ... , do ... while... . Операторы цикла for – со счетчиком , while- с предусловием; do...while- с постусловием.
Оператор for имеет следующую конструкцию:
for (выражение_1 ; выражение_2 ; выражение_3)
оператор;
где: выражение_1 устанавливает начальное значение параметра цикла;
выражение_2 определяет условие продолжения цикла;
выражение_3 задает правило модификации параметра цикла.
Каждое из этих трех выражений может быть групповым или может отсутствовать, в том числе и одновременно, но разделители ‘;’ обязательно должны быть. Если отсутствует выражение_2 , то оно считается истинным по умолчанию.
Конструкциии бесконечных циклов:
for (; ; ;) printf(“ Бесконечный цикл\ n”);
for (i =1; 1; i++) printf(“ Бесконечный цикл\ n”);
for (i =10; i >6; i++) printf(“ Бесконечный цикл\ n”);
Тем не мене для таких циклов также может быть организован выход. Для этого используют оператор break, который будет рассмотрен несколько позже.
Пример 3.4: Вычислим сумму первых n целых положительных чисел.
#include <stdio.h>
#include <conio.h>
void main()
{
int n; // количество суммируемых чисел
int sum; // сумма
int i ; // счетчик циклов
printf(“Вычисление суммы положительных чисел \n”);
printf(“введите количество суммируемых чисел \n”);
scanf(“%i”, &n);
sum = 0;
for (i =1; i <= n; i++)
sum + = i;
printf(“ Сумма первых % i целых положительных чисел \n”);
printf(“ равна % i”, sum);
printf(“ \n Для завершения нажмите <Enter>”);
getch();
}
Наиболее универсальным является оператор цикла while (пока). Оператор while имеет следующую форму:
while (выражение)
оператор;
Пока выражение в скобках (. . .) не равно нулю, повторяется выполнение оператора (простого или составного).
Пример 3.5:
/*Определение длины строки */
#include <stdio.h>
void main (void)
{
int dlina = 0 ;
puts (“ Введите строку , затем нажмите <Enter>”) ;
while (getchar () != ’\n’)
dlina ++ ;
printf (“\n Длина строки равна %d символам “, dlina) ;
}
Особенностью цикла while является то, что сначала проверяется значение выражения. Если оно равно нулю с самого начала, то цикл не выполнится ни разу, а управление будет передано следующему оператору. Это так называемый цикл с предусловием.
В Си используется также оператор цикла с постусловием do ... while .Форма его записи следующая:
do
оператор;
while (выражение) ;
Сначала выполняется тело цикла (оператор), а затем вычисляется значение выражения. Если оно равно нулю (истинно), то тело цикла выполняется снова. Этот процесс повторяется до тех пор, пока значение выражения не станет равным нулю. После чего управление будет передано следующему оператору программы.
Разница между циклами, while и do... while заключается в том, что при использовании конструкции do... while цикл выполнится хотя бы один раз.
Замечание. Операторы цикла for, while, do...while могут завершаться досрочно при выполнении в их теле операторов break , go to и return.
Вложенные циклы. Когда один цикл находится внутри другого, то говорят, что это вложенные циклы. Вложенные циклы часто используются при заполнении таблиц, в матричных вычислениях, обработке массивов.
Оператор продолжения continue. Оператор продолжения передает управление на следующую итерацию в операторах for, while , do ... while . Он может присутствовать только в теле этих операторов. Остающиеся в теле цикла операторы при этом не выполняются. В операторе for следующая операция начинается с вычисления выражения приращения, а затем происходит вычисление условного выражения. В операторах while и do ... while следующая операция начинается с вычисления условных выражений.
Пример 3.6: Программа печатает натуральные числа, кратные 7.
#include <stdio.h>
main( )
{
int i;
for (i = 1; i <1000; i++)
{
for (i % 7) continue ; // Вложенный
printf (“%8d” , i) // цикл
}
}