Лекция: Общее знакомство

Вид материалаЛекция

Содержание


Множественный выбор
Структурное программирование
Цикл с предусловием
Цикл while
Подобный материал:
1   ...   9   10   11   12   13   14   15   16   ...   33
^

Множественный выбор


Когда в программе нужно осуществить выбор одного из нескольких вариантов, мы можем сделать это, используя конструкцию if-else if-else_...else Во многих случаях оказывается более удобным применять оператор switch.

Оператор switch (переключатель) используется для разветвления программы по нескольким направлениям. Он имеет следующую форму:

switch(e) {

сase c1: s1; break;

case c2: s2; break;

...

case ck: sk; break;

default: s(k+1);

}

где
  1. e - целое выражение (или выражение, которое может быть преобразовано в целое выражение);
  2. ci - целое выражение с постоянным значением (или выражение, которое может быть преобразовано к такому выражению);
  3. si обозначает операторы, число которых может быть больше или равно нулю.

Метки ci, обозначающие альтернативные case, должны быть уникальными; двух одинаковых меток быть не может. Только одна альтернатива может получить префикс default.

Результатом выполнения оператора switch является выбор альтернативы с меткой ci, которая равна значению выражения переключателя e; в этом случае выполняются операторы si. В случае, если выражение переключателя не равно ни одному из выражений альтернатив case, то выполняются операторы s(k+1); при отсутствии альтернативы default не выполняется ни одна из альтернатив оператора switch.

Пример:

/* Реализация работы калькулятора. Сначала задается

число - сколько раз нужно подсчитать. Вводятся

левый операнд, операция, правый операнд. Оператор

выбора определяет, какой оператор должен работать.

Результат выводится на экран. */

#include

#include

#include


main()

{

float a,b;

char opr;

float result=0;

int I,i=0;

clrscr();

printf("Сколько раз будете считать?:\n");

scanf("%I",&I);

printf("Введите операнд, операцию, операнд:\n");

while(i
i++;

scanf("%f%c%f",&a,&opr,&b);

switch(opr) {

case '+': result=a+b; break;

case '-': result=a-b; break;

case '*': result=a*b; break;

case '/': result=a/b; break;

default:

printf("Ошибка. Неверен знак операции ");

exit(1); /* функция берется

из заголовочного

файла process.h*/

}

textcolor (15); /* функция берется из

заголовочного файла conio.h*/

cprintf("Результат равен %g\n",result);

if (i
printf("Введите операнд, операцию, операнд\n");

else

{

textcolor(12);

/* функция берется из заголовочного файла

conio.h */

cprintf("Конец работы\n");

/* текст печатается красным цветом*/

}

}

getch () ;

exit(0);

/* функция берется из заголовочного файла

process.h */

}

8. Лекция: Циклы и другие управляющие средства. Структурное программирование
^

Структурное программирование


Методология структурного программирования основана на предположении, что логичность и понятность программы обеспечивает надежность, облегчает модификацию и ускоряет разработку программы.

Характерными чертами структурного программирования являются:
  • отказ от неструктурных передач управления;
  • ограниченное использование глобальных переменных;
  • модульность.
^

Цикл с предусловием


Существует три вида циклов: while, for и do. Цикл while имеет следующую форму:

while (e) s;

Оператор s выполняется до тех пор, пока значение выражения e равно "истина". Значение e вычисляется перед каждым выполнением оператора s.

В предшествующих лекциях мы пользовались этой формой цикла. Рассмотрим еще один пример его работы:

/* угадывание числа */

# include

main( )

{

int i = 1;

char res;

printf("Задумайте целое число от 1 до 100.

Компьютер попытается угадать его. \n");

printf ("Отвечайте y если догадка правильна и");

printf("\n n, если программа ошибается \n");

printf("И так, ваше число %d?\n",i);

/*получение ответа */

while((res = getchar( )) !='y')

if(res !='\n')

/* пропуск символа новая строка */

printf("Ну тогда оно равно %d\n" ,++i);

printf("Число угадано!\n");

}

!

Это довольно простая программа. Она написана правильно и решает поставленную задачу, но делает это крайне неэффективно. Данный пример показывает, что правильность написания - не единственный критерий, по которому необходимо оценивать программу. При этом очень важна ее эффективность!

В наших примерах до сих пор использовались условные выражения, но вообще говоря, это могут быть выражения произвольного типа. В качестве оператора можно использовать простой оператор с символом "точка с запятой" в конце или составной оператор, заключенный в фигурные скобки. Если выражение истинно (или в общем случае равно единице), то оператор, входящий в цикл while, выполняется один раз, а затем выражение проверяется снова. Эта последовательность действий, состоящая из проверки и выполнения оператора, периодически повторяется до тех пор, пока выражение не станет ложным (или в общем случае равным нулю). Каждый такой шаг называется итерация. Данная структура аналогична структуре оператора if. Основное отличие заключается в том, что в операторе if проверка условия и (возможное) выполнение оператора осуществляется только один раз, а в цикле while эти действия производятся, вообще говоря, неоднократно.

!

При построении цикла while вы должны включить в него какие-нибудь конструкции, изменяющие величину проверяемого выражения так, чтобы в конце концов оно стало ложным. В противном случае выполнение цикла никогда не завершится.

^ Цикл while является условным циклом, использующим предусловие, т.е. условие на входе. Он называется условным, потому что выполнение оператора зависит от истинности условия, описываемого с помощью выражения. Подобное выражение задает предусловие, поскольку выполнение этого условия должно быть проверено перед началом выполнения тела цикла.

!

Алгоритмы и псевдокод. Пошаговый процесс, гарантированно приводящий к желаемому результату, называется алгоритмом. Предложения, не являющееся предложением какого-то языка программирования, хотя и очень напоминает то, что мы пишем на данном языке программирования, называют псевдокодом. Псевдокод очень эффективен при разработке логики программы. После того как логика покажется вам правильной, вы можете обратить особое внимание на детали перевода псевдокода на реальный язык программирования. Преимущество использования псевдокода состоит в том, что он позволяет сконцентрироваться на логике и структуре программы, не заботясь пока о способе перевода этих идей на язык машины. Если мы хотим улучшить программу, нам в первую очередь необходимо улучшить алгоритм!

Подведем итоги.

Оператор while определяет операции, которые циклически выполняются до тех пор, пока проверяемое выражение не станет ложным, или равным нулю. Оператор while - это цикл с предусловием. Решение, выполнить ли в очередной раз тело цикла, принимается перед началом его прохождения. Поэтому вполне возможно, что тело цикла не будет выполнено ни разу. Оператор, образующий тело цикла, может быть либо простым, либо составным. Форма записи:

while (выражение) оператор

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