Шафеева практика С. Практикум по программированию на языке с методические указания к лабораторным работам Омск 2008 2
Скачать 1.01 Mb.
|
Задание 2 (программа 2_2) 1. Определить остаток от деления на восемь введенного числа х и на- писать восьмиричную цифру прописью. 2. По цифре, введенной с клавиатуры, напечатать название этой цифры. 3. С клавиатуры ввести число k (1..30). Определить, какому дню неде- ли оно соответствует, если первое число - понедельник. 4. Ввести число и номер месяца. Напечатать дату прописью. 5. Идет k секунда суток. Вычислить, сколько прошло часов и полных минут к этому моменту, при этом согласовать со значением слова (час, ча- са, часов, минута, минуты, минут). 6. В зависимости от номера (N) типа фигуры, организовать ввод необ- ходимых данных и вычислить при N = 1 - площадь круга, N = 2 - объем шара (4/3πR 3 ), N=3 -объем цилиндра, N = 4 - площадь поверхности сферы 4πr 2 7. Ввести число N (0 ≤ N ≤ 15). Определить и напечатать шестнадцате- ричную цифру, ему соответствующую. 8. Для целого числа К (1…99) напечатать фразу « Мне К лет », при определенных значениях К слово «лет» заменить словом «год» или «года». 9. В зависимости от номера (N) типа фигуры, организовать ввод необ- ходимых данных и вычислить при N = 1 - площадь прямоугольника, при N=2 - площадь параллелограмма, при N = 3 - площадь трапеции 1/2(a+b)h. В последнем случае напечатать: является ли трапеция параллелограммом или ромбом. 14 10. Перевести число 0 ≤ х ≤ 31 в шестнадцатеричную систему счисления. 11. Напечатать прописью остаток от деления любого целого числа на пять. 12. По введенному номеру напечатать нужный цвет в радуге. 13. Спроектируйте программу, которая показывает, что, если сумма цифр дву- значного числа кратна трем, то и само число делится на три без остатка. 14. Разработайте программу, которая доказывает, что квадрат дву- значного числа k5 (последняя цифра - 5), равен k * (k + 1) * 100 + 25 (т.е. может быть получен умножением старшей цифры k на следующую по по- рядку и припиской «25»). Например, 35 * 11 = 3*4*100 + 25. Для задания 2 номер варианта определяется остатком от деления индивидуалного варианта на число 12. Лабораторная работа 3 Программирование циклических алгоритмов с заданным числом повторений Оператор цикла с счетчиком: for (<выражение1> ; <условие выполнения> ; <выражение2>) <оператор>; где <выражение1> - это выражение инициализации цикла (может со- держать несколько операторов, разделенных запятыми); <выражение2> - изменение параметра цикла (не обязательно целое). Пример 1. Вычислить сумму элементов s=1+1/4+1/9+1/16+... . На основе анализа изменения параметра знаменателя определим алго- ритм решения задачи (pис. 3) и напишем программу: #include #include void main () { float s = 0, r; int i,N; clrscr(); //очистка экрана printf ("\n Введите N "); scanf ("%d",&N); for ( i=1; i<=N; i++ ) { r = 1.0/ (i*i); s+ = r; // s = s + r } printf ("Сумма = %6.2f\n ",s); getch(); } Рис.3 Конец Вывод S Начало S=0 i=1, N r =1/i 2 S=S + r Ввод N 15 Рис. 4 Ввод a,b,N ax=| b-a | / (n-1), х=а x=a i=1, N F1=tgx, F2=sinx В ывод i, x, F1,F2 x= x + dx Конец Начало Пример 2. Вычислить значения двух функций F1(x) = tg(x) и F2(x) = sin(x) в n точках, равномерно распределенных на интервале a ≤ x ≤ b, где a = -π/4, b = π. Для реализации первого варианта данной задачи разработана СА (pис. 4) и cледующая программа: #include #include #include # define b 3.1415 void main () { float F1, F2, x, dx, a = - b/4; // dx - шаг изменения x int i, n; // i - переменная цикла clrscr(); // очистка экрана printf ("Введите число точек \n"); scanf ("%d", & n); dx = fabs(b-a)/(n-1); x = a; printf (" ___________________ \n"); printf ("| I | X | F1 | F2 | \n"); printf ("|---|--------|--------|--------|\n"); for ( i=1; i<=n; ++i ) // оператор цикла { F2 = sin(x); F1 = tan(x); // вычисление tg x printf (" |%3d| %8.3f |%8.4f| %8.4f|\n", i, x, F1, F2); x=x+dx; // x += dx } printf (" ____________________ \n"); getch(); } Если точки не нумеровать, можно в цикле применить параметр х и шаг изменения dx. Тогда во втором варианте программы оператор цикла име- ет вид: for ( x = a; x <= b + dx/2; x+ = dx ) { . . . } Задание 1 (программа 3_1) Для заданных с клавиатуры значений переменных x и n вычислить 1. X = 1 + 1/2 + 1/3 + ... + 1/10. 2. Z = 2 4 6 8 20. 3. Y = -x + 4x - 9x + ... - 81 x.. 4. Y = x + x/3 + x/5 + ... + x/17. 5. Y = n! = 1 2 3 n. 6. Y = 1 - 3 + 3 2 - 3 3 + . . . + 3 10 7. Y= 20 5 i x 2 /(2i-1). 8. Z = 10 2 1 (x+i)/i. 9. Y= 15 1 i x 2 /i. 16 10. Y = 1 + x/2 + x 2 /4 + x 3 /6 + ... + x i /2i + ... + x 9 /18 . 11. Y = 1 + x 2 /1! + x 4 /2! + x 6 /3! + … + x 20 /10! = 1 + 10 1 i x 2i /i!. 12. Y = 1 - x +x 3 /3! -x 5 /5!+ ...+(-1) n x 2n-1 /(2n-1)!+ ... +x 11 /11!. 13. е = 1 + 1/1! + 1/2! + + 1/n! + ... (сравнить результат со значением функции EXP(1), определенной в Паскале). 14. π = 4(1-1/3+1/5-1/7+…+(-1) n /(2n+1)+…) (результаты сравнить с определенным в языке Паскаль числом Pi). 15. Y = arctg x = x - x 3 /3 + x 5 /5- + (-1) n x 2n+1 /(2n+1)+ ... (|х|<1). 16. Z = LN(1+x) = x - x 2 /2 + x 3 /3 - + (-1) n-1 x n /n + ... (|x|<1). 17. S = x - x 3 /3! + x 5 /5! - +(-1) n x 2n+1 /(2n+1)! + ... . 18. Вычислить суммы положительных и отрицательных значений функции z = cos(nx + a) sin(nx-a), где n = 1,2,...,5, a и x - вещественные числа. 19. Вычислить сумму четных и сумму нечетных чисел натурального ряда до N. 20. Найти сумму факториала M= n i 1 i !. Задание 2 (программа 3_2, программа 3_3) Вычислить значения двух функций в n равномерно распределенных в диапазоне а≤x≤b точках. Результаты оформить в виде таблицы. № п/п a b n F1(х) F2(х) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 0 1 -1 -2 0 - -1 -4 1 1 0 - 0 1 2 2 0 1 3 1 2 2 5 5 3 4 3 4 2 2 4 4 5 2 4 3 20 18 15 14 16 20 20 12 15 20 20 18 16 12 10 16 18 15 18 sin x cos x 1+2 x+5 4e -|x| -1 | x+10| 5 2 sin 2x +1 2-cos x 2 -x /100 x 3 e 2x 1 x e 1/(1+ x ) 5-3 cos x |sinx|+|cosx| e -x +cos2x e -x lg 1 x x cos x/2 2 x lg x - 3 x lg x 3 -x /50 e 2x 3 x - sin x 2 x arctg x - 5 1 x sin x + cos x -1 (x-1) 3 cos x e -(x+5) (x+5) 3 (1+sin 2 x) 4 x 20/(1+x 2 ) e x sin x x ln 2 x 2 x /(1-4 x ) x 2 sin 1 |sin x| - |cos x| e -2x x + sin x 3 x + 2 e -x ctg x x e -x +ln x 10/(2+x 2 ) e axx е 2x lg x - 3 3x 17 Конец y=tg( x/4) Вывод a, x, y Начало а=0,1 х≤0,9 х = х+а а = а+0,1 Рис.5 a<=0,3; x=0,5 Лабораторная работа 4 Программирование циклических алгоритмов с предусловием Цель работы: научиться разрабатывать и отлаживать программы с неразветвленными и разветвленными циклами, управляемыми условиями. Структура оператора цикла с предусловием (с предварительной про- веркой условия): while ( <выражение>) <оператор>; где <выражение> - это любое логическое выражение, <оператор> - это произвольный оператор Си, в том числе и составной. Пример. Для трех значений а = 0.1, 0.2, 0.3 протабулировать функ- цию y=a tg(x/4) при изменении аргумента x на интервале [0.5,0.9] с ша- гом, равным a. Для СА (рис.5) решения данной задачи программа может быть сле- дующей: #include #include #include void main () { float a,x,y; clrscr(); printf ("-------------------------------\n"); printf (" a| x| y |\n"); printf ("-------------------------------\n"); a=0.1; while (a<=0.31) { printf ("%5.2f\n",a); x = 0.5; while (x<=0.91) { y=a*tan(x/4); printf (" %12.2f| %10.2f\n",x,y); x=x+a; // x+=a; } printf("-------------------------------\n"); a=a+0.1; // a+=0.1; } getch(); } Второй вариант программы можно реализовать через циклы …. 18 Задание 1 (программа 4_1) Начертите структурную схему алгоритма, напишите и отладьте про- грамму для табуляции следующих функций: 1. S = a e -x sin ax+ ay при -1 <= x <=1 с шагом 0.2, a = 0.75, 1<=y <=5 с шагом 1.5. 2. Z = 5 2 y x a + 1,3 sin(x-a) при 2 <=x <=5 с шагом 0.5, a = 1.9, -1<=y<=1 с шагом 0.5. 3. S = 1 t e 2 t y cos(t-a) при 1<=t<=2 с шагом 0.2, a = -2.1, 2<= y<=3 с шагом 0.3. 4. Z = bx b t (tx+2.1) при 1<= x<=2 с шагом 0.2, b = 3.5 0<= t<=1 с шагом 0.2. 5. , если 0 <= x <= 2, a = 0.50; 0.75, Z= если 2 < x <= 3.6, шаг dx=a/2. 6. sin ax - ) lg( 2 2 x a , если 0.1 <=x <= 0.4, Y= a cos 2 (px), если 0.4 < x <= 1.2, a = 1.0; 1.5, 2 - sin ax, если 1.2 < x <=1.6, шаг dx=a/5. 7. Z= ln(a+x 2 / a ) , если 0 <=x <= 2, a=1.0; 1.3; 1.6, 2 e 2x , если 2 < x <= 3.6, шаг dx=a/4. 8. a(e x+2a +e -(x-3a) , если 0.1 <= x < 0.5, Z = sin x, если x = 0.5, a = 2; 2.1, a + a cos(x+3a), если 0.5 < x <= 1.5, шаг dx=a/10. 9. -a e x-3a , если 0 < x<= 3, a = 1; 1.5, Z= -a(1+ln(x-3a)), если 3 < x <= 4, шаг dx=a/2. 10. - (x+3a) 2 - 2a, если -1 <=x <= 0, a = 0.7; 1, Y = a cos(x+3a) - 3a, если 0 < x < 1, dx=(a+0.2)/2. a e x , если x = 1, 11. a(x-a) 3/2 , если 1 <= x <= 2.5, a = 0.5; 1.0, Z= a/2(e x/a +e -x/a ), если 2.5 < x <= 4, шаг dx=a/2. 12. 1 2 x a x , если 0.5 <= x < 1.5, a=0.1; 0.2; 0.3, Y = a cos x, если x = 1.5, шаг dx=2a. (a x 2 + 1) x , если 1.5 < x <= 3, 13. (sin 2 x +a) 2 e a sinX , если 0.1<=x<= 0.5, a=0.1;0.2;0.3, Z = tg(x/4), если 0.5 < x <=0.9, шаг dx=a. 2 / 2 2 x e x 1 / 2 a x e 19 14. tg(a 2 +sin px), если 0 <= x <= 1, Y = a sin(p- cos px), если 1 < x <= 2, a=0.5; 0.75; 1; lg x, если 2 < x < 3, шаг dx=a/4. 15. Z= e cos x -a sin 2 (px), если 0.5 <= x <= 1.5 a=0.1;0.7;1.3, a x 2 - cos px, если 1.5 < x <= 2 шаг dx= a/4. 16. 1/x, если 0.1 <= x <= 0.4 Y = ln(x 2 + ax), если 0.4 < x <= 1.2 a = 1.0; 1.5, x 2, если 1.2 < x < 1.6 шаг dx = a/5. 17. Дана непустая последовательность различных натуральных чисел, за которой следует нуль (признак конца последовательности). Определить порядковый номер наименьшего из них и его значение. 18. Найти первый отрицательный член последовательности cos (ctg), где n = 1,2,3,... . Напечатать его номер и значение. Распечатать всю по- следовательность 19. Вычислить наибольший общий делитель (k) натуральных чисел d и f. Оператор FOR не использовать. 20. Дан ряд неотрицательных вещественных чисел. Определить, сколько из них больше своих «соседей»: предыдущего и последующего чисел. Признаком окончания ряда чисел считать появление отрицательного числа. Задание 2 (программа 4_3) Модифицировать (изменить) программу 3_2 для вычисления функций F1(x) и F2(x) с применением вместо счетного цикла оператора цикла с предусловием. Выполнить ее и сравнить результаты с полученными в пре- дыдущей работе. Лабораторная работа 5 Программирование циклических алгоритмов с постусловием Стpуктуpа оператора цикла с постусловием do {<операторы>} while (<условие выполнения>); Пример. Вычислить 15 значений функций y1(x) = tg(x); и y2(x) = ctg(x) при a ≤ x ≤ b, a=0.6*Pi, b=0.7*Pi. Для вычислений разработана СА (рис.6) и следующая про- грамма: #include #include #include void main() 20 Начало E =10 -5 ,s=0, i=1 R = 1/i 2 Вывод s Конец Рис.7 s = s+r, i = i+1 r≤E { int n=14; float a=0.6*M_PI, b=0.7*M_PI; float x, y1, y2, dx; clrscr(); dx=fabs((a-b)/n); x=a; do { y1=tan(x); y2=1/y1; printf ("x= %6.4f y1= %7.4f y2= %7.4f\n",x,y1,y2); x=x+dx; } while (x<=b); getch(); } Пример 2. Вычислить сумму элементов s = 1+1/4+1/9+1/16+... c точностью до E = 0.00001 (рис. 7). #include #include { float E=0.00001; float s, r; // s- сумма, r-слагаемое int i; // счетчик слагаемых s = 0; i = 1; do { r = 1.0/(i*i); // вычисление слагаемых s = s + r; // s+ = r; i++ ; // i = I +1; } while (r>E); // сравнение слагаемых с Е printf ("Сумма=%9.5f\n",s); // вывод суммы getch(); } y 1 = tg x , y 2 = ctg x n = 14, a = 0.6π b = 0.7π dx = | (a-b)\n |, x = a Рис.6 x x = x+dx, x>b Конец Вывод x, y 1 , y 2 Начало 21 Задание 1 (программа 5_1) Модифицировать программу 3_2 для вычисления функций F1(x) и F2 (x) с применением оператора цикла с постусловием. Выполнить ее и срав- нить результаты с полученными ранее. Задание 2 (программа 5_2) Начертить структурную схему алгоритма, написать и отладить прог- рамму для одной из следующих задач. 1. Вычислить приближенное значение z = arctg x и сравнить с x - x 3 /3 + x 5 /5 - + (-1) n x 2n+1 /(2n+1) + ... (|х|<1), прекращая вычисления, когда очередной член по абсолютной величине будет меньше eps=0.00001. 2. Вычислить y = x - x 2 /2 + x 3 /3 - + (-1) n-1 x n /n + ... с точностью eps=0.00001, где |x|<1. Сравнить результат с вычисленным через стан- дартную функцию значением y = LN(1+x). 3. Вычислить y = 1 + x/1! + x 2 /2! + + x n /n! + ... с точностью eps=0.00001 и срав-нить результат с вычисленным через стандартную функцию значением y = ЕXP(x). 4. Вычислить y = sin x = x - x 3 /3! +x 5 /5! -...+ (-1) n x 2n+1 /(2n+1)!+... с точностью eps=0.00001. 5. Вычислить y = 1 - x 2 /2! + x 4 /4! - + (-1) n x 2n /(2n)! + ... с точностью eps = 0.0001 и сравнить результат с вычисленным через стандартную функцию значением y = cos (x). 6. Найти произведение цифр заданного натурального числа. 7. Определить число, получаемое выписыванием в обратном порядке цифр заданного натурального числа. 8. Определить номер первого из чисел sin x, sin(sin x), sin(sin(sin x)), .. , меньшего по модулю 10 -3 9. Дана непустая последовательность различных целых чисел, за кото- рой следует нуль. Определить порядковый номер и величину наибольшего среди отрицательных чисел этой последовательности. 10. Вычислять периметры и площади прямоугольных треугольников по длинам катетов, пока один из заданных катетов не окажется нулевым. 11. Дана непустая последовательность положительных целых чисел, за которой следует отрицательное число (это признак конца последова- тельности). Вычислить среднее геометрическое этих чисел. 12. Дана непустая последовательность ненулевых целых чисел, за которой следует нуль. Определить, сколько раз в этой последовательности меняется знак. 13. Числа Фибоначчи (f n ) определяются формулами f 0 = f 1 = 1 ; f n = f n-1 + f n-2 при n = 2,3,... . Вычислить сумму всех чисел Фибоначчи, которые не превосходят 1000. 22 14. Дана непустая последовательность положительных вещественных чисел х 1 , х 2 , х 3 ,..., за которыми следует отрицательное число. Вычислить величину х 1 + 2х 2 + ... + (N-1)x N-1 + N х N , где N заранее не известно. 15. Вычислить длины окружностей, площади кругов и объемы шаров для ряда заданных радиусов. Признаком окончания счета является нулевое значение радиуса. 16. Определить, есть ли среди цифр заданного числа одинаковые. 17. Определить, является ли заданное натуральное число палиндро- мом, т. е. таким, десятичная запись которого читается одинаково слева направо и справа налево. 18. Вычислить наименьшее общее кратное натуральных чисел a и b. 19. Дано число L. Определить первый отрицательный член последова- тельности х 1 , х 2 , х 3 ,..., где х 1 = L, x i = tg(x i-1 ). 20. Определить, является ли заданное натуральное число совершен- ным, т.е. равным сумме всех своих (положительных) делителей, кроме самого этого числа (например, совершенное число 6=1+2+3). Задание 3 (программа 5_3) Модифицировать программу 4_1 с использованием оператора цикла с постусло- вием do … while и сравнить с полученными результатами в работе 4. Лабораторная работа 6 Программирование алгоритмов обработки одномерных массивов Цель работы: научиться разрабатывать и отлаживать программы с использованием регулярных типов (векторов). Массив – набор элементов, способных хранить данные одинакового типа. Объявляя массив, необходимо сначала указать тип хранимых дан- ных, имя массива и его размер в квадратных скобках. Размером массива называется количество его элементов. |