Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

For (выражение_1; выражение_2; выражение_3 )




оператор;

где выражение_1 – инициализация начального значения параметра цикла;

выражение_2 – проверка условия на продолжение цикла;

выражение_3 – изменение параметра цикла (коррекция параметра);

оператор – простой или составной оператор языка С.

Схема работы оператора следующая: только один раз вначале вычисляется выражение_1, затем проверяется выражение_2, и если оно - «истина», то выполняется циклический участок программы, затем производится коррекция параметра, и так до тех пор, пока выражение_2 не примет значение «ложь».

Например:              for (k=1; k<5; k++) 

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

В результате выполнения этого оператора печатаются в столбик цифры от 1 до 4.

В качестве параметра цикла можно использовать переменную любого базового типа. Например:          for(ch=’a’; ch<=’z’; ch++)    /* вывод на экран БУКВ */

                                 printf(“ %c”,ch);                 /* латинского алфавита */

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

Например:                          for(k=10; k>6;k++)

printf(“бесконечный цикл\n”);

Выйти из цикла досрочно можно следующими способами:

- по дополнительному условию;

- используя операторы:

×  break; - завершения работы цикла, в котором находится break, управление передается на первый после цикла выполняемый оператор;

× exit(int Kod);- происходит выход из программы;

× return;   - осуществляется выход из функции;

- с помощью оператора безусловного перехода goto <метка>;

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

Передавать управление извне вовнутрь цикла запрещается.

Любое из выражений цикла for в круглых скобках может отсутствовать, но символ «;» опускать нельзя.

Например:            int i=0;

for(; i<3; i++)

puts(“Hello!”);

 

Циклы типа while и do–while

Основная форма циклического оператора while:

While (условие)

оператор;

где оператор – это простой, составной или пустой оператор.

Цикл выполняется до тех пор, пока условие принимает значение «истина», т.е. выражение в скобках возвращает ненулевой результат. Это цикл с предусловием – сначала проверяется условие, затем выполняется оператор. Поэтому цикл while не выполнится ни разу, если изначально результат вычисления условия будет равен 0.

Основная форма оператора do – while:

do

оператор;

while (условие);

где оператор – это простой, составной или пустой оператор.

Оператор do–while – оператор цикла с постусловием, т.е. сначала выполняется оператор, а затем проверяется условие на истинность. Так как в цикле do–while условие проверяется в конце цикла, то цикл будет выполнен хотя бы один раз.

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

Например:  int i;

for (i=1;i<=300;i++)                          /* печать целых чисел, кратных 5 */

{

if (i%5!=0) continue;

printf(“%5d”,i);

  }

 

Вложенные циклы

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

         for(i=nn;i<nk;i++)

                     for(j=mn;j<mk;j++)

                                 оператор;

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

Пример:    int i,j;

 for(i=1;i<10;i++)                           /* печать таблицы умножения */

{                                            /* целых чисел */

for(j=1;j<4;j++)

printf(“\n %d*%d=%2d”, i, j, i*j);

printf(“\n”);

}

 

Пример 1:

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

Текст программы может иметь вид:

#include <stdio.h>

#include <conio.h>

void main(void)

{

float s;

int k,N;

clrscr( );                               

 puts(“Введите N”);

 scanf(“%d”,&N);

        for (s=0, k=1; k<=N; k++)

       {

       s+=1.0/k;

       printf(" \n k=%d s=%f ", k, s);

       }

printf("\n ОТВЕТ: s=%f, Press any key...",s);

getch( );                         

}

 

Пример 2:

Вывести таблицу значений функции  при x изменяющемся от a до b с шагом h. Значения a, b, h вводятся с клавиатуры. Таблица должна содержать следующие столбцы: порядковый номер, значение x, значение у, сообщение о возрастании или убывании функции, разность двух соседних значений функции. Определить максимальное и минимальное значения функции.

#include <conio.h>

#include <stdio.h>

#include <math.h>

#define PI 3.14159265358

void main()

 {

double x,y,a,b,h,dy,ypred,ymax,ymin;

int i,inc;

char *vs;

clrscr();

puts("Введите значения a,b и h");

scanf("%lf %lf %lf",&a,&b,&h);                                  /* ВЫВОД ШАПКИ ТАБЛИЦЫ */

printf("Номер| x | Y(x) |Возрастает/убывает|Разность \n");

printf("------------------------------------------------------\n");

x=a;

                                     /* ВЫЧИСЛЕНИЕ НАЧАЛЬНОГО ЗНАЧЕНИЯ ФУНКЦИИ */

ymax=ymin=ypred=y=exp(x*cos(PI/4))*cos(x*sin(PI/4));

printf("%5d|%9.4lf|%9.4lf|             |\n",1,x,y);

for(x=a+h,i=2; x<=b+h/2; x+=h,i++)

{

y=exp(x*cos(PI/4))*cos(x*sin(PI/4));

if (y>ymax) ymax=y;          /* ПОИСК МАКСИМАЛЬНОГО ЗНАЧЕНИЯ */

if (y<ymin) ymin=y;           /* ПОИСК МИНИМАЛЬНОГО ЗНАЧЕНИЯ */

dy=y-ypred;                             /* ВЫЧИСЛЕНИЕ РАЗНОСТИ МЕЖДУ

СОСЕДНИМИ ЗНАЧЕНИЯМИ ФУКНЦИИ */

ypred=y;

if (dy>0) vs="Возрастает";

                   else vs="Убывает";

printf("%5d|%9.4lf|%9.4lf|%18s|%9.4lf\n",i,x,y,vs,dy);

}

printf("\nymax=%lf ymin=%lf \nPress any key...",ymax,ymin);

getch();

}

 

Варианты индивидуальных заданий

       Составить программу для определения таблицы значений функции у в произвольном диапазоне [a,b] изменения аргумента хс произвольным шагом h. Значения a, b, hвводятся с клавиатуры. Таблица должна содержать следующие столбцы: порядковый номер, значение аргумента x, значение функции, сообщение о возрастании или убывании функции, разность двух соседних значений функции. Определить максимальное и минимальное значения функции.

1.    a=-1,5; b=1,5; h=0,2.

2.    a=0,7; b=1,8; h=0,1.

3.    a=-0,5; b=2,5; h=0,2.

4.    a=-0,9; b=2,7; h=0,3.

5.    a=-2; b=0,8; h=0,2.

6.    a=-1,9; b=2,7; h=0,3.

7.    a=-0,4π; b=0,4π; h=0,5.

8.    a=-0,3π; b=1,3π; h= π/10.

9.    a=-π/2; b= π/2; h=π/10.

10.    a=-3; b=3; h=0,5.

11.    a=-π; b=π; h= π/6

12.    a=-π/2; b=π/2; h=π/10.

13.    a=-0,9; b=2,7; h=0,3.

14.    a=-0,1; b=2; h=0,1.

15.    a=π; b=2π; h= π/15.

16.    a=-π; b=π; h=0,4.

17.    a=-0,9; b=1, h=0,3.

18.Дано действительное число а. Найти среди чисел 1, 1+1/2, 1+1/2+1/3+… первое, большее а.

19.Дана последовательность . Среди первых ста членов последовательности найти минимальный номер и значение того члена последовательности, который является целым числом.

20.Определить количество слагаемых в сумме вида S=2+4+6+… при условии, что S≤2m, где m – целое число, вводимое с клавиатуры.

Даны действительные числа х и eps. Вычислить приближенно значение бесконечной суммы S. Приближение считается полученным, если найдена сумма нескольких сланаемых, и очередное слагаемое оказалось по модулю меньше eps.

21.S=

22.S=

23.S=

24.S=

25.S=

26.Ввести натуральное число m. Получить наибольшую цифру числа m, которая является нечетной, и номер ее позиции в числе m.

27.Ввести натуральное число m. Найти и вывести наименьшее значение суммы двух цифр этого числа.

28.Ввести натуральное число m. Определить сколько раз среди соседних разрядов числа встречается 2 одинаковые цифры. Например, в числе 1122234 встречается 3 соседние цифры.

29.Ввести натуральное число m. Выбросить из записи числа цифры 5 и 3, оставив прежний порядок цифр.

30.Определить количество трехзначных натуральных чисел, делящихся на каждую из своих цифр.

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

 

 

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

1.Какой процесс называется “циклическим”?

2.Чем отличаются операторы while и do…while?

3.Поясните понятие “вложенный цикл”?

 



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

 










Последнее изменение этой страницы: 2018-05-10; просмотров: 170.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...