Скачать презентацию ПРАКТИКУМ по программированию на языке С l l Скачать презентацию ПРАКТИКУМ по программированию на языке С l l

PR.ppt

  • Количество слайдов: 74

ПРАКТИКУМ по программированию на языке С l l l l Линейные вычислительные процессы Цикл ПРАКТИКУМ по программированию на языке С l l l l Линейные вычислительные процессы Цикл For, Do While, While Ветвления. Операторы If, If-else, Switch Функции. Передача параметров в функцию Массивы. Действия над массивами. Массивы строк символов Структуры. Массивы структур Библиотечные функции для работы с файлами 02. 07. 04 Вардомацкая Е. Ю. 1

Линейные вычислительные процессы Контрольные вопросы: Упражнения по программированию: Задание 1 l Задание 2 l Линейные вычислительные процессы Контрольные вопросы: Упражнения по программированию: Задание 1 l Задание 2 l Задание 3 l l Упражнение 1 Упражнение 2 Упражнение 3 Назад 2

Задание 1 l Предположим, что все переменные имеют тип int. Найти значение каждой из Задание 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 Задание 1(решение) l 30 l 27 l x=1 y=1 l x=3 y=9 Назад 4

Задание 2 l Предположим, что все переменные имеют тип int. Найти значение каждой из Задание 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 * Задание 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) Задание 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 <stdio. h> (3) ; (6) – оператор while запускает бесконечный цикл, Задание 3(решение) include (3) ; (6) – оператор while запускает бесконечный цикл, т. к. i остается всегда равным 1 и всегда < 30. Нужно while (i++<30); (6) – (8) – добавление отступов подразумевает, что строки 7 и 8 формируют единый блок, т. е { (7) (8) }. (7) – т. к. 1 и i имеют тип integer результатом будет 1, если i равно 1, и 0, для всех больших величин. Использование n = 1. 0/i; привело бы к тому, что перед делением i необходимо было бы преобразовать в величину с плавающей точкой, и результат был бы ненулевым. (8)– пропущен символ n перевода строки, поэтому все Назад числа будут печататься в одну строку. (9)- должен быть return 0. 8

Упражнения по программированию: 1. 2. 3. Выяснить, чем деление целых чисел отличается от деления Упражнения по программированию: 1. 2. 3. Выяснить, чем деление целых чисел отличается от деления чисел с плавающей точкой. Составить программу, которая запрашивает ввести число дней, а затем пересчитывает эту величину в недели и дни. Определить, сколько ПК можно купить на имеющуюся сумму $ и какая сумма останется (всего, всего с остатком, остаток). Назад 9

Упражнение 1 (решение) #include <stdio. h> int main(void) { printf( Упражнение 1 (решение) #include int main(void) { printf("divizion printf("divizion return 0; } of of of int 5/4=%dn", 5/4); int 6/3=%dn", 6/3); int 7/4=%dn", 7/4); float 7. /4. =%1. 2 fn", 7. /4. ); union 7. /4=%1. 2 fn", 7. /4); Результат: divizion of int 5/4= 1 divizion of int 6/3= 2 divizion of int 7/4= 1 divizion of float 7. /4. = 1, 75 divizion of union 7. /4=1, 75 Пояснения к решению 10

Упражнение 1 (пояснение) Результат деления целых чисел не округляется до ближайшего целого, а подвергается Упражнение 1 (пояснение) Результат деления целых чисел не округляется до ближайшего целого, а подвергается усечению, т. е. отбрасывается вся дробная часть. Когда смешиваются целые числа и числа с плавающей точкой, результат будет таким же, как если бы оба операнда были с числами с плавающей точкой. Когда какое-либо вычисление производится над числами двух указанных типов, прежде чем выполнить деление, целое число преобразуется в число с плавающей точкой. Назад 11

Упражнение 2 (решение) # include <stdio. h> int main(void) { int days, weeks, day; Упражнение 2 (решение) # include int main(void) { int days, weeks, day; printf("t Please, your_dn"); scanf("%d", &days); weeks = days/7; day = days % 7; printf("t In %d your_d - %d weeks and %d dayn", days, weeks, day); return 0; } Результат: In 18 your_d - 2 weeks and 4 day. Назад 12

Упражнение 3 (решение) # include <stdio. h> main(void) { int a, b, kol, ost; Упражнение 3 (решение) # include main(void) { int a, b, kol, ost; float vs; printf("nta enter amount of money: "); scanf("%d", &a); printf("nta enter a price of one PC: "); scanf("%d", &b); kol=a/b; ost=a%b; vs=(float)a/b; printf("nta kol=%d", kol); printf("nta vsego=%. 2 f", vs); printf("nta ost=%dn", ost); Назад return 0; } 13

Цикл While, Do While, For Контрольные вопросы: l l l l Задание 1 Задание Цикл 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 Задание 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 Задание 1 (решение) l 2 l 70 l 64 l 8 Назад 16

Задание 2 l Какие выходные данные будут получены в результате выполнения следующего цикла? l Задание 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 Задание 2 (решение) l Результат: 36 18 9 4 2 1 Назад 18

Задание 3 l Записать выражение каждого из следующих проверяемых условий: l x больше 5; Задание 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) Задание 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 <stdio. h> l int Задание 4 l Найдите ошибки в программе: l # include l int main (void) l (3){ l (4)int i, j, list(10); l (5)for (i = 1, i <=10, i ++) l (6){ l (7) list[i] = 2*i + 3; l (8) for (j = 1, j >=I, j++) l (9) printf(“ %d”, list[j]); l (10) printf(“n”); l (11)} Решение 21

Задание 4 (решение) l (4) /* list[10] */ l (5) /* везде «; » Задание 4 (решение) l (4) /* list[10] */ l (5) /* везде «; » i изменяется от 0 до 9*/ l (8) /* везде «; » , д. быть j <= I*/ l (12) /* добавить return 0; Назад 22

Задание 5 l Что выведет на печать следующая программа? l # include <stdio. h> Задание 5 l Что выведет на печать следующая программа? l # include l int main (void) l { l int i = 0; l while (++i < 4) l printf(“Hello!”); l do l printf(“Bye!”); l while (i++ < 8); l return 0; l } Решение 23

Задание 5 (решение) Результат: Hello! Bye! Bye! Назад 24 Задание 5 (решение) Результат: Hello! Bye! Bye! Назад 24

Задание 6 l Что выведет на печать следующая программа? l # include <stdio. h> Задание 6 l Что выведет на печать следующая программа? l # include l int main (void) l { l int i = 0; l char ch; l for ( i = 0, ch = ‘A’; i < 4; i ++, ch +=2*i) l printf(“%c”, ch); l return 0; l } Решение 25

Задание 6 (решение) Результат: ACGM Назад 26 Задание 6 (решение) Результат: ACGM Назад 26

Задание 7 l Что выведет на печать следующая программа? l # include <stdio. h> Задание 7 l Что выведет на печать следующая программа? l # include l # define MESG “COMPUTER IS MY” l int main (void) l { l int n = 0; l while ( n < 5 ) l printf(“%s%, “MESG”); l n ++; l printf(“That’s alln”); l return 0; l } Решение 27

Задание 7 (решение) Это неудачно продуманная программа. Поскольку в операторе while не используются фигурные Задание 7 (решение) Это неудачно продуманная программа. Поскольку в операторе while не используются фигурные скобки и в цикл включен только оператор printf(), программа будет выводить на экран сообщение COMPUTER IS MY до тех пор, пока выполнение программы не будет прервано. Назад 28

Упражнения по программированию: 1. Написать программу, которая запрашивает 2 числа с плавающей точкой и Упражнения по программированию: 1. Написать программу, которая запрашивает 2 числа с плавающей точкой и печатает величину их разности, деленную на их произведение. Программа должна производить обработку пар вводимых чисел до тех пор, пока не будет введено нечисловое значение. 2. Написать программу, которая подсчитывает, какую сумму денег вы получите за n дней, если в первый день Вы получаете $1, во второй - $4, в третий - $9 и т. д. Назад 29

Упражнения по программированию (продолжение): 3. Написать программу, которая выводила бы следующий результат: 1. 2. Упражнения по программированию (продолжение): 3. Написать программу, которая выводила бы следующий результат: 1. 2. 3. 4. 5. 6. 4. ABCDEF ABCDE ABCD ABC AB A Написать программу, которая возводила бы вещественные числа в целую степень. Организовать попарный ввод чисел, до тех пор, пока не будет введено нечисловое значение. Назад 30

Упражнения по программированию (продолжение): 5. Написать программу, рассчитывающую полета стрелы (задача Зенона). полное время Упражнения по программированию (продолжение): 5. Написать программу, рассчитывающую полета стрелы (задача Зенона). полное время 6. Написать программу, заменяющую каждый символ во входной последовательности на следующий за ним в таблице ASCII кодов. Пробелы сохранить (2 варианта: с проверкой на пробел и с проверкой на символ). 7. Написать программу, переворачивающую оставляя результат в строке S. строку S, Назад 31

Упражнение 1 (решение): # include <stdio. h> int main (void) { float m, n, Упражнение 1 (решение): # include int main (void) { float m, n, rez; printf("vvedite 2 chisla, q - for exitn"); while (scanf("%f%f", &m, &n) ==2 ) { rez = (m-n)/(m*n); printf("%. 2 f, %. 2 fn", m, n, rez); printf("next 2 chisla, q - for exitn"); } return 0; Назад } 32

Упражнение 2 (решение): # include <stdio. h> int main (void) { int count, sum, Упражнение 2 (решение): # include int main (void) { int count, sum, days; printf("vvedite srok, q - for exitn"); while (scanf("%d", &days) ==1 ) { count = 0; sum = 0; while(count++ < days) sum = sum + count*count; printf("From %d dn summa =%dn", days, sum); printf("next days, q - for exitn"); } return 0; } Назад 33

Упражнение 3 (решение): # include <stdio. h> # define ROWS 6 # define CHARS Упражнение 3 (решение): # include # define ROWS 6 # define CHARS 6 int main (void) { int row; char ch; for (row = 0; row < ROWS; row++) { for (ch = ('A' + row); ch <('A' + CHARS); ch++) printf("%c", ch); printf("n"); } return 0; } Назад 34

Упражнение 4 (решение): /* возводит числа в целую степень*/ # include <stdio. h> int Упражнение 4 (решение): /* возводит числа в целую степень*/ # include int main (void) { int i, n; double x, xpow; printf("Vv. chislo i stepen, q for exitn"); while(scanf("%lf%d", &x, &n) ==2) { xpow = 1; for (i=1; i <= n; i++) xpow *=x; printf("%. 2 lf v stepeni %d = %. 2 lfn", x, n, xpow); printf("Vv. sled. 2 cisla or q for exitn"); } return 0; } Назад 35

Упражнение 5 (решение): /*zeno. c - - сумма последовательности*/ #include <stdio. h> int main(void) Упражнение 5 (решение): /*zeno. c - - сумма последовательности*/ #include int main(void) { int count; double time, x; int limit; printf("How many element will be in sum? n"); scanf("%d", &limit); for (time=0, x=1, count=1; count<=limit; count++, x*=2) { time += 1. 0/x; printf("Times %f count %d. n", time, count); } return 0; Назад } 36

Упражнение 6 (решение I варианта): #include <stdio. h> #define SPACE ' ' /*последовательность кавычка-пробел-кавычка*/ Упражнение 6 (решение I варианта): #include #define SPACE ' ' /*последовательность кавычка-пробел-кавычка*/ int main(void) { char ch; ch=getchar(); /*читать символ пока не будет введен*/ while (ch != 'n') /*символ конца строки*/ { if (ch==SPACE) /* оставить пробел*/ putchar(ch); /*символ остается неизменным*/ else putchar(ch+1); /*изменить другие символы*/ ch=getchar(); /*принять следующие символы*/ } putchar(ch); /*распечатать новую строку*/ return 0; } Назад 37

Упражнение 6 (решение II варианта): #include <stdio. h> #include <ctype. h> int main(void) { Упражнение 6 (решение II варианта): #include #include int main(void) { char ch; while ((ch=getchar()) != 'n') { if (isalpha(ch)) putchar(ch+1); else putchar(ch); } putchar(ch); return 0; } Результат: See, is it me! Tff, ju ju nf! /*распечатать новую строку*/ Назад 38

Упражнение 7 (решение): #include <stdio. h> #include <string. h> void main(void) { int i, Упражнение 7 (решение): #include #include void main(void) { int i, j, c; char s[20]; printf("Please, linen"); do { scanf("%s", s); for(i=0, j=strlen(s)-1; i

Ветвления. Оператор If, If-else, Switch Контрольные вопросы: l l l Задание 1 Задание 2 Ветвления. Оператор 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 Задание 1 l Определить, какие из примеров истинны, а какие ложны. l l l 100 > 3 && ‘a’ > ‘c’ 100 > 3 || ‘a’ > ‘c’ ! (100 > 3). Назад 41

Задание 2 l Построить выражения, формулирующие следующие условия: l l Значение number больше или Задание 2 l Построить выражения, формулирующие следующие условия: l l Значение number больше или равно 1, но меньше 9. ch не является символом q или k. . Значение number находится в диапазоне от 1 до 9, но не равно 5. number не попадает в диапазон от1 до 9. Назад 42

Задание 3 l Каковы числовые значения каждого из следующих выражений? l 5 > 2. Задание 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 <stdio. Задание 4 l Что напечатает следующая программа? l l l l # include int main (void) { int num; for (num = 1; num <= 11; num++) { if (num % 3 == 0) putchar('$'); else putchar('*'); putchar('#'); putchar('%'); } putchar('n'); return 0; } Решение 44

Задание 4 (решение): Результат: *#%*#%$#%*#%*#%$$%*#%*$% Назад 45 Задание 4 (решение): Результат: *#%*#%$#%*#%*#%$$%*#%*$% Назад 45

Задание 5 l Что напечатает следующая программа? l l l l l #include <stdio. Задание 5 l Что напечатает следующая программа? l l l l l #include int main(void) { int i = 0; while (i < 3) { switch(i++) { case 0 : case 1 : case 2 : default: } putchar ('n'); } return 0; } printf("Merry!"); printf("Merr"); printf("Mer"); printf("Hi!"); Назад 46

Задание 6 l Что напечатает следующая программа? l #include <stdio. h> l int main(void) Задание 6 l Что напечатает следующая программа? l #include l int main(void) l { l int age = 20; l while (age++ <=65) l { l if ((age % 20) == 0) l printf("Your age is %d years oldn", age); l if (age = 65) l printf("%d years, present for you. n", age); l } Назад l return 0; l } 47

Упражнения по программированию: 1. Составить программу расчета платы за электроэнергию в соответствии с установленными Упражнения по программированию: 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. Вычислить площадь прямоугольника (треугольника и т. п. ), используя Упражнения по программированию (продолжение): 4. Вычислить площадь прямоугольника (треугольника и т. п. ), используя break для проверки правильности ввода данных (7. 10, Ст. Пр. ). 5. Составить программу, считывающую с клавиатуры символ и выводящую название животного, которое начинается с этой буквы. (з. 7. 11, стр. 144, Ст. Пр. ) Назад 49

Упражнение 1 (решение): #include <stdio. h> #define R 1 0. 11439 #define R 2 Упражнение 1 (решение): #include #define R 1 0. 11439 #define R 2 0. 12032 #define R 3 0. 14022 #define B 1 240 #define B 2 540 #define BS 1 (R 1 * B 1) #define BS 2 (BS 1 + (R 2 * (B 2 - B 1))) int main(void) { double kwt; double bill; printf("Kolich kwt? n"); scanf("%lf", &kwt); if (kwt <= B 1) bill = R 1 * kwt; else if (kwt <=B 2) bill = BS 1 + (R 2 * (kwt - B 1)); else bill = BS 2 + (R 3 * (kwt - B 2)); printf("Summa za %. 2 lf kwt = $%. 2 lf. n", kwt, bill); return 0; } Назад 50

Упражнение 2 (решение): /* подсчет числа символов, отличных от один. и дв. кавычек*/ #include Упражнение 2 (решение): /* подсчет числа символов, отличных от один. и дв. кавычек*/ #include #define P '. ' int main(void) { int ch; int count =0; while ((ch = getchar()) != P) { if (ch !='"' && ch !=''') count++; } printf("%d simv. n", count); return 0; } Результат: My favorite book is “Poems” by ‘Light’. simv 34. Назад 51

Упражнение 3 (решение): /* использование оператора continue, чтобы пропустить часть цикла*/ # include <stdio. Упражнение 3 (решение): /* использование оператора continue, чтобы пропустить часть цикла*/ # include # define MIN 0. 0 f # define MAX 100. 0 f int main(void) { float s; float total = 0. 0 f; int n = 0; float min = MAX; float max = MIN; printf("Vv. rezaltsn"); while(scanf("%f", &s)==1) /* q для выхода*/ Продолжение… 52

Упражнение 3 (продолжение решения): { if (s < MIN || s > MAX) { Упражнение 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 <stdio. h> int main(void) { float l, w; printf( Упражнение 4 (решение): # include int main(void) { float l, w; printf("Vv. l, wn"); while(scanf("%f%f", &l, &w)==2) { printf("Length = %. 2 f, Width = %. 2 fn", l, w); /* if (scanf("%f%f", &l, &w)!=2) break; */ printf("Length = %. 2 f, Width = %. 2 f, Sq = %. 2 fn", l, w, l*w); printf("Vv. l, wn"); } return 0; } Назад 54

Упражнение 5 (решение): # include <stdio. h> # include <ctype. h> int main(void) { Упражнение 5 (решение): # include # include int main(void) { char ch; printf("Your. litera or # for exitn"); while ((ch = getchar ()) != '#') { if (islower(ch)) /* только строчные буквы*/ switch (ch) { case 'a' : printf("akulan"); break; Продолжение… 55

Упражнение 5 (продолжение решения): case 'b': printf( Упражнение 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( Упражнение 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 Результат: 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 Функции. Передача параметров в функцию. Упражнения по программированию: Упражнение 1 l Упражнение 2 l Упражнение 3 l Упражнение 4 l Упражнение 5 l Упражнение 6 Упражнения для самостоятельного решения: l Упражнение 1 l Упражнение 2 l Назад 59

Упражнения по программированию: Передача параметров из вызываемой функции в вызывающую. 1. Составить функцию, которая Упражнения по программированию: Передача параметров из вызываемой функции в вызывающую. 1. Составить функцию, которая возвращает меньший из своих аргументов. Передача информации из вызывающей функции в вызываемую Создать функцию n_char, печатающую строку, состоящую из звездочек или заданного числа пробелов. Количество * или пробелов, которые нужно напечатать, будем передавать в качестве параметра из главной функции main в функцию n_char. Результатом должна быть адресная строка: ……………………………………… VGTU 74 MOSCOW AVENU VITEBSK, 210035 *************************************** 2. Назад 60

Упражнения по программированию (продолжение): Составить функцию, вычисляющую факториал числа. 4. Составить функцию, вычисляющую факториал Упражнения по программированию (продолжение): Составить функцию, вычисляющую факториал числа. 4. Составить функцию, вычисляющую факториал числа, используя рекурсию. 5. Создать функцию обмена значениями (использовать указатели). 6. Изменить программу, возводящую числа типа double в положительную целую степень (см. пз. 2 -3 з. 4) так, чтобы она правильно обрабатывала отрицательные показатели степени. Встройте в нее функцию, которая любой степени числа 0 присваивала бы значение 0, а любому числу в степени 0 присваивала бы значение 1. Исходная программа… 3. Назад 61

Исходная программа… # include <stdio. h> int main (void) { int i, n; double Исходная программа… # include int main (void) { int i, n; double x, xpow; printf("Vv. chislo i stepen, q for exitn"); while(scanf("%lf%d", &x, &n) ==2) { xpow = 1; for (i=1; i <= n; i++) xpow *=x; printf("%. 2 lf v stepeni %d = %. 2 lfn", x, n, xpow); printf("Vv. sled. 2 cisla or q for exitn"); } return 0; } Назад 62

Упражнения для самостоятельного решения: 1. Создайте функцию, которая заменяет содержимое двух переменных их суммой Упражнения для самостоятельного решения: 1. Создайте функцию, которая заменяет содержимое двух переменных их суммой и разностью. 2. Создайте функцию, которая принимает три аргумента: символ и два целых значения. Символ должен быть выведен. Первое целочисленное значение указывает, сколько раз символ должен быть напечатан в строке, а второе целочисленное значение указывает подлежащее печати число строк. Создайте программу, в которой используется такая функция. Назад 63

Упражнение 1 (решение): /* листинг 9. 3, стр. 175 - выводит меньшее из двух Упражнение 1 (решение): /* листинг 9. 3, стр. 175 - выводит меньшее из двух значений ev 1 и ev 2*/ # include /* int imin(int, int); - можно описывать прототип ф -ции здесь*/ int main(int) { int imin(int, int); int ev 1, ev 2, rez; printf("vv. 2 chisla, q for exit: n"); while (scanf("%d%d", ev 1, ev 2)==2) Продолжение… 64

Упражнение 1 (продолжение решения): { rez = imin(ev 1, ev 2); printf( Упражнение 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; Упражнение 1 (продолжение решения): { int min; if (n < m) min = n; else min = m; return min; } Пояснение к решению: Здесь ключевое слово return возвращает значение min в функцию main. Назад 66

Упражнение 2 (решение): /* z 9_2, стр. 173 ф-ция выводит символ '*' или ‘ Упражнение 2 (решение): /* z 9_2, стр. 173 ф-ция выводит символ '*' или ‘ ‘*/ # include # include # define NAME "VGTU" # define ADDRESS "74 MOSCOW AVENU" # define PLACE "VITEBSK, 210035" # define LIMIT 65 # define SPACE ' ' void n_char(char ch, int num); int main(void) Продолжение… 67

Упражнение 2 (продолжение решения): { int spaces; n_char('*', LIMIT); putchar('n'); n_char(SPACE, 30); printf( Упражнение 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( Упражнение 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 <stdio. h> long fact(int Упражнение 3 (решение): /* z. 9. 7 факториал*/ # include long fact(int n); int main(void) { int num; printf("vv. chislo <=16, or qn"); while (scanf("%d", &num)==1) { if (num < 0 || num >15) printf("uncorrected vvodn"); Продолжение… 70

Упражнение 3 (продолжение решения): else printf( Упражнение 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 <stdio. h> Упражнение 4 (решение): /* z. 9. 8 факториал - рекурсия*/ # include long rfact(int n); int main(void) { int num; printf("vv. chislo <=16, or qn"); while (scanf("%d", &num)==1) { if (num < 0 || num >15) printf("uncorrected vvodn"); else printf("%d factorial = %ldn", num, rfact(num)); printf("vv. chislo 0 - 16 or q for exitn"); Продолжение… 72

Упражнение 4 (продолжение решения): } return 0; } long rfact(int n) { long ans; Упражнение 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 <stdio. h> void interchange(int *u, int Упражнение 5 (решение): /* использование указателей*/ # include void interchange(int *u, int *v); int main (void) { int x=5, y=10; printf("dano x=%d, y=%dn", x, y); interchange(&x, &y); /*отправка в ф-цию int. . . адресов*/ printf("rez: x=%d, y=%dn", x, y); return 0; } void interchange(int *u, int *v) { int temp; temp = *u; *u = *v; *v = temp; Назад } 74