
- •Язык высокого програмирования “с”
- •Переменные и типы переменных.
- •2.1 Типы данных в си
- •Подробное описание типов данных в языке си
- •Комплексные числа в си
- •Логический тип данных в си
- •Операторы объявлений
- •Константы в си
- •Оператор создания типов данных в си
- •Неявное приведение типа
- •Явное приведение типа в языке c
- •1.1. Арифметические операции
- •2.4 Побитовые операции в си
- •№3 Циклические алгоритмы.
- •Операция присваивания
- •Операции отношения
- •Арифметические операции
- •Логические операции
- •Сдвиговые операции
- •3.2 Цикл с предусловием while
- •Цикл с постусловием do...While
- •Цикл с постусловием
- •Параметрический цикл for
- •Рекомендации по выбору цикла
- •Операторы break и continue
- •Оператор безусловного перехода goto
- •Синтаксис
- •Синтаксис
- •Заметки
- •Синтаксис
- •Заметки
- •Тернарные операции
- •Оператор ветвления switch (оператор множественного выбора)
- •№5 Указатели и массивы.
- •Объявление и инициализация массивов
- •Многомерные массивы
- •Инициализация многомерных массивов
- •Передача массива в функцию
- •5.2 И 5.3
- •5.1 Указатели и адреса
- •5.2 Указатели и аргументы функций
- •5.3 Указатели и массивы
- •5.4 Адресная арифметика
- •5.5 Символьные указатели функции
- •5.6 Массивы указателей, указатели на указатели
- •5.7 Многомерные массивы
- •5.8 Инициализация массивов указателей
- •5.9 Указатели против многомерных массивов
- •5.10 Аргументы командной строки
- •5.11 Указатели на функции
- •5.12 Сложные объявления
- •5.4 Указатели типа void
Тернарные операции
Тернарная условная операция имеет 3 аргумента и возвращает свой второй или третий операнд в зависимости от значения логического выражения, заданного первым операндом. Синтаксис тернарной операции в языке Си
условие ? выражение1 : выражение2;
Если выполняется условие, то тернарная операция возвращает выражение1, в противном случае - выражение2. Тернарные операции, как и операции условия, могут быть вложенными. Для разделения вложенных операций используются круглые скобки. Приведенный выше пример с использованием тернарных операций можно представить в виде
#include <stdio.h> #include <stdlib.h> int main() {
int key;
system("chcp 1251");
system("cls");
printf("Введите номер пункта, 1 или 2: ");
scanf("%d",&key);
key == 1 ? printf("\n Выбран первый пункт") :
(key==2 ? printf("\n Выбран второй пункт") :
printf("\n Первый и второй пункты не выбраны")) ;
getchar(); getchar(); }
Оператор ветвления switch (оператор множественного выбора)
Оператор if позволяет осуществить выбор только между двумя вариантами. Для того, чтобы производить выбор одного из нескольких вариантов необходимо использовать вложенный оператор if. С этой же целью можно использовать оператор ветвления switch.
Общая форма записи
switch (целое выражение) {
case константа1: блок операций1;
break;
case константа2: блок операций2;
break; . . .
case константаn: блок операцийn;
break;
default: блок операций по умолчанию;
break; }
Оператор ветвления switch выполняется следующим образом:
вычисляется целочисленное выражение в скобках оператора switch;
полученное значение сравнивается с метками (константами) в опциях case, сравнение производится до тех пор, пока не будет найдена метка, соответствующая вычисленному значению целочисленного выражения;
выполняется оператор соответствующей метки case;
если соответствующая метка не найдена, то выполнится оператор в опции default.
Альтернатива default может отсутствовать, тогда не будет произведено никаких действий. Опция break; осуществляет выход из оператора switch и переход к следующему за ним оператору. При отсутствии опции break будут выполняться все операторы, начиная с помеченного данной меткой и кончая оператором в опции default. Константы в опциях case должны быть целого типа (могут быть символами).
4.3
Оператор выбора switchявляется очень удобной заменой множественного использованияоператоров if. Операторswitchсравнивает значение одной переменной с несколькими константами. Основной формат для использования оператора множественного выбораswitch caseпоказан — ниже. Значение переменной указанной в условииswitchсравнивается со значениями, которые следуют за ключевым словомcase. Когда значение в переменной, соответствует значению в строке с операторомcase, компьютер продолжит выполнение программы с этого места.
?
1 2 3 4 5 6 7 8 9 10 11 12 |
switch( /*variable*/) { caseconst1: /*Тут находится код, который необходимо выполнить, если переменная variable будет равна const1*/ break; caseconst2: /*этот код выполнится, если variable будет равна const2*/ break; /*...*/ default: /*Код, который выполнится, если ниодно из константых значению не соответствует значение в переменной variable*/ break; } |
Когда сравниваемое значение в переменной variableсовпадет с первым значением оператораcase, программа начнет выполнять код, который находится между текущим операторомcaseиоператором break. Операторbreakиспользуется для того, чтобы прерывать ход программы в оператореswitchи передавать управление следующему оператору, послеswitch. Если не использовать операторbreak, то, сразу после того, как выполнится один блок кода, программа переключится на выполнения следующегоcase, даже, если константное значение не будет равно значению в переменнойvariable. Поэтому, в операторе выбораswitch, блоки кода послеcaseвсегда должны предваряться операторомbreak.
Яндекс.Директ
|
Также стоит обратить в нимание на ключевое слово default, оно не является обязательным, но в то же время оно необходимо для обработки неожидынных ситуаций. Например, когда значение переменной не совпадает ни с одним из значенийcase, в таком случае выполнится код, который находится в веткеdefault. Это может быть полезно, в случае, если мы не ожидаем, что ниодно из значенийcaseне совпало со значением переменной в условииswitch. В таком случае, мы увидем, что сработал код в веткеdefault.
Чтобы, все ранее сказанное понять и запомнить, давайте перейдем к рассмотрению простой программы с использованием оператора выбора switch. Хотя, возможно этот пример не самый удачный, но в нем наглядно показывается весь функционал оператораswitch.
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#include <stdio.h>
int main() { printf( "Что бы сегодня посмотреть?\n"); printf( "1. Стрела(Arrow)\n" ); printf( "2. Сверхъестественное(Supernatural)\n" ); printf( "3. Ходячие мертвецы(Walking Dead)\n" ); printf( "4. Выход\n" ); printf( "Ваш выбор: " ); int input; scanf( "%d", &input ); switch( input ) { case1: /* обратите внимание на двоеточие, точки сзапятой тут нет */ printf("«His Death Was Just The Beginning»\n"); break; case 2: printf("«Scary Just Got Sexy»\n"); break; case 3: printf("«Fight the dead. Fear the living»\n"); break; case4: printf( "Сегодня смотреть ничего не будем :(\n"); break; default: printf( "Неправильный ввод.\n"); } getchar(); return0; } |
Итак, как же работает этот код? Для начала, мы сделали небольшое меню (строки5 — 10), чтобы как-то информировать пользователя, что необходимо водить в программу. Как вы уже поняли, необходимо ввести число — 1, 2, 3 или 4. В зависимости от введенного числа, программа будет срабатывать поразному. В данном примере очень хорошо видно, что вводимое значение сохраняется в переменнуюinput, и после этого, значение в этой переменной передается в операторswitch,строка 13.Встроках 13 — 29объявлен оператор множественного выбораswitch. Какже он работает? Очень просто, по порядку программа сравнивает переменнуюinputсо значениями 1, 2, 3 и 4 . Например, если мы ввели число 3, топрограмма выполнит код, который находится встроках 21-22, при вводе единицы, программа напечатает сообщение из строки 15.Думаю суть вы уловили. Ну, а, если мы ввели другое число, отличное от заданных, выполнится блок кода встроке 27. Смотрим результат работы программы. Я ввел значение — 3, сегодня буду смотреть — Ходячих!