Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЗФ_ОАиП / Лекции ГГУ Скорины - Программирование.doc
Скачиваний:
179
Добавлен:
21.03.2016
Размер:
2.27 Mб
Скачать

10.2. Оператор switch

В некоторой точке вашей программы может оказаться несколько (более двух) возможных путей ветвления. Если необходимо выбрать один вариант из многих, то это можно сделать с помощью вложенных операторов if…else. Но это не очень удобно. В качестве альтернативы, для сложного условного ветвления язык С предоставляет конструкцию switch. Синтаксис ее следующий:

switch (выражение) {

case константа_1:

оператор_1;

[break;]

case константа_2:

оператор_2;

[break;]

...

case константа_N:

оператор_N;

[break;]

[default:

оператор_N+1;]

}

где константа_i – константа или константное выражение, оператор_i – одни оператор или группа операторов. Скобки [] означают, что данная часть оператора может отсутствовать.

Результат вычисления выражения сравнивается с каждой из констант_i. Если находится совпадение, то управление передается оператору или операторам, связанным с данным case, т.е. идущим сразу после него. Исполнение оператора switch продолжается до конца оператора switch или пока не встретится оператор break, который передает управление из тела switch вовне.

Операторы, связанные с ключевым словом default, выполняются, если выражение не соответствует ни одному из константных выражений в case. Ключевое слово default необязательно должно располагаться в конце оператора switch.

Задача. Сколько дней в месяце (високосным будем считать только год, который делится на 4)?

void main() {

int y, m, d;

printf(“Введите год и номер месяца\n”);

scanf(“%d %d”, &y, &m);

switch(m) {

case 2:

d= 28 + !(y%4);

break;

case 4:

case 6:

case 9:

case 11:

d= 30;

break;

default:

d= 31;

}

printf(“Количество дней %d\n”, d);

bioskey(0);

}

10.3. Оператор цикла while

В языке С существуют три вида циклов: while, for, do...while.

Ключевое слово while позволяет выполнять тело цикла до тех пор, пока условие цикла не перестанет быть истинным. Синтаксис его следующий:

while (выражение)

тело цикла;

Если тело цикла состоит более чем из одного оператора (из составного оператора), то эти операторы надо заключать в фигурные скобки {}.

Тело цикла while, не будет выполняться, если выражение изначально ложно.

Обычно инициализирующее выражение расположено за пределами цикла (до цикла). Выражение, которое влияет на условие цикла, обычно находится в конце тела цикла.

int i = 0; // инициализация счётчика

while (i < 10) {

// тело цикла

i++; // операция инкремента

}

Задача. Подсчитать количество отрицательных и сумму положительных чисел, введенных с клавиатуры. Окончание ввода – число 0.

void main() {

int a, k = 0, s = 0;

printf(“Введите последовательность чисел\n”);

scanf(“%d”, &a);

while (a != 0) {

if (a < 0) k++;

else s += a;

scanf(“%d”, &a);

}

printf(“Количество отрицательных чисел = %d\n”, k);

printf(“Сумма положительных чисел = %d\n”, s);

bioskey(0);

}

Задача. Подсчитать количество чисел, введенных с клавиатуры. Окончание ввода – превышение суммы положительных чисел числа 100.

void main() {

int a, k = 0, s = 0;

printf("Введите последовательность чисел\n");

scanf("%d", &a);

if (a > 0) s += a;

while (s <= 100) {

k++;

scanf("%d", &a);

if (a > 0) s += a;

}

printf("Количество чисел = %d\n", k);

}

Задача. Подсчитать количество совпадающих пар чисел, введенных с клавиатуры. Окончание ввода – число, кратное 5.

void main() {

int a, k = 0, b = 5;

printf("Введите последовательность чисел\n");

scanf("%d", &a);

while (a%5 != 0) {

if (a == b) k++;

b = a; // сохраняем предыдущее введенное число

scanf("%d", &a);

}

printf("Количество пар совпадающих чисел = %d\n", k);

}

Задача. Ввести число и вывести все его цифры по одной в строке.

void main(){

unsigned long x, y;

scanf("%lu", &x);

while(x){ // while(x!=0)

y = x % 10; // очередная цифра числа

printf("y = %lu\n", y);

x /= 10; // убираем последнюю цифру числа

}

}

Задача. Сформировать число по его цифрам. Окончание ввода – цифра 9.

void main(){

unsigned long x, y = 0;

scanf("%lu", &x);

while(x != 9){

y *= 10; // y = y*10 + x;

y += x; //

scanf("%lu", &x);

}

printf("y = %lu\n", y);

}

Задача. Записать число в обратном порядке цифр (125 => 521).

void main(){

unsigned long x, y = 0, c;

scanf("%lu", &x);

while(x){

c = x % 10;

y = y*10 + c;

x /= 10;

}

printf("y = %lu\n", y);

}

Задача. Удалить старший разряд числа (725 => 25).

void main(){

unsigned long x, y = 0, p = 1;

scanf("%lu", &x);

while(x > 9){

y += (x%10 * p);

x /= 10;

p *= 10;

}

printf("y = %lu\n", y);

}

Второй вариант:

void main(){

unsigned long x, y, xx, k = 1;

scanf("%lu", &x);

xx = x;

while(x > 9){

k *= 10;

x /= 10;

}

y = xx % k;

printf("y = %lu\n", y);

}