
- •Основные управляющие конструкции
- •1.3. Общая структура программ
- •1.4. Комментарии
- •1.5. Константы и переменные
- •1.6. Оператор простого присваивания
- •1.7. Операторы ввода и вывода данных
- •2. Базовые стандартные типы
- •2.1. Целый тип данных
- •2.2. Вещественный тип
- •2.3. Стандартные математические функции
- •3. Программы линейной структуры
- •3.1. Арифметические выражения
- •3.2. Примеры программ линейной структуры
- •4. Программы с ветвлением
- •4.1. Логический тип данных
- •4.2. Логическое выражение
- •4.3. Условный оператор
- •4.4. Оператор выбора
- •5. Программы циклической структуры
- •5.1. Оператор цикла с предусловием while
- •5.2. Оператор цикла с постусловием do .. While
- •5.3. Оператор цикла с параметром for
- •4.4. Оператор перехода
- •5.4. Операторы передачи управления
- •5.5. Вложенные циклы
- •5.6. Вычисление сумм
- •Практикум на эвм Линейные алгоритмы
- •1. Задания для решения на компьютере
- •2. Задания для самостоятельной работы
- •Алгоритмы с ветвлением
- •1. Задания для решения на компьютере
- •2. _____________________________________________________________________________________________________________________________Задания для самостоятельной работы
- •Программы с циклами
- •1. Задания для решения на компьютере
- •2. _____________________________________________________________________________________________________________________________Задания для самостоятельной работы
- •Приложение
5.2. Оператор цикла с постусловием do .. While
Для программной реализации циклических процессов с неизвестным числом повторений существует еще один оператор – оператор цикла с постусловием, который имеет вид:
do
<оператор>
while (<логическое выражение>);
Этот оператор аналогичен оператору цикла с предусловием, но отличается от него тем, что проверка условия производится после очередного выполнения тела цикла. Это обеспечивает его выполнение хотя бы один раз.
Примеры
1) k=0;
do
{n=n/10; k=k+1;}
while (n>0);
2) i=0; s=0;
do
i++; s=s+pow(i,2);
while (i<100);
3) i=0; a=1; s=a;
do
{
i=i+1;
a=-a*x/i; s=s+a;
}
while (fabs(a)>0.0001);
Пример программы
Вычислить квадратный корень вещественного числа x с заданной точностью ε=0.0001 по итерационной схеме:
,
где yn-1 – предыдущее приближение к корню, yn – последующее приближение.
Осуждение. Начальное приближение y0 выбирается произвольно. Процесс вычислений прекращается, когда два последовательных приближения станут отличаться друг от друга по абсолютной величине менее, чем на величину заданной точности.
#include <stdio.h>;
#include <math.h>;
void main()
{ const eps=0.0001;
float x,y0,y1;
printf("Введите x>0: "); scanf("%f",&x);
y1=1;
do
{
y0=y1;
y1=0.5*(y0+x/y0);
}
while (fabs(y1-y0)>eps);
printf("sqrt(%.2f)=%f",x,y1);
}
5.3. Оператор цикла с параметром for
Оператор цикла с параметром имеет следующий формат:
for(<инициализация>;<выражение>;<модификации>)<оператор>
Инициализация используется для объявления и присвоения начальных значений величинам, используемым в цикле. В этой части можно записать несколько операторов, разделенных запятой.
Инициализация выполняется один раз в начале исполнения цикла.
Выражение определяет условие выполнения цикла. Если его результат, равен true, цикл выполняется. Цикл с параметром реализован как цикл с предусловием.
Модификации выполняются после каждой итерации цикла и служат обычно для изменения параметра цикла.
Любая из частей оператора for может быть опущена, но точки с запятой надо оставить на своих местах.
Примеры
1) for (k=1;k<n;k++) if (n%k==0) printf(”%i”,k);
2) for (int i=1,s=0;i<=100;i++) s+=i*i;
3) s=0; f=1;
for (i=1;i<=n;i++)
{ f=f*i; s=s+f; }
3) for (i=n;i>=1;i--) printf(”%i ”,i*i);
4) Ok=1;
for (n=2;n<=sqrt(a);i++)
if (a%n!=0) { Ok=0; break; }
Примеры решения задач
1) Каждое число Фибоначчи вычисляется как f1=1, f2=1, а начиная с третьего, по формуле fn=fn-1+fn-2. Составить программу, которая вычисляет последовательность n (n≥3) чисел Фибоначчи.
Обсуждение. Формула, по которой вычисляются числа Фибоначчи относится к рекуррентным формулам и для реализации данной формулы достаточно иметь три переменные: f=fn, f1=fn-1 и f2=fn-2. Подготовка к вычислению следующего элемента последовательности осуществляется присвоением f1=f2 и f2=f.
#include <stdio.h>;
void main()
{
int n, i;
unsigned long f,f1,f2;
printf("n="); scanf("%i",&n);
f1=1; f2=1; printf("%li %li ",f1,f2);
for (i=3;i<=n;i++)
{
f=f1+f2; printf("%li ",f);
f1=f2; f2=f;
}
printf("\n");
}
2) Определить, является ли заданное число n простым.
Обсуждение.
Простое
число
– натуральное число, большее единицы,
но не имеющее других делителей, кроме
самого себя и единицы. Из определения
следует, что, если заданное число делится
хотя бы один раз на одно из чисел
2,3,…,n-1,
то оно составное.
В действительности, достаточно проверить
делимость заданного числа на 2,3,…,n/2,
или даже на 2,3,…,(почему?).
#include <stdio.h>;
#include <math.h>;
void main()
{
int n, i, Ok;
printf("Введите n>1: "); scanf("%i",&n);
Ok=1;
for (i=2;i<=int(sqrt(n));i++)
if (n%i==0) { Ok=0; break; }
if (Ok) printf("Простое\n");
else printf("Составное\n");
}