- •Основные управляющие конструкции
- •1.3. Общая структура программ
- •1.4. Комментарии
- •1.5. Константы и переменные
- •1.6. Оператор простого присваивания
- •1.7. Операторы ввода и вывода данных
- •2. Базовые стандартные типы
- •2.1. Целый тип данных
- •2.2. Вещественный тип
- •2.3. Стандартные математические функции
- •3. Программы линейной структуры
- •3.1. Арифметические выражения
- •3.2. Примеры программ линейной структуры
- •4. Программы с ветвлением
- •4.1. Логический тип данных
- •4.2. Логическое выражение
- •4.3. Условный оператор
- •4.4. Оператор выбора
- •5. Программы циклической структуры
- •5.1. Оператор цикла с предусловием while
- •5.2. Оператор цикла с постусловием do .. While
- •5.3. Оператор цикла с параметром for
- •4.4. Оператор перехода
- •5.4. Операторы передачи управления
- •5.5. Вложенные циклы
- •5.6. Вычисление сумм
- •Практикум на эвм Линейные алгоритмы
- •1. Задания для решения на компьютере
- •2. Задания для самостоятельной работы
- •Алгоритмы с ветвлением
- •1. Задания для решения на компьютере
- •2. _____________________________________________________________________________________________________________________________Задания для самостоятельной работы
- •Программы с циклами
- •1. Задания для решения на компьютере
- •2. _____________________________________________________________________________________________________________________________Задания для самостоятельной работы
- •Приложение
4.4. Оператор выбора
Оператор выбора необходим в тех случаях, когда в зависимости от значений какой-либо переменной надо выполнить те или иные операторы.
Структура оператора выбора такова:
switch <выражение> {
case <константа выбора1>:<список операторов>
case <константа выбора2>:<список операторов>
case <константа выбора3>:<список операторов>
[default <операторы>]
}
Выполнение начинается с вычисления выражения (оно должно быть целочисленным), а затем управление передается первому оператору из списка, помеченного константным выражением, значение которого совпало c вычисленным. После этого, если выход из переключателя явно не указан, последовательно выполняются все остальные ветви. Выход из переключателя обычно выполняется с помощью операторов break или return. Если совпадения не произошло, выполняются операторы, расположенные после слова default, а при его отсутствии управление передается следующему за switch оператору.
Любому из операторов списка выбора может предшествовать не одна, а несколько констант выбора, разделенных запятыми. Например,
switch (Err)
{
case 0:printf(”Нормальное завершение программы\n”);
break;
case 2: printf(”Ошибка ввода данных\n”);
printf(”Повторите действия\n”); break;
default: printf(”Код ошибки %i см. в прил. 1\n”,Err);
}
Пример программы
Составить программу вычисления площади основных геометрических фигур. Программа предлагает пользователю выбрать фигуру из имеющегося перечня и задать ее параметры, после чего выводит на экран результат расчета площади фигуры с указанием формулы, по которой он выполнен.
#include <stdio.h>;
void main()
{
float a,b,h,s; int v;
printf("Вычисление площади фигуры:\n");
printf("1. Квадрат\n");
printf("2. Прямоугольник\n");
printf("3. Треугольник\n");
printf("4. Трапеция\n");
printf("Ваш выбор: "); scanf("%i",&v);
switch (v)
{
case 1:printf("a="); scanf("%f",&a);
s=a*a; printf("S=a*a, S=%.2f",s); break;
case 2:printf("a b="); scanf("%f%f",&a,&b);
s=a*b; printf("S=a*b, S=%.2f\n",s); break;
case 3:printf("a h="); scanf("%f%f",&a,&h);
s=a*h/2; printf("S=a*h/2, S=%.2f\n",s); break;
case 4:printf("a b h="); scanf("%f%f%f",&a,&b,&h);
s=(a+b)*h/2; printf("S=(a+b)*h/2, S=%.2f\n",s);
}
}
5. Программы циклической структуры
5.1. Оператор цикла с предусловием while
Цикл с предусловием обычно используется для программирования процессов, в которых число повторений оператора цикла не известно, а задается некоторое условие его окончания. Он имеет вид:
while (<логическое выражение>) <оператор>
Выполнение оператора цикла с предусловием начинается с проверки истинности (выполнения) <логического выражения>, записанного после слова while. Если оно истинно, то выполняется <оператор>, а затем вновь проверяется условие и т.д. Как только на очередном шаге окажется, что условие не истинно, то выполнение <оператора> прекратится.
Примеры
1) k=0;
while (n>0)
{ n=n/10; k=k+1; }
2) i=0; s=0;
while (i<100) { i++; s=s+pow(I,2); }
3) x=0; y=0;
while (x*x+y*y<4)
{ x=rand()/1000; y=rand()/1000; }
Примеры программ
1. Дано целое положительное число n (n<109). Является ли заданное число палиндромом, т.е. числом которое читается одинаково слева направо и справа налево? Например, палиндромами являются числа 797, 2002, 123321.
Обсуждение. Для проверки поставленной задачи необходимо записать цифры данного числа в обратном порядке (получить число “перевертыш”) и сравнить с исходным числом. Если они равны, то исходное число является палиндромом. “Перевертыш” строится последовательным выделением цифр с конца (a=r%10; r:=r/10) и образованием нового числа по формуле: M=M*10+a. Здесь переменная a пробегает все цифры исходного числа с конца.
#include <stdio.h>;
void main()
{ unsigned long N, M, r, a;
printf("N="); scanf("%li",&N);
r=N; M=0;
while (r>0)
{
a=r%10;
M=M*10+a; //получение "перевертыша"
r=r/10; //отбрасывание последней цифры
}
if (N==M) printf("Палиндром");
else printf("Не палиндром");
}
2. Алгоритм Евклида. Даны два неотрицательных числа a и b одновременно не равные нулю. Найти наибольший общий делитель.
Обсуждение. Пусть a≥b и r остаток от деления a на b (r:=a%b), тогда НОД(a,b)=НОД(b,r). Действительно, r=a%b, r=a-(a/b)*b. Если какое-то число делит нацело и a и b, то из приведенного равенства следует, что оно делит нацело и число r.
#include <stdio.h>;
void main()
{ unsigned long a, b, nod;
printf("a b="); scanf("%li%li",&a,&b);
while (a!=0&&b!=0)
if (a>b) a=a%b; else b=b%a;
nod=a+b;
printf("NOD=%li",nod);
}