Программирование разветвляющегося

Циклического вычислительного процесса.

Цель работы: Изучить написание программ на языке С, используя итерационные (циклические) методы, освоить основные операторы, поддерживающие работу с циклами (for, while, do... while). Научиться писать программы, используя данные операторы.

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

Каждый оператор С заканчивается оператором (;), который является пустым оператором. Циклы или итерационные процедуры позволяют выполнять отдельные операторы или блоки операторов (составные операторы {…}). Число повторов определяется выражением в скобках, значение которого сравнивается с Æ (Æ-прекращение цикла). Циклы бывают с проверкой значения выражения перед началом выполнения тела цикла (с предусловием), по окончанию выполнения тела (с постусловием) или внутри тела цикла. В С определено три вида операторов цикла: оператор цикла с предусловием - while, оператор цикла с постусловием do...while и оператор цикла for. Рассмотрим эти операторы детально:

Цикл while имеет следующий формат:

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

Условие выполнения итерации в цикле while предварительно проверяется и в случае истинности выражения (не равно Æ) выполняются те операторы, которые описаны в теле цикла. В противном случае цикл заканчивается, и программа продолжает свое выполнение с того места, где закончилось тело цикла. Если тело цикла содержит несколько операторов, оно ограничивается операторными скобками: "{"и"}"и являетсясоставным оператором.

Прервать выполнение цикла можно, используя операторы break, goto, return. Ниже продемонстрировано два примера работы с циклом whileв виде фрагментов программ.

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

Пример 1 Пример 2
… int i=10,k,s =Æ; printf ("ввести шаг приращения к: "); scanf("%i",&k ); while (i) //выполнять цикл, пока i не // равно Æ { s+=k; // увеличить sна k i- - ;// уменьшитьi на 1 if (i=k) break; //выйти, если выполнится // условие: i=k }... ... char ch =’a’; do //начать цикл do while { printf("\nОтвечайтеyesили no (y/n):"); scanf(ch!=’y’ &&ch!= 'n'); // выполнять цикл до тех пор, пока не будет нажата // буква ‘y’ или ‘n’  

Оператор циклаdo while() является циклом с постусловием. В этом случае тело цикла всегда выполнится хотя бы один раз.

Формат оператора цикла следующий:

do <оператор>

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

Телом цикла может являться один или несколько операторов (составной оператор). Ниже приведены аналогичные примеры реализации цикла с постусловием.



Пример 1 Пример 2  
int i=10, k, s=Æ; printf("ввести шаг приращения к: "); scanf("%i", &k); do//начать циклdo while { s+=k;//увеличить s на k i-- ; //уменьшить i if (i=k) break;//выйти, если // выполнится условие: i= =k while (i);// выполнять цикл, пока i //не равно Æ char ch; do //начать цикл do while printf("\n Отвечайте yes или no (y/n):"); scanf("%c",&ch); while (ch!='y' && ch!='n');// выполнять //цикл до тех пор, пока не будет нажата //буква 'y' или 'n'  

Оператор циклаforявляется наиболее удобным и мощным средством организации циклических вычислений в С.

Формат цикла for:

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

где :<выражение1> - производит инициализацию тех переменных, которые будут непосредственно изменяться в цикле, в частности, задаётся начальное значение переменной-счётчика

<выражение2> -определяет условие выхода из цикла. При равенстве его значения Æ цикл прерывается;

<выражение3> - это выражение задает изменение на каждом шаге переменных, проинициализированных в <выражении1>. Можно задавать также изменение других переменных, не связанных с <выражением1>.

Каждое из описанных выражений может отсутствовать. Оператор цикла for, заданный как for(;;){<тело_цикла>}, является бесконечным циклом.

Алгоритм работы оператора цикла for ():

1 Вычисляется первое выражение (если оно присутствует).

2 Вычисляется второе выражение (если оно присутствует), проверяется условие окончания цикла:(<выражение 2>= =Æ “ Ложно ”) т.е. Если оно не равноÆ (“Истинно”)– происходит переход к пункту 3, иначе выход из цикла.

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

4 Вычисляется третье выражение, если оно присутствует.

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

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

Выход из циклавозможен аналогично while с помощью операторов break, goto, return.

Пример 1 (вариант 1) (вариант 2)

#include <stdio.h> void main (void) {// Программа выводит четные числа //в диапазоне от 100 до 0, в порядке // убывания. for (int i=100;i>=0;i-=2) printf("\n%d",i); } i - =2 f r (i=100; i>=0; i--) if (i%2= =1) continue; o// оператор // continueпрерывает текущую // итерацию else printf("\n%d",i);

Для демонстрации гибкости оператора for перепишем пример в следующем виде (вариант 3):

for(int i=100;i>=0; printf("\n%d",i), i - =2);

Пример

/* ЗАНЯТИЕ N 4

Разработал ...........

Cтрока символов записывается в обратном порядке с

применением различных операторов организации циклов */

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <math.h>

# define N 23

main()

{int t,b;

char string[]="\"Инициализация строки\"";

char m;

clrscr();

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

printf("Вывод исходной строки\n");

for (t=0;t<N;t++)

printf("%c ",string[t]);

for (t=0,b=N-2;t<(N-1)/2;t++,b--)

{m=string[t];

string[t]=string[b];

string[b]=m;

}

printf("\nВывод строки в обратном порядке\n");

for (t=0;t<N;t++) printf("%c ",string[t]);

printf("\nВвод новой строки -y, нет-n:\t");

m=getche();

if(m!='n')

new_str: scanf("%s",string);

else printf("\n");

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

t=0;

while(string[t]!='\0')

{printf("%c",string[t]);

t++;

}

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

// Цикл d0...while -с постусловием

printf("Вывод строки в обратном порядке\n");

b=t-1;t=0;

do

{m=string[t];

string[t]=string[b];

string[b]=m;

t++;b--;

}while(t<b);

printf("%s ",string);

printf("\nВвод новой строки -y, нет-n:\t");

m=getche();

if(m=='y') goto new_str; //new_str -метка

else getch();

}

/* Вывод исходной строки

" И н и ц и а л и з а ц и я с т р о к и "

Вывод строки в обратном порядке

" и к о р т с я и ц а з и л а и ц и н И "

Ввод новой строки -y, нет-n: n

"икортс яицазилаицинИ"

Количество символов =22

Вывод строки в обратном порядке

"Инициализация строки"

Ввод новой строки -y, нет-n: y

qwert12345

Количество символов =10

Вывод строки в обратном порядке

54331trewq

Ввод новой строки -y, нет-n: n */

Ход работы

1 По индивидуальному заданию преподавателя составить программу с различными вариантами применения операторов цикла:while, do… while, for. Предусмотреть дополнительные возможности выхода из циклов (операторы break, goto).

2 Набрать программу на компьютере, выявить и устранить ошибки.

3Ознакомиться с работой операторов цикла в языке С.

4 Получить результаты работы программы.

5 Оформить отчет и сделать выводы о проделанной работе, изучив контрольные вопросы по теме.

Задание к лабораторной работе

Вычислите таблицу значений функции

Программирование разветвляющегося - student2.ru

для значений аргумента х в интервале от Хн до Хк с шагом DX. Исходные данные приведены в таблице 4.

Таблица 4

Вар. f1(x) f2(x) а Хн DX
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 3,2 1,3 6,5 0,5
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 4,1 1,2 3,6 0,2
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 2,8 1,4 4,2 0,3
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 0,5
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 2,4 0,7 3,8 0,2
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 10,3 0,3
Программирование разветвляющегося - student2.ru ax2+ex 2,1 0,8 3,6 0,2
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 5,4 2,3 8,9 0,4
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 1,7 0,4 2,8 0,3
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 14,2 11,6 1,6 0,2
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 1,1 0,2 1,8 0,2
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 5,4 2,2 7,3 0,3
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 2,5 1,9 3,8 0,2
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 5,1 3,3 6,9 0,3
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 0,7 0,6 0,9 0,05
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 3,8 1,2 5,3 0,4
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 2,7 1,8 4,2 0,3
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 2,1 0,4 3,9 0,2
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 3,4 0,5 4,6 0,5
Программирование разветвляющегося - student2.ru asin(x3)+x 2,8 1,6 4,8 0,3
Программирование разветвляющегося - student2.ru x4sin(ax) 4,2 2,8 5,6 0,2
Программирование разветвляющегося - student2.ru ax+tg(ax) 2,6 0,5 3,5 0,5
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 6,3 2,5 7,5 0,5
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 0,5
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru p 2p p/4
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru p/4 -p p p/3
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru 3,9 2,8 4,6 0,2
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru p 0,1 2p p/6
Программирование разветвляющегося - student2.ru Программирование разветвляющегося - student2.ru -1 -4,2 3,8 0,5

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

Наши рекомендации