Организация циклов в языке С
Задание 5
- Подсчитайте число итераций цикла для подсчета суммы ряда.
- Напишите программу с нулевой инициализацией переменной k.
- Напишите условие "загрубения" результата подсчета суммы ряда.
- В программе примените тип float вместо типа double. Проанализируйте результат.
- Вместо оператора цикла do–while примените иной оператор цикла.
Пример 6. Произведите реверс цифр заданного целого числа, вводимого с клавиатуры пользователем.
Задача заключается в том, чтобы, например, число 123 переписать как 321.
Программный код решения примера:
#include <stdio.h>
#include <conio.h>
int main(void)
{
long int x, r;
printf("\n Enter an integer: ");
scanf_s("%ld", &x);
printf("\n Reverse-digit number %ld:\n\n\t", x);
do {
r = x % 10;
printf(" %ld", r);
x = x / 10;
} while ( x != 0);
printf("\n\n Press any key: ");
_getch();
return 0;
}В программе применена операция арифметическая операция деления по модулю, которая имеет символ процента, т.е. "%". Любой остаток, получающийся в результате деления целых чисел, будет отброшен [3.2]. В шкале старшинства оператор деления по модулю имеет приоритет, равный приоритету операторов умножения и деления. Переменные, используемые в программе, объявлены как длинные числа, поэтому применен тип long int (или long ). В некоторых компиляторах имеются отличия между типами int и long int в смысле максимально поддерживаемого значения числа.
Результат выполнения программы показан на рис. 3.6.
Задание 6
- Предусмотрите подсчет итераций заданного цикла.
- Напишите программу по реверсу числа с оператором цикла while. Протестируйте обе программы, в том числе по вводу числа 0.
- Определите максимальное число вида 123...987..., для которого еще можно применить тип long int.
Пример 7. На основе только оператора цикла for напишите программу по выводу "горки" заглавных букв, симметрично убывающих к букве, введенной пользователем. Также на основе оператора цикла for предусмотрите защиту от неправильного ввода.
Программный код решения примера:
#include <stdio.h>
#include <conio.h>
int main (void) {
int p = 0;
char ch = 'A';
char i, j, k, ch2, kk, chA;
chA = ch;
printf("\n Enter a capital letter between \"A\" and \"S\": ");
scanf_s("%c", &ch2, sizeof(char));
for(chA -= 1; chA >= ch2; chA-- )
{
printf("\n Error! Press any key: ");
_getch();
return -1;
}
for (kk = 'S'+1; kk <= ch2; kk++)
{
printf("\n Error! Press any key: ");
_getch();
return -1;
}
k = ch2;
for ( kk = ch; kk <= k; kk++)
{
printf("\n ");
for (ch2 = ch; ch2 <= k-p ; ch2++)
printf(" ");
for (j = ch; j <= kk ; j++)
printf(" %c", j);
for (i = kk; i > ch; i-- )
printf(" %c", i-1);
p++;
}
printf("\n\n Press any key: ");
_getch();
return 0;
}Пример выполнения программы показан на рис. 3.7.
Задание 7
- Напишите программу на основе только оператора цикла for по выводу перевернутой горки букв, а также "левой" и "правой" горки.
- Напишите программу на основе только оператора цикла for по выводу "ромба" букв, относительно введенной буквы.
- Напишите программу по выводу горки букв только на основе оператора цикла while.
Контрольные вопросы
- Как организуются составные операторы циклов в языке С?
- Как организуются вложенные циклы в языке С?
- В каких случаях может произойти зацикливание при использовании оператора цикла с предусловием?
- В каких случаях может произойти зацикливание при использовании оператора цикла с постусловием?
- Сколько условий требуется для работы оператора цикла с параметром?
- Чем отличаются префиксное и постфиксное инкрементирование и декрементирование?
- Какое различие в операторах цикла между префиксным и постфиксным инкрементированием?
- Сколько операторов отношения в языке С? Перечислите их.
- Как реализуется взаимозаменяемость операторов цикла while и for?
- В чем сходство и различие между циклами с предусловием и с постусловием?

