Конструкция if–else if–else if–...–else




Введение

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

Данная курсовая работа выполнена на языке программирования высокого уровня С++ с использованием компилятора Microsoft Visual Studio 2008. Этот язык был разработан в начале 80-х годов в Bell Laboratories. С++ - расширение С, т.е. он обеспечивает кардинальное преимущество языка С++, как над своим предшественником языком С так и над другими языками высокого уровня: поддержка объектно-ориентированного программирования, перегруженных операций и возможность разработки полномасштабных windows-приложений.

Можно сказать, что язык С++ является одним из совершенных и сложных языков программирования на сегодняшний день.

С помощью языка С++ можно решать всевозможные задачи ставящиеся перед современным программистом: написание системных программ, разработка полноценных windows-приложений, объектное моделирование. Благодаря тому, что язык С++ первоначально разрабатывался как языксистемного программирования, то он предоставляет программисту широкие возможности для работы с аппаратурой. Но так как язык С++ подвергся полномасштабной обработки, то он обеспечивает пользователя широким набором средств для решения задач объектно-ориентированного программирования, благодаря этому язык С++ позволяет осуществить интеграцию принципов объектно-ориентированного программирования на аппаратный уровень.

В этой курсовой работе проиллюстрированы основные разделы программирования,изучаемые в курсе программирования на языке С++.

 

 

1.Циклы языка С++

Операторы цикла относятся к управляющим конструкциям всякого языка программирования. Управляющие операторы и конструкции языка задают порядок, в котором выполняются вычислительные операции программы.

Оператор while

Изучение операторов цикла начнем с оператора while. Цикл while имеет следующий формат (синтаксис) записи:

while (expression)

program statement;

Производится расчет выражения expression, заключенного в круглые скобки. Если в результате расчета выражения expressionполучается истинный результат (TRUE), то выполняется утверждение program statement, следующее непосредственно за закрывающей круглой скобкой. После выполнения этого утверждения вновь рассчитывается выражение expression. Если в результате расчета будет TRUE, то вновь будут выполнены утверждения program statement. Цикл повторяется до тех пор, пока в результате расчета выражения expression (в круглых скобках оператора while) не будет получено значение FALSE (ложный), которое является признаком окончания цикла, после чего выполнение программы продолжается с утверждения, следующего за утверждением program statement. Когда требуется выполнить группу утверждений, то она (группа) располагается в фигурных скобках:

while (expression)

{

program statement;

program2 statement2;

program3 statement3;

...

}

Открывающаяся фигурная скобка может следовать непосредственно после закрывающей круглой скобки оператора while. Все, что находится в фигурных скобках, будет выполняться, пока верно выражение expression.

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

Оператор for

Оператор цикла for имеет следующий формат записи:

for (init_expression; loop_condition; loop_expression)

program statement;

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

Первый параметр init_expression используется для задания начального значения цикла.

Второй компонент loop_condition определяет условие или условия, в соответствии с которыми будет происходить выход из цикла. Повторение будет происходить до тех пор, пока это условие (или условия) выполняются. Если условие не выполняется, то цикл немедленно заканчивается.

Третий параметр loop_expression выполняется каждый раз, когда заканчивается обработка тела цикла, т.е. program statement.

Чаще всего выражения init_expression и loop_expression являются операторами присваивания или вызовами функций, а второе выражение loop_condition – выражением отношения или логическим выражением. Любую из трех частей можно опустить, но точки с запятыми должны остаться на своих местах. Если опустить init_expression или loop_expression, то соответствующие операции не будут выполняться. Если же опустить проверку условия loop_condition, то по умолчанию считается, что условие продолжения цикла всегда истинно, и тогда цикл станет бесконечным (произойдет зацикливание).

Когда требуется выполнения нескольких утверждений, то они должны заключаться в фигурные скобки:

for (init_expression; loop_condition; loop_expression)

{

program1 statement1;

program2 statement2;

program3 statement3;

...

}

В представленном случае тело цикла находится в фигурных скобках.

Конструкция цикла, реализованная оператором for, может быть выполнена также и оператором while следующим образом:

init_expression;

while (loop_condition)

{

program statement;

loop_expression;

}

Исключением является применение операции continue.

Операторы отношения перечислены в табл. 3.1.

Таблица 3.1.
Операторы отношения языка программирования С
№ п/п Оператор Значение
1) == Равно
2) != Не равно
3) < Меньше
4) <= Меньше или равно
5) > Больше
6) >= больше или равно

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

Оператор do–while

Рассмотренные операторы цикла while и for производят проверку условия выполнения цикла до начала выполнения тела цикла [3.1]. Поэтому тело цикла может ни разу не выполниться, если с самого начала результатом расчета условия выполнения цикла будет значение FALSE (ложь). В случае необходимости производить проверку условия выполнения цикла после тела цикла (т.е. когда выполняется хотя бы одно предписанное действие в теле цикла) прибегают к циклу do–while.

Оператор цикла do–while имеет следующий формат записи:

Do

program statement;

while (loop_condition);

Выполнение цикла do–while происходит следующим образом: сначала выполняется утверждение program statement, затем производится проверка условия выполнения цикла loop_condition с помощью оператора while. Если результатом проверки будет значение TRUE (истина), то выполнение цикла продолжится, и утверждение program statement всякий раз будет выполняться вновь. Повторение цикла будет продолжаться до тех пор, пока в результате проверки условия выполнения цикла loop_condition будет получаться значение TRUE. Когда в результате проверки условия будет вычислено значение FALSE (ложь), то выполнение цикла прекратится и произойдет переход к утверждению (следующему фрагменту программы), непосредственно следующему за циклом.

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

do {

program1 statement1;

program2 statement2;

program3 statement3;

... } while (loop_condition);

Оператор цикла while называется оператором цикла с предусловием, оператор цикла for называется оператором цикла с параметром, оператор цикла do–while называется оператором цикла c постусловием.

Практическая часть

Рассмотрим примеры программ с операторами циклов while, for и do–while.

Пример 1. Напишите программу вывода на экран пользователя целых положительных чисел с помощью оператора while. Начальное и последнее число должно задаваться пользователем с клавиатуры.

Программный код решения примера:

#include <stdio.h>

#include <conio.h>

int main(void)

{

int i, j = 0, n;

printf("\n\t Enter the primary natural number: ");

scanf_s("%d", &i);

printf("\t Enter the last natural number: ");

scanf_s("%d", &n);

 

printf("\n\t The numbers are:");

while (i <= n) {

printf("\n\t %3d", i);

++i;

++j;

}

printf("\n\t Total numbers: %d\n", j);

 

printf("\n Press any key: ");

_getch();

return 0;

}


Рис. 3.1. Результат выполнения программы с вводом целых чисел

Возможный результат выполнения программы показан на рис. 3.1.

В программе использована функция scanf_s(), принятая в MS Visual Studio. В программе применено инкрементирование переменных, принятое в языке С, а именно ++i или ++j означает, что переменные увеличиваются на единицу. При этом знаки "++" могут располагаться перед именем переменной или после. Отличие в том, что ++i – это значение переменной после увеличения, а i++ – сначала переменная имеет заданное значение, а потом происходит ее увеличение. Для переменных цикла обе формы равнозначны.

Условием цикла является то, что пока переменная i меньше или равна переменной n (предполагается, что n больше начального значения i), то будут выполняться действия (печать и увеличение переменной j), заложенные в теле цикла. Расчет выражения, заключенного в круглые скобки оператора, предназначен для проверки нестрогого неравенства переменной i по отношению к переменной n. Если это неравенство выполняется, то в теле цикла происходят печать и увеличение (инкрементирование) переменных i, j.

Пример 2. Напишите программу посимвольного ввода предложения "Hello, world" и подсчитать число символов в нем (включая запятую и пробел).

Программный код решения примера:

#include <stdio.h>

#include <conio.h>

int main(void)

{

int c, i = 0;

printf("\n Enter symbol-by-symbol the offer \"Hello, world\",\n press twice Ctrl+Z and press Enter:\n");

printf("\t");

while ((c = getchar())!= EOF)

{

printf("\t");

c = getchar();

++i;

}

printf("\n\t The number of characters: %d\n", i);

printf("\n Press any key: ");

_getch();

return 0;

}

В программе ввод символьных данных должен завершиться комбинацией клавиш Ctrl+Z, что будет соответствовать окончанию ввода (файла), т.е. EOF. Оператор цикла while будет выполняться до тех пор, пока не встретится так называемый конец файла EOF. В предложении \"Hello, world\" два обратных слэша включены для вывода на консоль двойных кавычек.

Функции printf("\t") осуществляют табуляцию вводимых символов. Подсчет числа вводимых символов выполняется с помощью переменной цикла (счетчика) i, которая инкрементируется в теле цикла.

Заголовочный файл #include <conio.h> служит для поддержания консольного ввода-вывода для функции _getch(). Без него при компиляции программы могут выводиться предупреждения, хотя программа с предупреждениями работает.

Результат выполнения программы показан на рис. 3.2.


Рис. 3.2. Выполнение программы посимвольного ввода данных

Примечание. Прототип функции putchar() имеет следующий вид:

#include <stdio.h>

int putchar (int ch);

Пример 3. Напишите программу табличного вывода строчных букв латинского алфавита и их десятичных кодов с помощью оператора цикла for.

Как известно, в латинском алфавите 26 букв. Поэтому можно создать массив символов этих букв. С учетом того, что тип charпредставляет собой целочисленный тип, то можно обойтись без создания массива.

Программный код решения примера:

#include <stdio.h>

#include <conio.h>

int main(void){

int j = 1;

char a = 'a';

printf("\n Table code characters:\n");

for (; a <= 'z'; ++a)

printf("\n %4d) %2c: code%4d", j++, a, a);

printf("\n\n Press any key: ");

_getch();

return 0;

}

Результат выполнения программы показан на рис. 3.3.


Рис. 3.3. Таблица десятичных кодов букв латинского алфавита

Форматированный вывод данных предусматривает выравнивание по правому краю, для чего предусматриваются числовые спецификаторы типа %4d и %2c для целых чисел и символов в функции printf().

1. Напишите программу расчета значений функции распределения потока Эрланга 4-го порядка с параметром = 2.3 на отрезке времени от 0 до 5 (условных единиц) с шагом 0.2:

Программный код решения примера:

#include <stdio.h>

#include <conio.h>

#include <math.h>

int main(void)

{

int j, f, k = 4;

double F, Lt, s, t = 0.0, Tend = 5.0;

float L = 2.3F;

}

printf("\n Erlang function of order %d, Lambda = %1.2f:\n\n", k, L);

for (; t <= Tend; t += 0.2) {

s = 0.0; f = 1; Lt = 1.0;

for (j = 1; j <= k; ++j) {

f *= j;

Lt *= (L*t);

s += (Lt/f)*exp(-L*t);

}

F = 1 - exp(-L*t) - s;

printf("\t %lg\n", F);

}

printf("\n\n Press any key: ");

_getch();

return 0;

}

В программе использованы вложенные циклы for. Применены специфические условия изменения переменных (но характерных для языка С):

t += 0.2; /* t = t + 0.2; */

f *= j; /* f = f * j; */

Lt *= (L*t);/* Lt = Lt * (L*t); */

Вычисление факториала выполнено с помощью произведения и выделения отдельного слагаемого суммы, когда рассчитывается 0!

В программе также предусмотрено накопление суммы для каждого шага времени t. Для расчета экспоненты в заголовок программы включена библиотека математических функций #include <math.h>.

Результат выполнения программы показан на рис. 3.4.


Рис. 3.4. Расчет функции распределения Эрланга 4-го порядка

Пример 5. Вычислите с точностью до "машинного нуля" значение суммы числового ряда:

Программный код решения примера:

#include <stdio.h>

#include <conio.h>

int main(void)

{

double denom;

double sum1 = 0.0, sum2 = 0.0;

int k = 1;

denom = k * (k + 1) * (k + 2); // знаменатель ряда

do {

sum1 = sum2;

sum2 += 1.0 / denom;

denom = denom / k * (k + 3);

++k;

} while (sum1 < sum2);

printf("\n\t The amount of numerical series: %lg\n", sum2);

printf("\n Press any key: ");

_getch();

return 0;

}

В приведенной программе сумма вычисляется как значение переменной sum2. Ее предыдущее значение сохраняется в переменной sum1. Так как приближенное значение с добавлением неотрицательных слагаемых не уменьшается, условием продолжения цикла служит отношение sum1 < sum2 (поскольку растет знаменатель denom). Когда при добавлении очередного слагаемого значение суммы остается неизменным (за счет конечной разрядной сетки для представления вещественных чисел), нарушается условие sum1 < sum2 и цикл прекращается. Таким образом, конечность разрядной сетки представления вещественных чисел в компьютере определяет собой "машинный нуль".

Инициализация знаменателя сделана до начала цикла. Форматный вывод результата выполнен с помощью спецификатора символа "l".

Результат выполнения программы показан на рис. 3.5.


Рис. 3.5. Результат подсчета суммы бесконечного ряда

 

Пример 6. Произведите реверс цифр заданного целого числа, вводимого с клавиатуры пользователем.

Задача заключается в том, чтобы, например, число 123 переписать как 321.

Программный код решения примера:

#include <stdio.h>

#include <conio.h>

int main(void)

{

long int x, r;

printf("\n Enter an integer: ");

scanf_s("%ld", &x);

printf("\n Reverse-digit number %ld:\n\n\t", x);

do {

r = x % 10;

printf(" %ld", r);

x = x / 10;

} while (x!= 0);

printf("\n\n Press any key: ");

_getch();

return 0;

}

В программе применена операция арифметическая операция деления по модулю, которая имеет символ процента, т.е. "%". Любой остаток, получающийся в результате деления целых чисел, будет отброшен [3.2]. В шкале старшинства оператор деления по модулю имеет приоритет, равный приоритету операторов умножения и деления. Переменные, используемые в программе, объявлены как длинные числа, поэтому применен тип long int (или long). В некоторых компиляторах имеются отличия между типами int и long int в смысле максимально поддерживаемого значения числа.

Результат выполнения программы показан на рис. 3.6.


Рис. 3.6. Результат программы по реверсу числа

Пример 7. На основе только оператора цикла for напишите программу по выводу "горки" заглавных букв, симметрично убывающих к букве, введенной пользователем. Также на основе оператора цикла for предусмотрите защиту от неправильного ввода.

Программный код решения примера:

#include <stdio.h>

#include <conio.h>

int main (void) {

int p = 0;

char ch = 'A';

char i, j, k, ch2, kk, chA;

chA = ch;

printf("\n Enter a capital letter between \"A\" and \"S\": ");

scanf_s("%c", &ch2, sizeof(char));

for(chA -= 1; chA >= ch2; chA--)

{

printf("\n Error! Press any key: ");

_getch();

return -1;

}

 

for (kk = 'S'+1; kk <= ch2; kk++)

{

printf("\n Error! Press any key: ");

_getch();

return -1;

}

 

k = ch2;

for (kk = ch; kk <= k; kk++)

{

printf("\n ");

for (ch2 = ch; ch2 <= k-p; ch2++)

printf(" ");

for (j = ch; j <= kk; j++)

printf(" %c", j);

for (i = kk; i > ch; i--)

printf(" %c", i-1);

p++;

 

}

printf("\n\n Press any key: ");

_getch();

return 0;

}

Пример выполнения программы показан на рис. 3.7.


Рис. 3.7. Пример горки букв

В языке программирования С используются несколько конструкций для принятия решений:

· оператор if;

· оператор switch;

· условный оператор? (оператор условия).

Для прерывания программного цикла при некотором условии применяется утверждение (оператор) break, для продолжения итераций цикла при выполнении некоторых условий применяется утверждение (оператор) continue, для выхода из функции при выполнении некоторых условий применяется оператор return, для перехода к заданному месту программы применяется оператор goto, хотя считается, что в программировании не существует ситуаций, в которых нельзя обойтись без оператора goto [2; 3]. Утверждение breakприменяется также в теле оператора switch.

Оператор if

Общая форма записи оператора if:

if (expression)

program statement;

В операторе if используется результат вычисления условия, заключенного в круглые скобки, на основе которого принимается решение. Результат вычисления условия expression может быть арифметическим или логическим. Если результат выполнения условия expression будет истинным, то возможно выполнить несколько утверждений типа program statement. Для этого следует использовать фигурные скобки, например:

if (expression)

{

program1 statement1;

program2 statement2;

...

}

Конструкция if–else

Общая форма записи конструкции if–else:

if (expression)

program1 statement1;

else

program2 statement2;

Если выполняется условие expression, то будет выполняться фрагмент программы program1 statement1, в противном случае будет выполняться program2 statement2.

Каждое из утверждений может быть множественным. В таком случае применяются фигурные скобки:

if (expression)

{

program1 statement1;

program2 statement2;

...

}

else

{

program33 statement33;

program34 statement34;

...

}

Конструкция if–else if–else if–...–else

Форма записи конструкции if–else if–else if–...–else:

if (expression1)

program1 statement1;

 

else if (expression2)

program2 statement2;

 

else if (expression3)

program3 statement3;

...

else

program statement;

Приведенная конструкция используется для выбора возможных ситуаций, когда проверяются условия expression1, expression2, expression1,.... Соответственно будут выполняться действия program1 statement1, program2 statement2, program3 statement3 и т.д. В случае, когда ни одно из условий не выполняется, выполняются действия, прописанные после оператора else.

В случае выполнения множественных действий применяются фигурные скобки для каждого из утверждений:

if (expression1)

{

program1 statement1;

...

}

else if (expression2)

{

program2 statement2;

...

}

else if (expression3)

{

program3 statement3;

...

}

...

else

{

program statement;

...

}

Оператор switch

Общая форма записи оператора switch:

switch (expression) {

case value1:

program statement;

...

break;

case value2:

program statement;

...

break;

...

case valuen:

program statement;

...

break;

default:

program statement;

...

break;

}

Выражение заключенного в круглые скобки оператора последовательно сравнивается со значениями value1, value2,..., valuen, которые должны быть простыми константами или константными выражениями. В том случае, когда одно из этих значений равно значению, выполняются утверждения, которые следуют за данным значением.

Утверждение break сигнализирует об окончании выполнения утверждений и приводит к выходу из оператора switch. Утверждение break ставится в конце каждого варианта выбора. Если этого не сделать, то выполнение последовательности утверждений перейдет в следующий вариант выбора и будет выполняться до тех пор, пока не встретится утверждение break [4.1].

Специальный дополнительный вариант default будет выполнен в том случае, когда не будет найдено ни одного совпадения.

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

Условный оператор?

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

Общий формат записи оператора условия:

условие? выражение_1: выражение_2

Если в результате вычисления условия будет получено значение TRUE (истина, не нуль), то выполняется выражение_1, и результатом выполнения оператора условия будет значение, полученное при вычислении этого выражения. Если в результате вычисления условия будет получено значение FALSE (ложь, т.е. нуль), то выполняется выражение_2, и результатом выполнения оператора условия будет значение, полученное при вычислении выражение_2.

Оператор условия часто описывают как оператор?. Тернарный оператор условия? наиболее часто используется для присвоения переменной одного из двух значений в зависимости от некоторого условия.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: