- •Основные характеристики алгоритмического языка Си
- •Идентификаторы
- •Вопрос 2
- •Константы
- •Целый тип (int)
- •Символьный тип (char)
- •Инициализация переменных
- •Определение именованных констант
- •Унарные операции
- •Бинарные операции
- •Преобразование типов
- •Внимание!
- •Оператор принятия решений switch
- •Оператор цикла while
- •Оператор цикла do/while
- •Оператор continue
- •Оператор goto
- •Указатели
- •Int *a. B, *c; описываются два указателя на целое с именами а и с, а также целая переменная b.
- •Инициализация указателей
- •Массивы
- •Внимание
- •Связь массива с указателем.
- •Многомерные массивы.
- •Функции
- •Объявление и определение функций
- •Локальные и глобальные переменные.
- •Класс памяти
- •Параметры функции
- •Передача массивов в функции
Оператор принятия решений switch
Хотя конструкция if-else-if может выполнять многочисленные проверки, она не очень элегантна. Код очень труден для восприятия. С этой целью язык С++ имеет оператор принятия решений switch, выполняющий действия, основываясь на сравнении значения со списком констант символов или целых чисел. При обнаружении выполняется оператор или операторы, ассоциированные с данным значением. Оператор switch имеет следующий вид:
switch (выражение) {
case константа_1 :
последовательность_операторов
break;
case константа_2 :
последовательность_операторов
break;
case константа_3 :
последовательность_операторов
break;
.
.
[default :
последовательность_операторов]
}
Оператор default выполняется, если не найдено соответствий. default необязателен и, если его нет, то в случае отсутствия совпадений ничего не происходит. Когда обнаруживается совпадение, операторы, ассоциированные с соответствующим case, выполняются до тех пор, пока не встретится оператор break. В случае default (или последнего case, если отсутствует default), оператор switch заканчивает работу при обнаружении конца.
Следует знать о трех важных моментах оператора switch:
1) switch отличается от if тем, что он может выполнять операции проверки строгого равенства, в то время как if может вычислять логические выражения и отношения.
2) Не может быть двух констант в одном операторе switch, имеющих одинаковые значения, но константы должны иметь один тип. Конечно, оператор switch, включающий в себя другой оператор switch, может содержать аналогичные константы.
3) Если в операторе switch используются символьные константы, они автоматически преобразуются к символьным значениям.
4) если выход break из switch явно не указан, последовательно выполняются все остальные ветви.
Пример
#include <stdio.h>
#include <conio.h>
void main(void)
{
int a,b,z;
char znak;
printf(“Введите значение а операцию(+,-,*,/,%)и b, \n”);
scanf("%d%c%d",&a,&znak,&b);
switch(znak) {
case ‘+’:z=a+b;break;
case ‘-’:z=a-b;break;
case ‘*’:z=a*b;break;
case ‘/’:z=a/b;break;
case ‘%’:z=a%b;break;
default :printf(“НеДопустимая операция”);
}
if ((znak=='+')||(znak=='-')||(znak=='*')||(znak=='/')||(znak=='%'))
printf("a %c b = %d",znak,z);
}
Если необходимо выполнить одни и те же действия при нескольких различных значения констант, метки перечисляются одна за одной:
#include <stdio.h>
#include <conio.h>
void main(void)
{
int key;
printf(“Нажмите одну из курсорных клавиш\n”);
key=getch();key=getch();
switch(key) {
case 77: case 75:case 72:case 80: printf(“Strelki”);break;
default :printf(“ Ne strelki”);
}
}
Вложенные операторы switch. Один оператор switch может иметь среди последовательности операторов другой оператор switch. Даже если константы case внутреннего и внешнего операторов имеют одинаковые значения, не возникнет никакого конфликта. Следующий фрагмент программы совершенно корректен:
switch (x) {
case 1:
switch (y) {
case 0: printf(“Ошибка. Деление на ноль.”);
break;
case 1: process(x, y);
}
break;
case 2:
.
Операторы цикла
В языке С и в других современных языках программирования операторы цикла (итераций) позволяют выполнять набор инструкций до тех пор, пока не выполнится некоторое условие.
Оператор цикла for
Стандартный вид цикла for следующий:
for(инициализация; условие; Модификации) тело цикла;
Оператор for имеет три главные части:
1) Инициализация – это место, где обычно находится оператор присваивания, используемый для установки начального значения переменной цикла.
2) Условие – это место, где находится выражение, определяющее условие работы цикла.
3) Модификации выполняются после каждой итерации цикла и служат обычно для изменения параметров цикла.
Эти три важные части разделяются точкой с запятой. Цикл for работает до тех пор, пока условие истинно. Когда условие становится ложным, выполнение программы продолжается с оператора, следующего за циклом for.
На схеме алгоритма
Пример (программа печатает таблицу значений функции y=х2+l во введенном диапазоне):
finclude <stdio.h>
int main()
{
float Xn, Xk, Dx. X;
printf("BBedite диапазон и шаг изменения аргумента: ");
scanf(“%f%f%f”, &Хn, &Xk, &Dx);
printf(“| X | У |\n);
for (X = Xn; X<=Xk: X += Dx)
printf('| %5.2f | %5.2f |\n", X, X*X + 1);
return 0;
}
В программе переменная x изначально установлена в Xn. Поскольку x меньше Xk, вызывается функция printf() для вывода текущего значения x,y, после чего x увеличивается на Dx и проверяется условие: по-прежнему ли x меньше либо равно Dx. Данный процесс продолжается до тех пор, пока x не станет больше Dx, и в этот момент цикл прервется. В данном примере x является переменной цикла, которая изменяется и проверяется на каждой итерации цикла.
Ниже приведен пример цикла for, повторяющего сразу несколько операторов:
for(x=100; x!=65; x=5)
{ z = sqrt(x);
printf(“Корень квадратный из %d равен %f\n);
}
Как sqrt(), так и printf(), вызываются и выполняются, пока x не равно 65. Следует обратить внимание, что в цикле переменная x уменьшается: сначала она получает значение 100 и на каждой итерации цикла происходит уменьшение на 5.