ТОП 10:

Использование конструкций выбора switch



 

Цель работы: научиться использовать при программировании на С конструкцию switch.

 

Теоретические сведения

Вложенный набор операторов if-else может крайне затруднить понимание программы. Рассмотрим следующую серию операторов if-else, каждый из которых сравнивает выражение с определенным значением.

if (выражение = =значение1)

оператор1;

else if (выражение= =значение2)

оператор2;

else /*необязательно*/

оператор_умолчания /*необязательно*/ ;

Конструкцию можно сократить с помощью оператора switch:

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

case значение1 : /* выполняется if (выражение = =значение1)*/

break ; /* выход из оператора switch*/

case значение2 : /* выполняется else if (выражение= = значение1)*/

break ; /* выход из оператора switch */

default :

На первый взгляд эта запись может показаться длиннее, но на практике оператор switch использовать проще, чем эквивалентную конструкцию if-else. За ключевым словом switch следует выражение, которое будет сравниваться с множеством значений внутри блока switch. Селекторы case сравнивают выражение с заданными значениями . Cтрока

case значение1:

сравнивает значение1 с результатом вычисления выражения оператора switch. Если результат сравнения дает значение “истина”, то будет выполнен оператор (или блок операторов), следующих за строкой case. Если же результатом сравнения будет “ложь”, аналогичным образом будет обрабатываться следующая строка case. Последняя строка оператора switch – default- необязательная строка выбора. Она задает действия, выполняемые в случае, если ни одно из значений строк case не совпало со значениями выражениями оператора switch.

Листинг программы, создающей меню выбора:

# include <stdio.h>

# include <ctype.h>

Main( )

{int choice;

printf(“ Menu: A(dd D(elete S(ort Q(uit :“);

choice=toupper(getchar()); /*Функция toupper() переводит символ в верхний регистр
(делает прописным)*/

switch(choice){

case A: printf (“You selected Add \n”);

break;

case D: printf (“You selected Delete\n”);

break;

case S: printf (“You selected Sort \n”);

break;

case Q: : printf (“You selected Quit \n”);

break;

default : printf (“\n illegal choice !!!\n”);

}

return choice;

}

 

Задание:

Написать программу, которая выполняла бы функции простейшего калькулятора (+, -, *, /, %). (Нужно ввести 2 числа и знак действия, которое необходимо выполнить. Для операций / и % предусмотреть проверку на равенство нулю знаменателя).

 

Контрольные вопросы

1. Опишите конструкцию оператора switch.

2. Для чего служит оператор default?

3. Какова функция селектора case?

4. Для чего служит оператор break?

 


Лабораторная работа № 12

 

Работа с автоматизированной обучающей системой:
операторы цикла WHILE и DO-WHILE, оператор цикла FOR

 

Цель работы: получить навыки в использовании операторов цикла языка С в автоматизированной обучающей системе.

 

Теоретические сведения

В программировании часто возникают такие ситуации, когда какое-то действие необходимо выполнить несколько раз. Для их описания в языке С существуют циклы или итерационные структуры, позволяющие повторять выполнение отдельных операторов или групп операторов. Число таких повторений в некоторых случаях фиксировано, в других определяется в процессе счета.

Язык С поддерживает два оператора цикла, первый из которых оператор while, который имеет две формы записи:

while (условие) [оператор];

и

do [оператор] while (условие);

где условиездесь имеет тот же смысл, что и операторе if.

В первой и второй формах оператора while оператор выполняется, пока условие не станет ложным, с одним отличием: в первом случае проверка производится до выполнения оператора, во втором – после. Другими словами, во второй форме записи тело цикла выполнится всегда как минимум один раз. Следует обратить внимание на то, что оператор или группа операторов должна модифицировать значения переменных, входящих в условие, для того, чтобы оно в конце концов приняло значение 0 и цикл прекратился.

Частой ошибкой при программировании циклов любого типа является запись такого условного выражения, которое никогда не обращается в 0. Такой цикл называется бесконечным.

Вторым оператором цикла в С является оператор for:

for ([оператор1]; [выражение]; [оператор2])

[тело_цикла];

где оператор1 – простой или сложный оператор, оператор2 – простой оператор; выражение – любое вычисляемое выражение; тело цикла – это простой или сложный оператор, который будет выполняться в цикле. Каждое из трёх выражений в заголовке цикла может быть опущено программистом или использовано как угодно.

Формально алгоритм выполнения оператора for записывается так:

1. Если оператор1 присутствует, то он выполняется;

2. Вычисляется выражение, если оно вырабатывает 0, то цикл прекращается, в противном случае цикл будет продолжен;

3. Исполняется тело цикла;

4. Вычисляется оператор2, если присутствует;

5. Переход к пункту 2.

Появление в любом месте цикла оператора continue приводит к немедленному переходу к шагу 4.

Появление в любом месте цикла оператора break приводит к прекращению выполнения цикла и переходу к следующему за ним оператору.

Следует заметить также, что отсутствие в заголовке цикла оператор1 или выражение не означает отсутствия знака `;` после него.

Как правило, в цикле forоператор1 используется для инициализации переменной цикла, выражение – для проверки на окончание цикла, а оператор2 – для модификации переменной цикла.

Нетрудно заметить, что оператор for является упрощённой формой записи оператора while:

[оператор1];

while ([оператор2])

{[тело цикла];[оператор3];}

Простейшим примером использования цикла for может служить программа вывода всех четных чисел от 106 до 0 в порядке убывания:

#include <stdio.h>

void main(void)

{long i;

for (i=1E6;i>=0;i-=2)

printf("\n%ld",i);

}

Эту же программу можно записать, поместив все действия в заголовок цикла:

#include <stdio.h>

void main(void)

{for (long i=1E6;i>=0;printf("\n%ld",i),i-=2);}

Задание:

Пример работы с АОС (см. также л.р. «Работа с автоматизированной обучающей системой»):

 
 

Через УПРАВЛЕНИЕ | РЕЖИМ САМОСТОЯТЕЛЬНОЙ РАБОТЫ | ОПЕРАТОРЫ ЦИКЛА WHILE И DO-WHILE + ОПЕРАТОР ЦИКЛА FOR выйти к меню (задания могут отличаться):

 

Внимательно прочесть теорию (<F2>).

Вычислить предложенные примеры, например:

первая строка с циклом while (y<10) ++y; будет выполняться пока у будет меньше 10. При у=10 произойдёт переход к оператору x-=y; в котором переменная х примет значение 4 (14-10).

В следующей строке while (y<11) x+=++y; цикл будет выполняться 10 раз. Очевидно, что при начальных x=1 и y=0 первое действие цикла можно записать как x=1+0, а последнее x=57+10. Таким образом, будет выведено значение x, равное 67 и y=11. Следующая строка do z-=y; while (++y<9); будет выполняться до тех пор, пока y будет меньше 9. При первом проходе вначале переменная z не будет уменьшена, т.к. y в этом случае равен 0. Далее происходит проверка условия (++y<9); после чего переменная y увеличивается на 1 и происходит возврат к оператору z-=y; где переменная z уже уменьшается на 1 и т.д.

Следует заметить, что при выполнении заданий в этом разделе АОС, примеры программ могут не помещаться на один экран, о чем сигнализирует надпись в нижнем правом углу после нажатия <F1>. Используя предложенные клавиши (Home, End, ¯,­, PgUp, PgDown) можно просмотреть всё задание.

Переписать задание и ответы в тетрадь для лабораторных работ и перейти к выполнению следующего задания (нажать любую клавишу). Таким образом выполнить все предложенные задания. Для перехода к следующей теме («ОПЕРАТОР ЦИКЛА FOR») нажать <F10>:


Внимательно прочесть теорию (<F2>).

Вычислить предложенные примеры, например:

строка for (y=8; y>0; y--) x=y; будет выполняться до тех пор, пока значение переменной y будет больше 0. Очевидно, что при выходе из цикла переменная x будет равна 1, а y будет равна нулю, так как после выполнения y-- (при у=1) происходит переход к y>0, где вырабатывается значение 0 и цикл прекращается. Следующая строка for (y=12; (x=y)>1; y--) ; аналогична предыдущей, за одним исключением – присваивание (x=y) происходит при проверке условия, т.е. при выходе из цикла переменная x будет равна переменной y, а так как цикл закончится при y равном 1, то переменная x при выходе из цикла также примет значение 1.

Переписать задание и ответы в тетрадь для лабораторных работ и перейти к выполнению следующего задания (нажать любую клавишу). Таким образом выполнить все предложенные задания, выйти из АОС, предоставить отчет преподавателю.

 

Контрольные вопросы

1. Какое основное отличие в работе циклов while и do…while?

2. Какой цикл называется бесконечным, когда он может возникнуть?

3. Что называется телом цикла?

4. Каков алгоритм выполнения оператора for?

5. Как можно прервать выполнение операторов цикла?

6. В чем заключается действие оператора break и оператора continue?


Лабораторная работа №13

 

Разработка и отладка программы циклического процесса
с использованием оператора do-while

 

Цель работы: Научиться использовать на практике циклические процессы с использованием оператора do-while.

 

Теоретические сведения

Оператор do-while является в некотором роде перевернутым циклом while. Его формат выглядит следующим образом:

do

{

оператор;

}

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

Выполняется оператор, затем проверяется выражение. До тех пор, пока значение этого выражения будет истинным, оператор будет выполняться. В отличие от while do-while всегда выполняет свои операторы, по крайней мере, один раз, т.к. проверка выражения осуществляется по завершении итерации цикла. Из этого следует основное правило, необходимое при выборе между while и do-while: если есть такое условие, при котором операторы не должны выполняться, то следует выбирать while, иначе - do-while.

Многооператорные циклы do-while записываются следующим образом:

do

{

оператор 1;

оператор 2;

...

оператор n;

}

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

Следующий листинг использует do-while для счета от одного до десяти:

#include <stdio.h>

Main()

{

int number=0;

printf(“Цикл do-while \n”);

do

{

++number;

printf(“%d \n”, number);

}

while (number<10);

}

Для цикла do-while можно использовать любое средство проверки логического выражения. Чтобы продемонстрировать такую многогранность, ниже приводится пример, использующий цикл do-while для вывода на экран алфавита:

#include <stdio.h>

Main()

{

int c;

printf(”Алфавит do-while \n”);

c=’A’-1;

do

{

++c;

printf(“%c”, c);

}

while (c<’Z’);

}

Выражение c<’Z’ истинно, если ASCII-значение текущего символа меньше ASCII-значения буквы ‘Z’.

 

Задание:

1. Написать с использованием цикла do-while программу, вычисляющую F=1+x/1!+x2/2!+...+xn/n!. Закончить членом, который не превосходит E=10-6.

2. Написать программу с использованием цикла do-while, которая ожидает нажатия клавиши ‘!’ и по нажатии её завершает работу.

 

Контрольные вопросы

1. Каковы особенности использования оператора цикла do while?

2. В каком случае используется оператор do while вместо while?

 

 


Лабораторная работа №14

 







Последнее изменение этой страницы: 2016-04-08; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.229.118.253 (0.022 с.)