ПРАКТИКУМ по программированию на языке С l l l l Линейные вычислительные процессы Цикл For, Do While, While Ветвления. Операторы If, If-else, Switch Функции. Передача параметров в функцию Массивы. Действия над массивами. Массивы строк символов Структуры. Массивы структур Библиотечные функции для работы с файлами 02. 07. 04 Вардомацкая Е. Ю. 1
Линейные вычислительные процессы Контрольные вопросы: Упражнения по программированию: Задание 1 l Задание 2 l Задание 3 l l Упражнение 1 Упражнение 2 Упражнение 3 Назад 2
Задание 1 l Предположим, что все переменные имеют тип int. Найти значение каждой из следующих переменных: l x = (2 + 3) * 6; l x = (12 + 6)/2 * 3; l y = x =(2 + 3)/4; l y = 3 + 2*(x = 7/2); Решение 3
Задание 1(решение) l 30 l 27 l x=1 y=1 l x=3 y=9 Назад 4
Задание 2 l Предположим, что все переменные имеют тип int. Найти значение каждой из следующих переменных: l x = (int) 3. 8 + 3. 3; l x = (2+3)*10. 5; l x = 3/5 * 22. 0; l x = 22. 0 *3/5; Решение 5
Задание 2 (решение) l 6 (3 +3. 3) l 52 l 0 (0 * 22) l 13 (66. 0 / 5) Назад 6
Задание 3 Приведенная ниже программа содержит ошибки. Найдите их. (1) int main(void) (2){ (3) int i =1, (4) float n; (5) printf(“Attention! Row of …… n”); (6) while (i < 30) n = 1/i; printf(“ %f”, n); (9) printf(“That’s alln’); (10) return ; (11)} Решение l 7
Задание 3(решение) include
Упражнения по программированию: 1. 2. 3. Выяснить, чем деление целых чисел отличается от деления чисел с плавающей точкой. Составить программу, которая запрашивает ввести число дней, а затем пересчитывает эту величину в недели и дни. Определить, сколько ПК можно купить на имеющуюся сумму $ и какая сумма останется (всего, всего с остатком, остаток). Назад 9
Упражнение 1 (решение) #include
Упражнение 1 (пояснение) Результат деления целых чисел не округляется до ближайшего целого, а подвергается усечению, т. е. отбрасывается вся дробная часть. Когда смешиваются целые числа и числа с плавающей точкой, результат будет таким же, как если бы оба операнда были с числами с плавающей точкой. Когда какое-либо вычисление производится над числами двух указанных типов, прежде чем выполнить деление, целое число преобразуется в число с плавающей точкой. Назад 11
Упражнение 2 (решение) # include
Упражнение 3 (решение) # include
Цикл While, Do While, For Контрольные вопросы: l l l l Задание 1 Задание 2 Задание 3 Задание 4 Задание 5 Задание 6 Задание 7 Упражнения по программированию: l l l l Упражнение 1 Упражнение 2 Упражнение 3 Упражнение 4 Упражнение 5 Упражнение 6 Упражнение 7 Назад 14
Задание 1 l Найти значение переменной q в каждой строке: l l l int q = 2; q += 5; q *= 10; q -=6; q /= 8; Решение 15
Задание 1 (решение) l 2 l 70 l 64 l 8 Назад 16
Задание 2 l Какие выходные данные будут получены в результате выполнения следующего цикла? l l for ( value = 36; value > 0; value /=2) printf(“%3 d”, value); Решение 17
Задание 2 (решение) l Результат: 36 18 9 4 2 1 Назад 18
Задание 3 l Записать выражение каждого из следующих проверяемых условий: l x больше 5; l scanf () делает неудачную попытку прочесть одно значение типа double ( с именем x); l x имеет значение 5; l scanf () удачно считывает только одно целое число; l x не равно 5; l x больше или равно 20. Решение 19
Задание 3 (решение) l (x>5) l (scanf(“%lf”, &x) !=1) l (x==5) l (scanf(“%d”, &x) ==1) l (x != 5) l (x >= 20). Назад 20
Задание 4 l Найдите ошибки в программе: l # include
Задание 4 (решение) l (4) /* list[10] */ l (5) /* везде «; » i изменяется от 0 до 9*/ l (8) /* везде «; » , д. быть j <= I*/ l (12) /* добавить return 0; Назад 22
Задание 5 l Что выведет на печать следующая программа? l # include
Задание 5 (решение) Результат: Hello! Bye! Bye! Назад 24
Задание 6 l Что выведет на печать следующая программа? l # include
Задание 6 (решение) Результат: ACGM Назад 26
Задание 7 l Что выведет на печать следующая программа? l # include
Задание 7 (решение) Это неудачно продуманная программа. Поскольку в операторе while не используются фигурные скобки и в цикл включен только оператор printf(), программа будет выводить на экран сообщение COMPUTER IS MY до тех пор, пока выполнение программы не будет прервано. Назад 28
Упражнения по программированию: 1. Написать программу, которая запрашивает 2 числа с плавающей точкой и печатает величину их разности, деленную на их произведение. Программа должна производить обработку пар вводимых чисел до тех пор, пока не будет введено нечисловое значение. 2. Написать программу, которая подсчитывает, какую сумму денег вы получите за n дней, если в первый день Вы получаете $1, во второй - $4, в третий - $9 и т. д. Назад 29
Упражнения по программированию (продолжение): 3. Написать программу, которая выводила бы следующий результат: 1. 2. 3. 4. 5. 6. 4. ABCDEF ABCDE ABCD ABC AB A Написать программу, которая возводила бы вещественные числа в целую степень. Организовать попарный ввод чисел, до тех пор, пока не будет введено нечисловое значение. Назад 30
Упражнения по программированию (продолжение): 5. Написать программу, рассчитывающую полета стрелы (задача Зенона). полное время 6. Написать программу, заменяющую каждый символ во входной последовательности на следующий за ним в таблице ASCII кодов. Пробелы сохранить (2 варианта: с проверкой на пробел и с проверкой на символ). 7. Написать программу, переворачивающую оставляя результат в строке S. строку S, Назад 31
Упражнение 1 (решение): # include
Упражнение 2 (решение): # include
Упражнение 3 (решение): # include
Упражнение 4 (решение): /* возводит числа в целую степень*/ # include
Упражнение 5 (решение): /*zeno. c - - сумма последовательности*/ #include
Упражнение 6 (решение I варианта): #include
Упражнение 6 (решение II варианта): #include
Упражнение 7 (решение): #include
Ветвления. Оператор If, If-else, Switch Контрольные вопросы: l l l Задание 1 Задание 2 Задание 3 Задание 4 Задание 5 Задание 6 Упражнения по программированию: l l l Упражнение 1 Упражнение 2 Упражнение 3 Упражнение 4 Упражнение 5 Назад 40
Задание 1 l Определить, какие из примеров истинны, а какие ложны. l l l 100 > 3 && ‘a’ > ‘c’ 100 > 3 || ‘a’ > ‘c’ ! (100 > 3). Назад 41
Задание 2 l Построить выражения, формулирующие следующие условия: l l Значение number больше или равно 1, но меньше 9. ch не является символом q или k. . Значение number находится в диапазоне от 1 до 9, но не равно 5. number не попадает в диапазон от1 до 9. Назад 42
Задание 3 l Каковы числовые значения каждого из следующих выражений? l 5 > 2. l 3 + 4 > 2 && 3 < 2. l x >= y || y > x l d = 5 + (6 > 2) l ‘x’ > ‘Т’ ? 10 : 5 l x > y ? y > x : x > y. Назад 43
Задание 4 l Что напечатает следующая программа? l l l l # include
Задание 4 (решение): Результат: *#%*#%$#%*#%*#%$$%*#%*$% Назад 45
Задание 5 l Что напечатает следующая программа? l l l l l #include
Задание 6 l Что напечатает следующая программа? l #include
Упражнения по программированию: 1. Составить программу расчета платы за электроэнергию в соответствии с установленными тарифами: l l l первые 240 квт/ч: следующие 300 квт/ч свыше 540 квт/ч $0. 11439 за 1 квт/ч $0, 13290 за 1 квт/ч $0. 14022 за 1 квт/ч. 2. Составить программу, которая производит подсчет числа символов, отличных от одинарных и двойных кавычек, которые содержатся во входном предложении. (7. 6, Ст. Пр. ). 3. Подсчитать среднее значение результатов партий в гольф. Вывести среднее, максимальное и минимальное значение. Результаты должны быть в диапазоне от 0, 0 до 100, 0. (7. 9, Ст. Пр. ). Назад 48
Упражнения по программированию (продолжение): 4. Вычислить площадь прямоугольника (треугольника и т. п. ), используя break для проверки правильности ввода данных (7. 10, Ст. Пр. ). 5. Составить программу, считывающую с клавиатуры символ и выводящую название животного, которое начинается с этой буквы. (з. 7. 11, стр. 144, Ст. Пр. ) Назад 49
Упражнение 1 (решение): #include
Упражнение 2 (решение): /* подсчет числа символов, отличных от один. и дв. кавычек*/ #include
Упражнение 3 (решение): /* использование оператора continue, чтобы пропустить часть цикла*/ # include
Упражнение 3 (продолжение решения): { if (s < MIN || s > MAX) { printf("%0. 1 f not rightn", s); continue; } printf("Right %0. 1 f: n", s); min = (s < min) ? s : min; /* определяет min и max из введ. знач*/ max = (s > max) ? s : max; total +=s; n++; } if (n>0) { printf("Srednee %d rez. = %0. 1 f. n", n, total/n); printf("low = %0. 1 f, high = %0. 1 fn", min, max); } else printf("All date not truen"); return 0; } Назад 53
Упражнение 4 (решение): # include
Упражнение 5 (решение): # include
Упражнение 5 (продолжение решения): case 'b': printf("barann"); break; case 's': printf("cobakan"); break; case 'd': printf("dinozavrn"); break; default: printf("It is a difficult taskn"); } Продолжение… 56
Упражнение 5 (продолжение решения): else printf("Only islower litersn"); while (getchar() !='n') continue; /*ост. часть строки игнорируется*/ printf("Next litera or # for exit? n"); } printf("Hi!n"); return 0; } Результат: 57
Результат: Your. litera or # for exit a akula Your. litera or # for exit s sobska Your. litera or # for exit f It is a difficult task Next litera or # for exit 3 Only islower liters Next litera or # for exit # Hi! Назад 58
Функции. Передача параметров в функцию. Упражнения по программированию: Упражнение 1 l Упражнение 2 l Упражнение 3 l Упражнение 4 l Упражнение 5 l Упражнение 6 Упражнения для самостоятельного решения: l Упражнение 1 l Упражнение 2 l Назад 59
Упражнения по программированию: Передача параметров из вызываемой функции в вызывающую. 1. Составить функцию, которая возвращает меньший из своих аргументов. Передача информации из вызывающей функции в вызываемую Создать функцию n_char, печатающую строку, состоящую из звездочек или заданного числа пробелов. Количество * или пробелов, которые нужно напечатать, будем передавать в качестве параметра из главной функции main в функцию n_char. Результатом должна быть адресная строка: ……………………………………… VGTU 74 MOSCOW AVENU VITEBSK, 210035 *************************************** 2. Назад 60
Упражнения по программированию (продолжение): Составить функцию, вычисляющую факториал числа. 4. Составить функцию, вычисляющую факториал числа, используя рекурсию. 5. Создать функцию обмена значениями (использовать указатели). 6. Изменить программу, возводящую числа типа double в положительную целую степень (см. пз. 2 -3 з. 4) так, чтобы она правильно обрабатывала отрицательные показатели степени. Встройте в нее функцию, которая любой степени числа 0 присваивала бы значение 0, а любому числу в степени 0 присваивала бы значение 1. Исходная программа… 3. Назад 61
Исходная программа… # include
Упражнения для самостоятельного решения: 1. Создайте функцию, которая заменяет содержимое двух переменных их суммой и разностью. 2. Создайте функцию, которая принимает три аргумента: символ и два целых значения. Символ должен быть выведен. Первое целочисленное значение указывает, сколько раз символ должен быть напечатан в строке, а второе целочисленное значение указывает подлежащее печати число строк. Создайте программу, в которой используется такая функция. Назад 63
Упражнение 1 (решение): /* листинг 9. 3, стр. 175 - выводит меньшее из двух значений ev 1 и ev 2*/ # include
Упражнение 1 (продолжение решения): { rez = imin(ev 1, ev 2); printf("small in %d and %d is %dn", ev 1, ev 2, rez); printf("vv. 2 chisla, q for exit: n"); } return 0; } int imin(int n, int m) Продолжение… 65
Упражнение 1 (продолжение решения): { int min; if (n < m) min = n; else min = m; return min; } Пояснение к решению: Здесь ключевое слово return возвращает значение min в функцию main. Назад 66
Упражнение 2 (решение): /* z 9_2, стр. 173 ф-ция выводит символ '*' или ‘ ‘*/ # include
Упражнение 2 (продолжение решения): { int spaces; n_char('*', LIMIT); putchar('n'); n_char(SPACE, 30); printf("%sn", NAME); spaces = (65 - strlen(ADDRESS))/2; n_char(SPACE, spaces); printf("%sn", ADDRESS); n_char(SPACE, Продолжение… 68
Упражнение 2 (продолжение решения): (65 - strlen(PLACE))/2); printf("%sn", PLACE); n_char('*', LIMIT); putchar('n'); return 0; } void n_char(char ch, int num) { int count; for(count = 1; count <=num; count++) putchar(ch); } Назад 69
Упражнение 3 (решение): /* z. 9. 7 факториал*/ # include
Упражнение 3 (продолжение решения): else printf("%d factorial = %ldn", num, fact(num)); printf("vv. chislo 0 - 16 or q for exitn"); } return 0; } long fact(int n) { long ans; for (ans = 1; n > 1; n --) ans *=n; return ans; } Назад 71
Упражнение 4 (решение): /* z. 9. 8 факториал - рекурсия*/ # include
Упражнение 4 (продолжение решения): } return 0; } long rfact(int n) { long ans; if (n > 0) ans = n * rfact(n-1); else ans = 1; return ans; } Назад 73
Упражнение 5 (решение): /* использование указателей*/ # include