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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



(2 часа)

Цель работы: Изучить написание программ на языке С, используя итерационные (циклические) методы, освоить основные операторы, поддерживающие работу с циклами (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 Оформить отчет и сделать выводы о проделанной работе, изучив контрольные вопросы по теме.

Требования к содержанию отчёта приведены в лабораторной работе №1.

 

Индивидуальное задание к лабораторной работе №4

Найти сумму ряда

y = , где a £ x £ b, D x = c.

Варианты заданий приведены в таблице 4.1.

Таблица 4.1 - индивидуальное задание

Вар. f1 f2 A b c
  3x-1 e-1/x+x/(x+1)     0,5
  X3-3x2 x4+2x2+3     0,2
  e-x+4x 0,6 4,2 0,3
  Sin2(x+4x3) (x+2x3) 0,5 4,8 0,2
  Xsinx3-ln2x arctgx/4+e-x+2   6,3 0,4
  X4-cosx tgx+2x     0,5
  2x+sin2x     0,3
  ln(4x+8) e-x+sin2x     0,2
  x3ln(2x) 4x2+6x3-2 0,5   0,3
  x2+sin3x cos3x+e-2x -2   0,4
  xe-x sin4x+x3 1,5   0,3
  arctgx/5+2x 0,6   0,2
  x2/(3x+2) sin2(p x+1) 0,5 5,2 0,3
  3x/(x-2) 1,2 6,3 0,4
  x3x+1+8x |x-8|+sinx   7,5 0,3
  x4+ex+3 xarctg(x/3)   6,4 0,2
  ln2(x+4) sin3(x/5)   6,8 0,3
  ex-2+x3 x-ln|x-1|     0,4
  2cos(x+3) 4x2/(3+x3)     0,3
  ) tg2(x+4)-e-x     0,4
  3+2sin2(x-3) 4+x/10     0,5
  ln(1(1+2x) sin2(4x+1) 1,5 6,8 0,4
  +e-x 5arctg(4x)     0,5
  arcsin(x+2) 3(x-4)/(x2+1)     0,2
  e|x+2| ln2(x+4) -2   0,3
  (4-x)cos2x +e-3x     0,4
  sinx4-4 -2   0,2
  2x+4+cos2x ln|x+8| -4   0,5
  (x+2)/sin3x     0,3
  ex+3+4x2 arcsinx3     0,2

 

Контрольные вопросы для подготовки и самостоятельной работы

1 С помощью каких операторов можно досрочно завершать выполнение операторов цикла?

2 Какие выражения можно использовать в операторе цикла?

3 Как интерпретируются значения <выражений> операторов цикла? Какого типа могут быть эти <выражения>?

4 Можно ли записать следующие операторы: for (;;); while (Æ); do while(i--); for (; i && j; i++, j- -); for (int i, k;; i+=2) j++; k-=5;?: Объясните, почему можно или нельзя?

5 Объясните результат работы приведенных операторов.

6 В чём разница в работе операторов с предусловием и с постусловием?

7 Каково назначение выражений в операторе for?

8 Зачем используются составные операторы (операторные скобки)?

9 С помощью какого оператора можно прекратить выполнение текущей итерации в цикле?

10 Назовите порядок вычисления и интерпретации выражений в операторе for.

11 Объясните работу операторов в примерах.

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

Разветвляющийся вычислительный процесс с различными логическими условиями: оператор if... else, условная операция (?:), оператор switch, оператор break, оператор goto

(2 часа)

Цель работы: Изучить реализацию в языке ветвящихся вычислительных процессов. Научиться писать программы, используя операторы: ветвления if...else, переключения switch в паре с оператором break, оператор перехода goto, тернарную условную операцию (?:).

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

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

Оператор if…else (если…иначе)

Формат оператора if…else приведен ниже:

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

[else <оператор2>]

Действия оператора зависят от значения выражения. Реализация различных возможностей выполняется следующими способами. Если <выражение> в скобках не равно Æ(“Истинно”), то будет выполнятся <оператор1>. В противном случае, если указанное <выражение> равно Æ (“Ложно”), то будет выполняться <оператор2> в блоке else, если он присутствует.

В теле оператора if может находиться один или более операторов. Если должны выполняться два или более операторов, их необходимо заключить в операторные скобки: "{" и " }". <Выражение > представляет собой запись логического условия или условий. Например: 1) if(i<=j)...; 2) if(size= =a)...; 3) if(t>10 && v<3)..; 4) if(a){…}else{…}; 5) if(!a){…}else{…}.

В первом случае < выражение> истинно, если значение переменной i будет меньше или равно значению переменной j; во втором случае условие будет истинно, если значения переменных size и a будут равны; в третьем выражении истина будет соблюдаться, когда переменная t будет больше десяти “И” (&&) переменная v будет меньше трех. В четвертом случае первый блок будет выполняться при а не равном Æ, в противном случае выполняется блок после else. В пятом выполняются действия, обратные, указанные в четвертом варианте. Вместо переменных можно использовать выражения, которые будут непосредственно вычисляться, например: if ((i+2)/3 < 4*j)...выделение. Основные операции, которые ставятся между сравниваемыми величинами, следующие:

= = - знак "равно" (Не путать с присваиванием "="(!)); ! = - знак "не равно"; < -знак "меньше"; <= - знак "меньше или равно";   > - знак "больше"; > = - знак "больше или равно".

 

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

! - операция "НЕ". Пример: if (!(num % 2))... // истина -если num нечетно.

&& - операция " И ". Пример 3 (см. выше).

|| - операция " ИЛИ ".Пример: if (i+n*2<l || i%2=0)...

Детально логические операции будут рассмотрены в следующей лабораторной работе. Ниже приведен фрагмент программы, который выполняет следующие действия: запрашивает на ввод три числа и выдает в результате сравнения наименьшее из них. Оператор if…else допускает возможность вложенности при ветвлении, что обеспечивает гибкость реализации логики и компактность записи операторов.

Пример

...

printf ("Ввести три числа через пробел: ");

scanf(" %d%d%d ", &a, &b, &c);

if (a<=b && a<=c) printf (" \ n Наименьшее: %d", a);

else

if (b<=a && b<=c) printf (" \ n Наименьшее: %d", b);

else printf (" \ n Наименьшее: %d", c);

...



Поделиться:


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

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