Загрузка...

Операторы условия


В Си существует несколько разновидностей оператора условия if.
а) оператор условия if
Оператор выполняется, если условие истинно.
Оператор может быть простым и составным. Позволяет пропустить оператор или блок операторов, если условие ложно. Оператор выполняется, если условие истинно.
if(условное выражение)
оператор;
или
if(условное выражение) {
операторы;
}
Схема выполнения оператора

If Истина
Ложь

б) Язык Си позволяет также выбрать любой из двух операторов, используя конструкцию if-else.
if(условное выражение)
оператор1;
else оператор2;
или
if(условное выражение) {
операторы;
}
else {
операторы; }

Схема выполнения оператора

If Истина
Ложь

else

Если выражение истинно – выполняется оператор 1, если ложно – оператор2, следующий за словом else.
Пример задачи на использование оператора (плата за электроэнергию)
#include <stdio.h>
#define LIMIT 12600 // тариф за лимированные кВт
#define MAX 25200 // тариф за сверх потребление
#define NORMA 60 // норма на семью
#define PEOPLE 20 // норма на 1 человека
void main(void)
{
float kwh; //количество израсходованных киловатт
float bill; // плата
int p,house; // р-кол-во человек, house – норма с учетом проживающих
printf(«Укажите количество израсходованных кВт/ч.\n);
scanf(«%f»,&kwh);
printf(«Укажите количество человек в семье.\n);
scanf(«%d»,&p);
house=NORMA+PEOPLE*p;
if(kwh<=house)
bill=kwh*LIMIT;
else
bill= house*LIMIT + (kwh-house)*MAX;
printf(«Плата за %f составляет %f.\n»,kwh,bill);
}
В этой программе мы опять используем возможности препроцессора языка Си. Мы могли бы описать константы LIMIT, MAX, NORMA, PEOPLE и присвоить им значения. Но с помощью команды препроцессора #define это можно упростить. При компиляции (до выполнения программы) имена констант заменятся на их значение. Ключевое слово #define должно начинаться с самой левой позиции. Потом следует имя константы, а затем ее величина. Точка с запятой не ставится – поскольку это не оператор Си, а команда препроцессора. Препроцессор просматривает программу, проводит поиск элементов, определяемых директивами #define и полностью заменяет их. При программировании на языке Си стало традицией писать имена констант прописными буквами, чтобы при просмотре программы было наглядно видно –где константа, а где переменная (можно писать и строчными, но лучше не нарушать традиций). Директиву #define можно также использовать для определения символьных и строковых констант. При этом необходимо использовать апострофы в первом случае и кавычки во втором:
#define ESS ‘S’
#define OOO «Я сделал это!»

Можно также собрать все директивы #define в один файл, назвать его каким-либо именем с расширением .h (например, const.h) и в начале программы указать #include “const.h”. Расширение h говорит о том, что этот файл – заголовок и должен выполниться в начале программы, препроцессор прочитает этот файл и выполнит все директивы до выполнения программы.

в) множественный выбор
Существуют ситуации, когда выбор нужно сделать из большего числа вариантов. Для этого с помощью оператора ветвления можно организовать множественный выбор, если составить сложную конструкцию. Это можно сделать с помощью if-else if-else

if(условное выражение1)
оператор1;
else if(условное выражение2)
оператор2;
else if(условное выражение3)
оператор3;
else оператор4;
Если выражение1 – истинно, выполняется оператор1. Если выражение1 ложно, но выражение 2 истинно, выполняется оператор2. Если выражение2 ложно, но выражение3 истинно, выполняется оператор3. Если выражение3 ложно, выполняется оператор4.
Про второй оператор if –else говорят, что он вложен в первый. Но вся структура if –else является одним оператором, поэтому не нужно заключать вложенную конструкцию в фигурные скобки.
Если в программе имеется несколько конструкций if и else, следует соблюдать правило: слово else всегда относится к ближайшему if, иначе нужно ставить фигурные скобки.
if(условное выражение1) {
if(условное выражение2)
оператор1;
}
else оператор2;

Например:
if (number>6)
if (number<12)
printf(«Вы закончили!\n»);
else
printf( «Простите, вы потеряли ход !\n”);

В это случае else соответствует второму if. Если в качестве переменной number будет введено число 5 – результата не будет, если число 10 – выведется сообщение «Вы закончили!», если число 15 – сообщение «Простите, вы потеряли ход !»
Рассмотрим другой пример:
if (number>6)
{
if (number<12)
printf(«Вы закончили!\n»);
}
else
printf( «Простите, вы потеряли ход !\n”);
В этом случае при вводе числа 5 выведется сообщение «Простите, вы потеряли ход !», т.к. else относится к первому if (раз условное выражение не истинно, то выполнятся оператор после else). При вводе числа 10 – сообщение «Вы закончили!». А при вводе числа 15 – результата не будет.

г) Иногда удобнее при выборе одного из нескольких вариантов применять оператор switch.

switch (целое выражение)
{
case метка1:
оператор;
case метка2:
оператор;
case default:
оператор;
}
В начале вычисляется выражение в скобках за ключевым словом. Затем просматривается список меток case: пока не будет найдена метка, соответствующая данному значению (в качестве метки используется значение выражения в скобках). Если метка найдена, то выполняются операторы, относящиеся к ней. Если нет такой метки, то будет выполнен оператор метки case default. Метка case default может отсутствовать, тогда оператор switch ничего не выполнит и программа перейдет на следующий оператор. Можно использовать оператор break — он служит для выхода из оператора switch и перехода к следующему оператору. Метки в операторе switch должны быть константами целого типа, включая chаr. Запрещается использовать в качестве метки переменную. Значением выражения в скобках должна быть величина целого типа (тоже включая char).

//пример программы на множественный выбор
#include <stdio.h>
void main(void)
{
char sim;
printf(«Введите первую букву названия города, а я угадаю\n»)
while((sim=getchar())!=’#’)
{
switch (sim) {
case ‘А’:
case ‘a’: printf(«Афины\n»);
break;
case ‘Б’:
case ‘б’: printf(«Бонн\n»);
break;
case ‘В’:
case ‘в’: printf(«Вена\n»);
break;
case ‘Г’:
case ‘г’: printf(«Гамбург\n»);
break;
case default:
printf(«Я не знаю такого города!\n);
}
}

Загрузка...