Примеры использования операторо цикла

Пример 1. Напечатать таблицу кубов целых чисел от 1 до N <=20. Число N ввести с клавиатуры.

#include <stdio.h>

int main()

{

int i,N;

printf(“Введите целое N <=20 “);

scanf(“%d”,&N);

for (i=1; i<=N; i++)

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

return 0;

}

Пример 2. Вычислить значение y=sin(x) для x от 0 до 1, Dх=0.1. Печать результата производить для каждой второй точки (одну печатать, другую пропускать).

#include <stdio.h>

#include <math.h>

int main()

{

int i;

float x,y;

x=0.;

i=0;

while (x<=1.000001) // Если бы значение x сравнивалось с 1,

// то из-за ошибок округления

// при суммировании по формуле x=x+0.1

// условие x<=1. не было бы

// выполнено для x=1.

{

i++;

y= sin(x);

if (i%2== 1)

printf(“x=%f y=%f\n”,x,y);

x=x+0.1;

}

return 0;

}

Пример 3. Вычислить сумму N членов ряда ai = 1/i2, 1<= i <=N. Число N ввести с клавиатуры. Если в процессе вычислений очередной член ряда окажется меньше 10-3, то дальнейшие вычисления прекратить. Распечатать вычисленную сумму и количество просуммированных членов ряда.

1) Неверный вариант программы

#include <stdio.h>

int main()

{float s=0, eps=1.e-3;

int i,N;

printf(“Введите целое N “);

scanf(“%d”,&N);

for (i=1; i<=N; i++)

{if (1/(i*i)<eps) break;

s=s+1/(i*i);

}

printf(“s=%f, кол-во членов ряда =%d\n”,s,i);

return 0;

}

Пояснения.

В этом варианте программы две принципиальные ошибки. Первая касается работы цикла for. Переменной i присваивается очередное значение, и если условие продолжения цикла не выполняется, происходит выход из цикла. Затем последнее значение переменной i выводится на экран, но оно оказывается на 1 больше количества членов ряда. Вторая ошибка более тонкая. Переменная s описана как float, но инициализируется целым числом 0. Это не так страшно, хотя хороший стиль программирования исключает неявное приведение числовых значений к типу переменной. Но эта же ошибка при вычислении выражения 1/(i*i) приводит к фатальным последствиям, так как компилятор воспринимает это выражение как целое, и следовательно уже для второго члена ряда оно будет равным нулю. И хотя результат (0) будет приведен к типу float для сравнения с величиной eps, но положения это уже не спасет, и произойдет выход из цикла.

2) Верный вариант программы

#include <stdio.h>

int main()

{float s=0., eps=1.e-3, t;

int i,N;

printf(“Введите целое N “);

scanf(“%d”,&N);

for (i=1; i<=N; i++)

{

t=1.0/ (i*i);

if (t < eps) break;

s=s+t;

}

printf(“s=%f, кол-во членов ряда =%d\n”,s,i-1);

return 0;

}

Пояснения.

В выражении 1.0/ (i*i) вещественная константа 1.0 делится на целое. По правилам согласования типа данных целое i*i будет приведено к типу float, и результат деления будет правильным.

3) Другой способ записи этой программы

#include <stdio.h>

int main()

{float s, eps=1.e-3, t;

int i,N;

printf(“Введите целое N “);

scanf(“%d”,&N);

for (i=1, s=0, t=1; i<=N; i++, t=1.0/(i*i)) // Часть вычислений тела цикла for можно

// выполнять внутри скобок for

{

if (t < eps) break;

s=s+t;

}

printf(“s=%f, кол-во членов ряда =%d\n”,s,i-1);

return 0;

}

Домашнее задание

1. С помощью трех операторов цикла вычислить y=x/2, -3<=x<=0, Dx=0.3. Вывести все значения x и y

- в виде вертикальной таблицы;

- в виде горизонтальной таблицы.

2. С помощью трех операторов цикла вычислить

3*x-4 если x*x<0.3

y = x*x если 0.3<=x*x<0.7

10*x если x*x>=0.7

-10<=x<=10, Dx=0.2

3. Вычислить сумму 50 членов ряда ai = 1/i, i =1, 2, …. Если в процессе вычислений очередной член ряда окажется меньше epsilon, то дальнейшие вычисления прекратить. Число epsilon ввести с клавиатуры. Распечатать вычисленную сумму и количество просуммированных членов ряда.

Вычислительный зал

Домашнее задание занятия 1.

Дополнительные задачи

1. Вычислить

2. Найти абсолютную величину введенного числа. Число ввести в виде строки символов. Использовать условную операцию.

3. Ввести имя, величину суммы, положенной в банк и срок, на который деньги кладутся в банк. Вывести на экран все вводимые данные, рассчитать сумму, которую получит клиент банка при условии, что будет класть деньги на разные сроки. Учесть годовой процент инфляции – 10% и годовую процентную ставку банка, которая зависит от срока, на который положены деньги (на 1 год –4%, на 2 года – 5%, на большее число лет – 6%).

4. С помощью условной операции для заданных значений x и y вычислить

5. Перераспределите значения переменных x и y таким образом, чтобы переменная x получила меньшее из этих значений, а y - большее.

6. Заданы три числа a,b,c. Определить могут ли они быть сторонами треугольника, и если да, то определить его тип: равносторонний, равнобедренный, разносторонний.

7. Как известно, число делится на три тогда и только тогда, когда сумма его цифр делится на три. Проверьте этот признак на примере заданного трехзначного числа.

8. Определите, равна ли сумма крайних цифр четырехзначного числа сумме его средних цифр.

9. Расположить в порядке возрастания значения, полученные в результате вычисления следующих выражений: ln|abc|, ln|a+b+c|, a-b.

10. Определить, попадает ли точка с координатами (x,y) в внутрь круга радиуса r и центром в начале координат.

11. Пройдет ли кирпич со сторонами a,b,c, сквозь прямоугольное отверстие со сторонами r и s? Стороны отверстия должны быть параллельны граням кирпича.

12. Можно ли коробку размером a*b*c упаковать в посылку размером r*s*l? Углом укладывать нельзя.

13. Можно ли из круглой заготовки радиусом r вырезать две прямоугольные пластинки разме- ром a*b и c*d?

14. Два отрезка на плоскости заданы координатами своих концов. Определить, имеют ли отрезки общие точки - на одной горизонтали.

15. Составьте программу, реализующую эпизод применения компьютера в книжном магазине. Компьютер запрашивает стоимость книг, сумму денег, внесенную покупателем; если сдачи не требуется, печатает на экране “спасибо”; если денег внесено больше, то печатает ”возьмите сдачу” и указывает сумму сдачи; если денег не достаточно, то печатает об этом сообщение и указывает размер недостающей суммы.

16. Составьте программу, которая анализирует человека по возрасту и относит к одной из четырех групп: дошкольник, ученик, работник, пенсионер. Возраст вводится с клавиатуры.

17. Составьте программу, которая определяет входит ли введенная вами цифра в десятичную запись введенного вами трехзначного числа и печатающая сообщение, входит эта цифра в запись числа или нет.

18. Составьте программу, определяющую лежит ли точка с заданными координатами X,Y на окружности радиуса R с центром в начале координат.

19. Составьте программу, определяющую, пройдет ли график функции y=5*x2-7*x+2 через заданную точку с координатами a,b.

20. Составьте программу, проверяющую, верно ли утверждение, что введенное вами число является нечетным.

21. Составьте программу, проверяющую, верно ли утверждение, сто введенное вами число делится без остатка на 3.

22. Рис расфасован в два пакета. Вес первого – m кг, вес второго – n кг. Определяющую:

какой пакет тяжелей – первый или второй;

определите вес более тяжелого пакета.

23. Ввести с клавиатуры символ и вывести одно из следующих сообщений:

- фигурные скобки, если введено { или };

- круглые скобки, если введено (или);

- квадратные скобки, если введено [ или ];

- это не скобки, во всех остальных случаях.

24. С помощью трех операторов цикла вычислить

sin(3*x-4.1), если x*x<0.3

y = 0, если 0.3<=x*x<0.5

cos(3*x-4.1), если x*x>=0.5

0<=x<=2, Dx=0.1

25. Написать программу, которая вычисляет сумму всех чисел от 1 до N. Значение N вводится с клавиатуры.

26. Составить программу, которая вычисляет сумму квадратов всех нечетных чисел от 1 до N. Значение N вводится с клавиатуры.

27. Составить программу, которая вычисляет произведение всех четных чисел от 1 до N. Значе- ние N вводится с клавиатуры.

28. Ввести с клавиатуры целое число N. Вывести все делители этого числа

- в порядке возрастания;

- в порядке убывания.

29. Составить программу, которая выводит все простые числа из диапазона от 1 до N. Значение N вводится с клавиатуры.

30. Вычислить значение y=cos(x) для х от 0 до 2, Dх=0.1. Печать результата производить для каждой третьей точки (одну печатать, две пропускать).

31. Вычислить и напечатать значение y=cos(x) для х от 0, Dх=0.05. Вычисления прекратить при y >= z (z ввести с клавиатуры, -1<z<1). Напечатать количество вычисленных значений.

32. Вычислить сумму нечетных членов ряда ai = 1/i2, 1<= i <=N. Число N ввести с клавиатуры. Распечатать вычисленную сумму и количество просуммированных членов ряда.

33. Дано натуральное число n. Вычислить

S=1*2+2*3*4+3*4*5*6+…+n*(n+1)*(n+2)*…*2*n



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: