Студопедия — ПРАКТИЧЕСКАЯ ЧАСТЬ. Рассмотрим примеры программ с операторами циклов if, for и do – if.
Студопедия Главная Случайная страница Обратная связь

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

ПРАКТИЧЕСКАЯ ЧАСТЬ. Рассмотрим примеры программ с операторами циклов if, for и do – if.






Рассмотрим примеры программ с операторами циклов if, for и do – if.

Пример 1. Написать программу вывода на экран пользователя целых положительных чисел с помощью оператора if. Начальное и последнее число должно задаваться пользователем с клавиатуры.

Программный код решения примера

#include <stdio.h> #include <conio.h> int main(void) { int i, j = 0, n; printf("\n\t Enter the primary natural number: "); scanf_s("%d", &i); printf("\t Enter the last natural number: "); scanf_s("%d", &n); printf("\n\t The numbers are:"); if (i <= n) { printf("\n\t %3d", i); ++i; ++j; } printf("\n\t Total numbers: %d\n", j); printf("\n Press any key: "); getch(); return 0; }


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

Рис. 3.1. Результат выполнения программы с вводом целых чисел

В программе использована функция scanf_s(), принятая в MS Visual Studio. Применено инкрементирование переменных, принятое в языке С, а именно ++i или ++j означает, что переменные увеличиваются на единицу. При этом знаки «++» могут располагаться перед именем переменной или после. Отличие в том, что ++i – это значение переменной после увеличения, а i++ – сначала переменная имеет заданное значение, а потом происходит ее увеличение. Для переменных цикла обе формы равнозначны.

Условием цикла является то, что пока переменная i меньше или равна переменной n (предполагается, что n больше начального значения i), то будут выполняться действия (печать и увеличение переменной j), заложенные в теле цикла. Расчет выражения, заключенного в круглые скобки оператора, предназначен для проверки нестрогого неравенства переменной i по отношению к переменной n. Если это неравенство выполняется, то в теле цикла происходят печать и увеличение (инкрементирование) переменных i, j.

Задание 1

1. Предусмотрите ввод только отрицательных чисел.

2. Предусмотрите ввод только неотрицательных чисел.

3. Предусмотрите вывод чисел и их порядковые номера (т. е. в два столбца).

4. Предусмотрите вывод чисел на консоль в виде строки.

5. Предусмотрите ввод и вывод только вещественных чисел.

6. С учетом предыдущего пункта предусмотрите вывод чисел и их порядковые номера (т. е. в два столбца).

7. Рассмотрите варианты форм инкрементирования. Выполните вывод на консоль.

Пример 2. Написать программу посимвольного ввода предложения «Hello, world» и подсчитать число символов в нем (включая запятую и пробел).

Программный код решения примера

#include <stdio.h> #include <conio.h> int main(void) { int c, i = 0; printf("\n Enter symbol-by-symbol the offer \"Hello, world\",\n press twice Ctrl+Z and press Enter:\n"); printf("\t"); if ((c = getchar())!= EOF) { printf("\t"); c = getchar(); ++i; } printf("\n\t The number of characters: %d\n", i); printf("\n Press any key: "); getch(); return 0; }

В программе ввод символьных данных должен завершиться комбинацией клавиш Ctrl+Z, что будет соответствовать окончанию ввода (файла), т. е. EOF. Оператор цикла if будет выполняться до тех пор, пока не встретится так называемый конец файла EOF. В предложении \"Hello, world\";два обратных слэша включены для вывода на консоль двойных кавычек.

Функции printf("\t") осуществляют табуляцию вводимых символов. Подсчет их числа выполняется с помощью переменной цикла (счетчика) i, которая инкрементируется в теле цикла.

Заголовочный файл #include <conio.h>; служит для поддержания консольного ввода-вывода для функции getch (). Без него при компиляции программы могут выводиться предупреждения, хотя программа с предупреждениями работает.

Результат выполнения программы показан на рис. 3.2.

 

 


Рис. 3.2. Выполнение программы посимвольного ввода данных

Задание 2

1. Введите комментарии с помощью символов // и /* ¼ */.

2. В качестве вводимых символов используйте буквы своей фамилии (латиницу). В отчет вставьте полученный результат.

3. В качестве вводимых символов используйте свои фамилию и имя. В отчет вставьте полученный результат.

4. Осуществите вывод своей фамилии и имени по главной диагонали дисплея.

5. В качестве символов введите числа от 1 до (2 + Х), где Х – номер компьютера, на котором выполняется лабораторная работа. В отчет вставьте полученный результат.

6. Выполните дублирование символов с помощью функции putchar(), которая отображает символы на экране пользователя.

Примечание. Прототип функции putchar() имеет следующий вид:

#include <stdio.h>;

int putchar (int ch);

Пример 3. Написать программу табличного вывода строчных букв латинского алфавита и их десятичных кодов с помощью оператора цикла for.

Как известно, в латинском алфавите 26 букв. Поэтому можно создать массив символов этих букв. С учетом того, что char представляет собой целочисленный тип, то можно обойтись без создания массива.

Программный код решения примера

#include <stdio.h> #include <conio.h> int main(void) { int j = 1; char a = 'a'; printf("\n Table code characters:\n"); for (; a <= 'z'; ++a) printf("\n %4d) %2c: code%4d", j++, a, a); printf("\n\n Press any key: "); getch(); return 0; }


Результат выполнения программы представлен на рис. 3.3.

Рис. 3.3. Таблица десятичных кодов букв латинского алфавита

Форматированный вывод данных предусматривает выравнивание по правому краю, для чего предусматриваются числовые спецификаторы типа %4d и %2c для целых чисел и символов в функции printf().

Задание 3

1. Примените префиксную форму инкрементирования переменной j.

2. Инкрементирование переменной j создайте отдельно в теле цикла.

3. Инициализацию переменной j начните с нуля. Результат выполнения программы должен быть тот же самый, что и в приведенной программе.

4. Напишите программу для вывода кодов букв из заданного диапазона на усмотрение пользователя, например от ' j ' до ' w '.

5. В цикле for заполните все поля.

6. Напишите программу для вывода кодов букв латинского алфавита прописных и строчных букв в одной таблице.

7. Выведите буквы своей фамилии и коды этих букв.

Пример 4. Написать программу расчета значений функции распределения интервалов времени в потоке Эрланга 4-го порядка (k = 4) с параметром l = 2.3 на отрезке времени от 0 до 5 (условных единиц) с шагом 0.2:

Программный код решения примера

#include <stdio.h> #include <conio.h> #include <math.h> int main(void) { int j, f, k = 4; double F, Lt, s, t = 0.0, Tend = 5.0; float L = 2.3F; printf("\n Erlang function of order %d, Lambda = %1.2f:\n\n", k, L); for (; t <= Tend; t += 0.2) { s = 0.0; f = 1; Lt = 1.0; for (j = 1; j <= k; ++j) { f *= j; Lt *= (L*t); s += (Lt/f)*exp(-L*t); } F = 1 - exp(-L*t) - s; printf("\t %lg\n", F); } printf("\n\n Press any key: "); getch(); return 0; }

В программе использованы вложенные циклы for. Применены специфические условия изменения переменных:

t += 0.2; /* t = t + 0.2; */

f *= j; /* f = f * j; */

Lt *= (L*t); /* Lt = Lt * (L*t); */

Вычисление факториала выполнено с помощью произведения и выделения отдельного слагаемого суммы, когда рассчитывается 0!.

В программе также предусмотрено накопление суммы для каждого шага времени t. Для расчета экспоненты в заголовок программы включена библиотека математических функций #include <math.h>;.

Результат выполнения программы представлен на рис. 3.4.


Рис. 3.4. Расчет функции распределения интервалов времени в потоке

Эрланга 4-го порядка

Задание 4

1. В заголовке внешнего цикла for добавьте первое поле и устраните третье поле.

2. Предусмотрите вывод количества значений рассчитанной функции распределения.

3. Предусмотрите ввод параметров программы, а именно: порядок потока Эрланга k, параметр l, конечную величину временного интервала, шаг по времени.

Пример 5. Вычислить с точностью до «машинного нуля» значение суммы числового ряда:

Программный код решения примера

#include <stdio.h> #include <conio.h> int main(void){ double denom; double sum1 = 0.0, sum2 = 0.0; int k = 1; denom = k * (k + 1) * (k + 2); // знаменатель ряда do { sum1 = sum2; sum2 += 1.0 / denom; denom = denom / k * (k + 3); ++k; } if (sum1 < sum2); printf("\n\t The amount of numerical series: %lg\n", sum2); printf("\n Press any key: "); getch(); return 0; }

В приведенной программе сумма вычисляется как значение переменной sum2. Ее предыдущее значение сохраняется в переменной sum1. Так как приближенное значение с добавлением неотрицательных слагаемых не уменьшается, условием продолжения цикла служит отношение sum1 < sum2 (поскольку растет знаменатель denom). Когда при добавлении очередного слагаемого значение суммы остается неизменным (за счет конечной разрядной сетки для представления вещественных чисел), нарушается условие sum1 < sum2 и цикл прекращается. Таким образом, конечность разрядной сетки представления вещественных чисел в компьютере определяет собой «машинный нуль».


Инициализация знаменателя сделана до начала цикла. Форматный вывод результата выполнен с помощью спецификатора символа l.

Результат выполнения программы показан на рис. 3.5.

Рис. 3.5. Результат подсчета суммы бесконечного ряда

Задание 5

1. Подсчитайте число итераций цикла для подсчета суммы ряда.

2. Напишите программу с нулевой инициализацией переменной k.

3. Напишите условие «загрубения» результата подсчета суммы ряда.

4. В программе примените тип float вместо типа double. Проанализируйте результат.

5. Вместо оператора цикла do – if примените иной оператор цикла.

Пример 6. Произвести реверс цифр заданного целого числа, вводимого с клавиатуры пользователем.

Задача заключается в том, чтобы, например, число 123 переписать как 321.

Программный код решения примера

#include <stdio.h> #include <conio.h> int main(void) { long int x, r; printf("\n Enter an integer: "); scanf_s("%c", &x); printf("\n Reverse-digit number %c:\n\n\t", x); do { r = x % 10; printf(" %c", r); x = x / 10; } if (x!= 0); printf("\n\n Press any key: "); getch(); return 0; }

В программе применена операция арифметическая операция деления по модулю, которая имеет символ процента, т. е. «%». Любой остаток, получающийся в результате деления целых чисел, будет отброшен [2]. В шкале старшинства оператор деления по модулю имеет приоритет, равный приоритету операторов умножения и деления. Переменные, используемые в программе, объявлены как длинные числа, поэтому применен тип long int (или long). В некоторых компиляторах имеются отличия между типами int и long int в смысле максимально поддерживаемого значения числа.


Результат выполнения программы показан на рис. 3.6.

Рис. 3.6. Результат программы по реверсу числа

Задание 6

1. Предусмотрите подсчет итераций заданного цикла.

2. Напишите программу по реверсу числа с оператором цикла if. Протестируйте обе программы, в том числе по вводу числа 0.

3. Определите максимальное число вида 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 = 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.


Рис. 3.7. Пример вывода горки букв

Задание 7

1. Напишите программу на основе только оператора цикла for по выводу перевернутой горки букв, а также «левой» и «правой» горки.

2. Напишите программу на основе только оператора цикла for по выводу «ромба» букв, относительно введенной буквы.

3. Напишите программу по выводу горки букв только на основе оператора цикла if.

 

 

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

1. Как организуются составные операторы циклов в языке С?

2. Как организуются вложенные циклы в языке С?

3. В каких случаях может произойти зацикливание при использовании оператора цикла с предусловием?

4. В каких случаях может произойти зацикливание при использовании оператора цикла с постусловием?

5. Сколько условий требуется для работы оператора цикла с параметром?

6. Чем отличаются префиксное и постфиксное инкрементирование и декрементирование?

7. Каково различие в операторах цикла между префиксным и постфиксным инкрементированием?

8. Сколько операторов отношения в языке С? Перечислите их.

9. Как реализуется взаимозаменяемость операторов цикла if и for?

10. В чем сходство и различие между циклами с предусловием и с постусловием?


 







Дата добавления: 2015-09-06; просмотров: 1115. Нарушение авторских прав; Мы поможем в написании вашей работы!



Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

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

Сосудистый шов (ручной Карреля, механический шов). Операции при ранениях крупных сосудов 1912 г., Каррель – впервые предложил методику сосудистого шва. Сосудистый шов применяется для восстановления магистрального кровотока при лечении...

Трамадол (Маброн, Плазадол, Трамал, Трамалин) Групповая принадлежность · Наркотический анальгетик со смешанным механизмом действия, агонист опиоидных рецепторов...

Мелоксикам (Мовалис) Групповая принадлежность · Нестероидное противовоспалительное средство, преимущественно селективный обратимый ингибитор циклооксигеназы (ЦОГ-2)...

Индекс гингивита (PMA) (Schour, Massler, 1948) Для оценки тяжести гингивита (а в последующем и ре­гистрации динамики процесса) используют папиллярно-маргинально-альвеолярный индекс (РМА)...

Методика исследования периферических лимфатических узлов. Исследование периферических лимфатических узлов производится с помощью осмотра и пальпации...

Роль органов чувств в ориентировке слепых Процесс ориентации протекает на основе совместной, интегративной деятельности сохранных анализаторов, каждый из которых при определенных объективных условиях может выступать как ведущий...

Studopedia.info - Студопедия - 2014-2024 год . (0.008 сек.) русская версия | украинская версия