Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК-1_АЯП_рус.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.19 Mб
Скачать

Void main()

{ float х;

printf(" Введите число:");

scanf("%f", &x);

if(x>0) printf ("Число %f положительное \n", х);

if(x==0) printf ("Число %f равно нулю \n", х);

if(x<0) printf ("Число %f отрицательное \n", х);

}

Составной оператор

Этот оператор является простейшим структурным оператором и задаёт последовательное выполнение операторов, входящих в него «один за другим». Операторы, входящие в составной оператор, заключаются в фигурные скобки - { и } - и отделяются друг от друга символами «;». Составной оператор называют также операторными скобками.

Составной оператор применяется в тех случаях, когда синтаксис языка допускает использование только одного оператора, в то время как семантика программы требует задания некоторой последовательности действий.

Язык Си не накладывает никаких ограничений на характер операторов, входящих в составной оператор.

If (логическое выражение)

{ оператор 11;

оператор 12;

оператор 1n;

}

else

{оператор 21 ;

оператор 22;

оператор 2m;

}

оператор к ;

Количество операторов, объединенных в составной, может быть произвольным в каждой из ветвей условного оператора.

Оператор, входящий в if, может быть также оператором if, т.е. операторы if могут быть вложенными. Если один из операторов if записан в полной форме, а другие в сокращённой, то может возникнуть синтаксическая неоднозначность.

If (условие 1 )

if (условие 2 ) <оператор 1>;

else <оператор 2>;

В этом случае часть else <оператор 2> может трактоваться как принадлежащая внешнему оператору if (условие 1 ) , так и вложенному if (условие 2 ).

Эта двусмысленность разрешается путём использования операторных скобок:

If (условие 1 )

{ if (условие 2 ) <оператор 1>;

else <оператор 2>;

}

Одной из основных ошибок программистов, переходящих на С и С++ с Паскаля, является такая запись

if (i=0) ...

Компилятор здесь не выдаст ошибки (только предупреждение), но программа, скорее всего, будет работать неправильно. Операция "=" это операция присваивания в языке С. Поэтому порядок выполнения такого условного оператора будет следующим. Сначала переменной i будет присвоено значение 0. Затем значение этой переменной будет интерпретироваться как логическое выражение. Нулевое значение выражения соответствует логическому значению false. Т.е. в данном примере результат проверки условия всегда – «ложно». Правильно в этом случае написать

if (i==0) ...

В условном операторе после слова if вместо операции отношения (условия) может стоять выражение или просто переменная. В этом случае значение выражения или переменной будет интерпретироваться как логическое значение, т.е. нулевое значение – false, не равное нулю - true.. Например:

If (X) printf ("Число не равно нулю");

else printf ("Число равно нулю");

Этот фрагмент аналогичен следующим фрагментам, использующим операцию отношения:

if (x==0) printf ("Число равно нулю");

else printf ("Число не равно нулю");

или

if (x!=0) printf ("Число не равно нулю");

else printf ("Число равно нулю");

Оператор варианта (выбора)

Данный оператор является обобщением условного оператора для случая произвольного числа альтернатив. Если в программе необходимо выбрать один из нескольких многочисленных вариантов, то вместо вложенной конструкции if более удобно применять оператор множественного выбора (оператор-переключатель) switch. Основная форма оператора имеет такой вид:

switch (выражение)

{

case константа1:последовательность операторов; break;

case константа2:последовательность операторов; break;

case константаN:последовательность операторов; break;

default:последовательность операторов; break;

}

Оператор варианта работает следующим образом: сначала вычисляется выражение в скобках за ключевым словом switch. Затем просматривается список меток (case константа1 и т. д.) до тех пор, пока не находится метка, соответствующая значению вычисленного выражения. Далее происходит выполнение соответствующей последовательности операторов, следующих за двоеточием. Если же значение выражения не соответствует ни одной из меток оператора switch, то выполняется последовательность операторов, следующая за ключевым словом default.

Как выражение, так и метки (константы) должны иметь значения целого или символьного типа. Допускается конструкция оператора switch, когда слово default и соответствующая последовательность операторов могут отсутствовать.

Выполнение оператора break приводит к выходу из оператора switch и переходу к следующему оператору программы. Наличие оператора break в операторе switch необязательно. В отсутствие оператора break в операторе switch будут последовательно выполнены все операторы, начиная с той метки, которая соответствует значению выражения.

Пример: Вывести фамилию студента, начинающуюся с определенной буквы. Если нет такой фамилии, то вывести сообщение ("Нет в списке студентов"

#include <sidio.h>

/* Пример оператора switch с использованием break */

main()

{

char ch;

printf ("Введите заглавную букву русского алфавита:");

ch=getchar();/*Ввод символа (буквы) */

switch(ch)

{

case 'A': printf ("Алексеев \n"); break;

case 'Б':printf(" Иванов \n"); break;

case 'В':printf ("Петров\n"); break;

case 'Г ':printf("Сидоров\n"); break;

default: printf ("Нет в списке студентов \n"); break;

}

}

В результате работы этой программы будет выбрана фамилия одного из студентов по первой введенной букве. Предположим, вы запустили первую программу и ввели букву С. Результатом работы программы будет следующая строка:

Сидоров

Применительно к данному примеру отсутствие операторов break в ветвях оператора-переключателя позволит вывести на экран фамилии всех студентов по алфавиту, начиная с заданной буквы.

Пример

#include <stdio.h>

/* Пример оператора switch без использования break */

main()

{

char ch:

printf ("Введите заглавную букву русского алфавита:");

ch=getchar();

switch(ch)

{

case 'A': printf ("Алексеев \n");

case 'Б':printf(" Иванов \n");

case 'В':printf ("Петров\n");

case 'Г ':printf("Сидоров\n");

default: printf (и другие \n");

}

}

В случае запуска этой версии программы и ввода буквы А результат работы программы будет следующий:

Алексеев

Иванов

Петров

Сидоров

и другие

Мы видим, что выполнились все операторы, начиная с метки 'А', включая тот, который следует за словом default.

Возможна ситуация, когда нескольким меткам (константам) должны соответствовать одни и те же действия в программе. Тогда оператор switch будет выглядеть так:

Приведенная ниже программа выводит на экран названия нечетных цифр, не меньших заданной

#include <stdio.h>