Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭВМ 1-3 лабы.rtf
Скачиваний:
32
Добавлен:
01.04.2015
Размер:
2.67 Mб
Скачать

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);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]