Программирование циклов
Общая характеристика и особенности реализации трех типов операторов цикла, используемых в языке программирования Си: с предусловием, с постусловием и с параметром. Специфика применения различных операторов. Этапы программирования итерационных циклов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | реферат |
Язык | русский |
Дата добавления | 10.10.2013 |
Размер файла | 194,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Программирование циклов
В Си существуют все три типа операторов цикла: цикл с предусловием, цикл с постусловием и цикл с параметром.
Цикл с предусловием
Формат оператора цикла с предусловием:
while (выражение) оператор;
Пример записи программы:
Пример №1
int a=0;
while (a<10)
{
a=(a+1)*2;
}
int x;
x = 50;
while (x > 0)
{
x = x - 1;
}
В данном примере тело цикла будет повторяться 50 раз, до тех пор пока переменная x будет больше нуля. На каждом шаге цикла x будет уменьшаться на 1. Когда x станет равным нулю, цикл прекратится.
Цикл повторяет свое выполнение, пока значение выражения отлично от нуля, т.е. заключенное в нем условие цикла истинно.
В качестве примера использования оператора цикла рассмотрим программу вычисления факториала целого положительного числа N!. Сопоставим программу решения этой задачи написанную на Паскале, с программой на Си.
Пример 2.
Программа на Паскале
Program Faktorial;
Var F: Longint; i, N: Integer;
Begin write (`N');
ReadLn(N);
F:=l; i:=l;
While i?N Do
Begin
F:=F*i; i:=i+1 end;
WriteLn (N, '!=', F)
End.
Программа на Си++
// Программа вычисления факториала
#include <iostream.h>
void main ()
{long int F;
int i, N;
cout<< «N=»; cin>>N;
F=i=l;
while (i<=N) F=F*i++;
cout<<»\n»<<N<<»!="<<F;
}
Обратите внимание на операторы в теле цикла. Конечно, и в Си-программе можно было написать два оператора присваивания, объединив их фигурными скобками. Однако использованный способ записи более лаконичен и более характерен для Си. Этот же самый оператор можно было записать еще короче: F*=i++
При практическом использовании этой программы не следует забывать, что факториал - очень быстро растущая функция, и поэтому при определенных значениях N выйдет из диапазона, соответствующего типу long int. Задав для переменной F тип unsigned long, можно сдвинуть эту границу, но этого может оказаться недостаточно. Предлагаем в качестве самостоятельного задания исследовать предельные значения N для двух указанных типов переменной F.
Интересно свойство следующего оператора:
while(1);
Это бесконечный пустой цикл. Использование в качестве выражения константы 1 приводит к тому, что условие повторения цикла все время остается истинным и работа цикла никогда не заканчивается. Тело в этом цикле представляет собой пустой оператор. При исполнении такого оператора программа будет «топтаться на месте».
Рассмотрим еще один пример использования оператора цикла while. Вернемся к задаче итерационного вычисления суммы гармонического ряда: 1 + 1/2+1/3+… с заданной точностью е.
Пример №3
Программа на Си++
/ / Сумма
// гармонического ряда
#include <iostream.h>
#include <limits.h>
void main ()
{int n=l;
double S=0, eps;
cout<<» Точность: «;
cin>>eps;
while (1. 0/n>eps && n<INT_MAX) S+=1/n++;
cout<<»\n Сумма=»<<S;
}
Файл limits. h, подключаемый препроцессором, содержит определения предельных констант для целых типов данных. В частности, константа с именем int_max равна максимальному значению типа int в данной реализации компилятора. Если для типа int используется двухбайтовое представление, то INT_MAX=32767. В этом же заголовочном файле определены и другие константы: INT_MIN=-32768; LONG_MAX=2147483647 И Т.Д.
Пример №4
#include <stdio.h>
int main()
{int i=0; // объявим целочисленный идентификатор и присваиваем ему значение ноль
while (i<5) // выполняем цикл while до тех пор пока i<5
{
printf («Hello, World!\n»);
i++; // увеличиваем значение идентификатора i на единицу.
}
}
Цикл с постусловием
Формат оператора цикла с постусловием:
do оператор while (выражение);
Цикл выполняется до тех пор, пока выражение отлично от нуля, т.е. заключение в нем условие цикла истинно. Выход из цикла происходит после того, как значение выражения станет ложным, иными словами равным нулю. В качестве примера рассмотрим программу вычисления N!, в которой используется цикл с постусловием.
Программа на Си++
// Программа вычисления факториала
include <iostream.h>
void main()
{long int F;
int i, N;
cout<<» N=»; cin>>N;
F=i=l;
do F*=i++;
while (i<=N);
cout<<»\n»<<N<<»!=»<<F;
}
Пример №5.
Если предложенное Вами число превышает задуманное компьютером, Вам выдается сообщение «Больше». В противном случае, если наоборот, не превышает, Выдается сообщение: «Меньше». При попадании на задуманное число компьютер сообщает об этом. Одновременно подсчитывается затраченное Вами число шагов на отгадывание задуманного компьютером числа.
Текст программы, полученный в результате трансляции, Вы видите ниже на рисунке:
На рисунке показан процесс отгадывание задуманного компьютером числа:
Пример №6
#include <stdio.h>
int main()
{int i=0; // объявим целочисленный идентификатор и присвоим ему значение ноль
do // до тех пор пока
{
printf («Hello, World!\n»);
i++; // увеличиваем значение i на единицу
}
while (i<=5); // i<=5 выполняется условие - выполняется цикл
}
Цикл с параметром
Формат оператора цикла с параметром:
for (выражение_1; выражение_2; выражение__3) оператор;
Выражение 1 выполняется только один раз в начале цикла. Обычно оно определяет начальное значение параметра цикла (инициализирует параметр цикла). Выражение 2 - это условие выполнения цикла. Выражение 3 обычно определяет изменение параметра цикла, оператор - тело цикла, которое может быть простым или составным. В последнем случае используются фигурные скобки.
Алгоритм выполнения цикла for представлен на блок-схеме на рис.
Обратите внимание на то, что после вычисления выражения 3 происходит возврат к вычислению выражения 2 - проверке условия повторения цикла.
С помощью цикла for нахождение N! можно организовать следующим образом:
F=l;
for (i=l; i<=N; i++) F=F*i;
Используя операцию «запятая», можно в выражение 1 внести инициализацию значений сразу нескольких переменных:
For (F=l, i=l; i<=N; i++) F= F*i;
Некоторых элементов в операторе for может не быть, однако разделяющие их точки с запятой обязательно должны присутствовать. В следующем примере инициализирующая часть вынесена из оператора for:
F=l; i=1; for (; i<=N; i++) F=F*i;
Ниже показан еще один вариант вычисления N!. В нем на месте тела цикла находится пустой оператор, а вычислительная часть внесена в выражение 3.
for (F=l, i=l; i<=N; F=F*i, i++);
Этот же оператор можно записать в следующей форме:
for (F=l, i=l; i<=N; F*=i++);
В языке Си оператор for является достаточно универсальным средством для организации циклов. С его помощью можно программировать даже итерационные циклы, что невозможно в Паскале. Вот пример вычисления суммы элементов гармонического ряда, превышающих заданную величину е:
for (n=l, S=0; 1.0/n>eps && n<INT_MAX; n++) S+=1.0/n;
оператор программирование цикл итерационный
И наконец, эта же самая задача с пустым телом цикла:
for (n=l, S=0; 1.0/n>eps && n<INT_MAX; S+=l. 0/n++);
Следующий фрагмент программы на Си++ содержит два вложенных цикла for. В нем запрограммировано получение на экране таблицы умножения.
for (x=2; x<=9; x++)
for (у=2; у<=9; у++)
cout<<»\n»<<x<<<<*<<y<<» = «<<x*y;
На экране будет получен следующий результат:
2*2 = 4
2*3 = 6
………
9*8=72
9*9=81
Оператор continue. Если выполнение очередного шага цикла требуется завершить до того, как будет достигнут конец тела цикла. используется оператор continue. Следующий фрагмент программы обеспечивает вывод на экран всех четных чисел в диапазоне от 1 до 100.
for (i = l; i<=100; i++)
{if (i % 2) continue; cout<<»\t»<<i;}
Для нечетных значений переменной / остаток от деления на 2 будет равен единице, этот результат воспринимается как значение «истина» в условии ветвления, и выполняется оператор continue. Он завершит очередной шаг цикла, выполнение цикла перейдет к следующему шагу.
Ниже показан пример программы на языке Си, которая выводит на экран монитора буквы латинского алфавита от «A» до «Z».
#include <stdio.h>
#include <windows.h>
#include <conio.h>
main()
{
char str[50];
unsigned char ch;
textbackground(4);
textcolor(15);
clrscr();
for (ch='A'; ch<='Z'; ch++) printf («%c», ch);
CharToOem («\nДля выхода нажмите любую клавишу», str);
printf(str);
getch();
}
Результат выполнения рассмотренной программы, написанной на языке Си.
// Пример №7
int c;
c=1;
while (c!=0)
{
cin>>c;
if (c==2)
continue;
if (c<0)
break
cout<<«OK, Good Number;)«<<endl;
}
Пример №8
int nums2 [1000];
int j=0;
for (int i=999; i>-1; i-)
{
nums2 [i]=j;
j++;
}
Пример №
int c;
c=1;
while (c!=0)
{
cin>>c;
if (c==2)
continue;
if (c<0)
break
cout<<«OK, Good Number;)«<<endl;
}
Пример №9
#include <stdio.h>
int main()
{
int i, k, z=1, l=2, s=5;
for (i=0; i<5; i++)
{
k=l*z;
z=k;
}
printf («%d в степени % d =%d\n», l, s, z);
}
Вышеприведённая программа возводит 2 (l) в степень 5 (s). Она работает по следующему принципу:
шаг 1. объявляем идентификаторы i, k, z=1, l=2, s=5.
шаг 2. i=0
шаг 3. до тех пор пока i меньше или равно s, выполняем цикл
шаг 4. i=1
шаг 5. k=2*1
шаг 6. z=2
шаг 7. 1<5 продолжаем выполнение
шаг 8. i=2
шаг 9. k=2*2
шаг 10. z=4
шаг 11. 2<5 продолжаем выполнение
шаг 12. i=3
шаг 13. k=2*4
шаг 14. z=8
шаг 15. 3<5 продолжаем выполнение
шаг 16. i=4
шаг 17. k=2*8
шаг 18. z=16
шаг 19. 4<5 продолжаем выполнение
шаг 20. i=5
шаг 21. k=2*16
шаг 22. z=32
шаг 23. 5==5 условие не выполняется, выходим из цикла
шаг 24. производим вывод сообщения 2 в степени 5 = 32.
Размещено на Allbest.ru
Подобные документы
Характерные черты программирования на алгоритмическом языке СИ (алфавит, операции, специфика операторов, комментарии и другие элементы). Аналитический обзор и рассмотрение примеров программ, иллюстрирующих особенности применения основных операторов СИ.
презентация [251,0 K], добавлен 26.07.2013Применение циклической управляющией структуры для организации многократного выполнения некоторого оператора. Конструкция цикла: заголовок и тело, и алгоритм выполнения операторов while, do while и for. Отличия циклов с постусловием и предусловием.
контрольная работа [65,8 K], добавлен 30.12.2010Изучение циклических операторов: оператора цикла, управляемого счетчиком, оператора цикла с предусловием и постусловием. Минимизированные функции, текст программы. Алгоритм работы приложения по нахождению функции с помощью операторов break и continue.
лабораторная работа [474,2 K], добавлен 23.11.2014Характеристики операторов языка Си. Операторы безусловного и условного перехода: if, if-else, if-else if. Оператор переключатель switch. Оператор цикла с предусловием while, постусловием do-while. Упрощение логических выражений, взаимозаменяемость циклов.
лабораторная работа [30,0 K], добавлен 06.07.2009Программа на языке Си как набор операторов разделенных между собой точкой с запятой, знакомство с особенностями структуры, назначение. Общая характеристика линейных и циклических вычислительных процессов. Рассмотрение основных видов операторов цикла.
презентация [139,7 K], добавлен 26.07.2013Программирование линейных и ветвящихся процессов; циклов с предусловием, постусловием и параметром для вычисления сложных сумм и произведений рядов; таблицы значений функции двух переменных. Блок-схемы алгоритмов. Тексты программ и результаты их работы.
курсовая работа [2,4 M], добавлен 11.03.2015Структура и основные элементы языка Turbo Pascal. Алгоритм составления простейших программ на Turbo Pascal. Применение условного оператора и сильноветвящихся алгоритмов. Циклы с предусловием и постусловием, сочетание циклических и условных операторов.
реферат [64,0 K], добавлен 20.03.2016Решение задач, прямо связанных с применением циклов и массивов. Условия применения различных видов циклической структуры. Операторы цикла с предусловием while, постусловием do-while и for. Особенности работы с одномерными и двумерными массивами.
курсовая работа [1,1 M], добавлен 31.08.2019Классификация языков программирования. Использование циклических конструкций и выполнение итерационных процессов. Алгоритмические структуры циклов языков C, C++, Java, C#. Особенности современных языков программирования высокого уровня и их применение.
курсовая работа [345,6 K], добавлен 13.11.2009Характеристика алгоритма, его свойств, способов записи. Особенности, типовые примеры линейной алгоритмической структуры. Анализ разветвляющей алгоритмической структуры. Изучение основных операторов циклов. Эволюция, классификация языков программирования.
контрольная работа [492,2 K], добавлен 15.02.2010