Шафеева практика С. Практикум по программированию на языке с методические указания к лабораторным работам Омск 2008 2
Скачать 1.01 Mb.
|
Федеральное агентство по образованию Государственное образовательное учреждение высшего профессионального образования « Омский государственный технический университет» Практикум по программированию на языке С Методические указания к лабораторным работам Омск 2008 2 Составители: Ольга Павловна Шафеева, канд.техн.наук, доцент, Каворина Юлия Геннадьевна, ст. гр. ИВТ- 325; Шукурова Гульмира Смагуловна, ст. гр. ИВТ- 325 Рассмотрены основы алгоритмизации решения задач и программиро- вания на языке СИ. Приводятся примеры разработки алгоритмов и про- грамм для задач разного уровня сложности. Содержатся графические схе- мы проектируемых алгоритмов. Предназначены для выполнения студентами лабораторных работ по дисциплинам "Основы алгоритмизации и программирования", "Програм- мирование на языке высокого уровня". В подготовке методических указаний и отладке программ приняли также участие студенты группы ИВТ- 325 Грязнова Е.С., Каскевич А.В. Печатается по решению редакционно-издательского совета Омского государственного технического университета. УДК 004.43 ББК 32.973.26-018.1 © О.П. Шафеева, 2008 © Омский государственный технический университет, 2008 3 Р ВВОД-ВЫВОД В ЯЗЫКЕ СИ. СТРУКТУРА ПРОГРАММЫ Для реализации лабораторных работ необходима среда Borland С/С++3.1 (3.2). Ее запуск производится через файл bс.exe (BС\BIN\bс.exe). При этом откроется окно редактирования с меню (приложение А ). 1. Подготовить в окне редактирования программу, состоящую из одной главной функции: #include void main() /* заголовок главной программы */ { int x, y, z; /* объявление переменных целого типа */ x = 5; y = 6; /* операторы присваивания */ z = x + y; printf("сумма =%d\n", z); /* стандартная функция вывода из библ. } Сохранить программу в файле: имя0_1.с или имя0_1.cpp . Откомпилировать (F9), при необходимости исправить ошибки путем установки маркера на нужное сообщение и нажатия клавиши Выполнить программу (Ctr+F9 ), посмотреть результаты ( Alt+F5 ). Дополнить вывод значениями z в восьмеричной и шестнадцатеричной системах счисления. Сохранить (F2). 2. Вычислить Z1 = X + Y++; Z2= ++X + Y; [4] с выводом на печать (сохранить под именем0_2.с): x = значение, y = значение, z = значение <звонок>. 3. Заменить операции присваивания исходных данных оператором ввода scanf. Предусмотреть задания числа позиций для вывода и выравнивание по левому краю для параметра z [1, 6, 7]. Шаблон для ввода: %[*][длина][модификатор] символ преобразования. Символы преобразования: d (или i) – используется для вывода целого десятичного числа (int), u – десятичное целое без знака, f – вещественное число в естественной форме (float), e (Е) – вещественное число в экспоненциальной форме, g (G) – наиболее короткая запись числа из двух форм e или f, c – для вывода отдельного символа, s – для вывода строки символов, 4 o – восьмеричное число, x – шестнадцатеричное число (буквы строчные), X – шестнадцатеричное число (буквы прописные). Сохранить программу в файле имя0_3.с. Выполнить для трех примеров, записать полученные результаты. 4. Создать программу для ввода, сложения, умножения, деления и вывода вещественных чисел с типами double и float. Использовать для вывода символы преобразования f, e, E, g, G, задание длины и точности, составные операции +=,*=, /=. Шаблон для вывода: %[флажок][длина][.точность][модификатор] символ преобразования. Записать полученные программы в файлы: имя0_4.с и имя0_5.с. Выполнить для трех примеров, записать полученные результаты. Порядок выполнения лабораторных работ 1. Изучить теоретические сведения по теме. 2. Построить схему алгоритма для решения задач в соответствии с вариан- том, выданным преподавателем, для каждого задания. 3. Подготовить текст программы и набрать его в окне редактирования. 4. Откомпилировать программу (F9) и исправить синтаксические ошибки. 5. Выполнить программу для реальных исходных данных (Ctrl+F9). 6. Просмотреть результаты (Alt+F5) и записать в тетрадь. 7. Оформить отчет по текущей лабораторной работе, в который включить: - номер работы (лабораторная работа № 1), - тема работы, - условия задач, - схемы алгоритмов, - тексты программ, - результаты выполнения программ, выводы. 8. Защитить лабораторную работу преподавателю. Лабораторная работа 1 Основы программирования в среде языка СИ. Оператор присваивания Оператор присваивания имеет вид <идентификатор> = <выражение>; В арифметических выражениях могут использоваться операции (приложение Б) и математические функции из библиотек <math.h> [7]. 5 Наиболее часто применяются функции библиотеки <math.h>: double sin(double x) – sin x; double exp(double x)– е х ; double cos(double x) – cos x; double log(double x) – ln х; double tan(double x) – tg x; double log10(double x)– lg х; double fabs(double x)– |x|; long labs(long x)– |x| для целого x; double sqrt(double x)– х ; double pow(double x, double y) – x y ; double sinh(double x)–sh x; double cosh(double x)– сh x; double tanh(double x)– th x; double atan(double x) – arctan х; double acos(double x)– arccos x; double asin(double x) – arcsin x; double ceil(double x)– ближайшее целое, не меньшее, чем х; double floor(double x)– ближайшее целое, не превышающее х; double fmod(double x, double y) – остаток от деления нацело x на y; double modf(double x, double *ptr) - расчленение числа с плавающей точкой на целую и дробную части. Дробная часть возвращается функцией. Целая часть записывается в область памяти, на которую указывает ptr. Приоритет операций в выражении Ранг Операции Ассоциативность 1 ( ) [ ] -> :: . → (слева – направо) 2 ! + - ++ -- & * ← (справа - налево) 3 .* ->* → 4 * / % → 5 + - → 6 << >> → 7 < <= >= > → 8 == != → 9 & → 10 ^ → 11 | → 12 && → 13 | | → 14 ?: ← 15 = *= /= %= += -= &= ^ = |= <<= >>= ← 16 , → Таблица типов данных С/С++ приведена в приложении В Пример 1. Вычислить площадь прямоугольника по длинам его сторон А и В. Обозначим площадь переменной S, необходимо найти S=A*B. Программа набирается в окне редактора С++ и компилируется (F9). Сначала подключаются библиотеки 6 #include // для ввода/вывода #include // для функций работы с экраном void main () // Заголовок главной программы { int A=2, B=3, S; // объявление переменных целого типа clrscr(); // вызов функции очистки экрана из библиотеки S=A*B ; // оператор «выражение» printf ("\n Площадь прямоугольника = %d\n", S); // вывод getch (); // вызов функции задержки работы до нажатия любой клавиши } В результате выполнения программы (Ctrl+F9) на экран выводится сооб- щение: Площадь прямоугольника = 6. Пример 2. Найти площадь равностороннего треугольника. Если сто- роны треугольника имеют размер А, то его площадь S = A 2 sin(π/3)/2. Схе- ма алгоритма (СА) для этой задачи (рис.1) выполнена по ГОСТ 19.701-90 (прил. Г [2]). Текст программы: #include #include #include #define PI 3.1413 //директива постановки void main() { float A,S; //объявление переменных плавающего типа clrscr(); //очистка экрана printf ( " Введите А"); scanf ("%f",&A); // ввод S=A*A*sin(PI/3)/2; printf (" Результат : S=%6.2f для A=%f\n", S, A); getch(); // из библиотеки } После выполнения программы на экран выводится: Результат: S = 10.83 для А = 5. Предварительно рассчитанный при подготовке к лабораторной работе на калькуляторе результат для А = 5 составил S = 10.8253, что подтвер- ждает верность программы. Начало Ввод А Конец Вывод S 3 sin 2 А S 2 Рис.1 7 Задание 1 (программа 1_1) № x 1 x 2 a b c Вычислить 1 2 3 4 5 6 7 1 1 2 1.5 2 -0.7 5 ) ( cos c bx ae w x 2 1 2 0.7 - 2.1 ax c x a x y ln sin 1 sin 2 2 3 0 2 2 1.2 1 c e b a z x sin 4 1 2 4.1 -2.3 - x b a x x a x w 3 sin 2 cos 2 3 5 -1 1 0.5 2 1.5 5 , 1 2 2 x a e bx y x a 6 2 4 0.5 1.3 - b x x a x x e z ax 4 7 0 2 0.5 1 - 3 1 1 2 x e x e w bx a 8 -1 1 2.7 1.7 - ) ln( ) 2 ( 2 bx a e x a y bx 9 0 π/2 2 0.7 0.5 3 2 3 ) sin ( cos c x bx a z 10 1 0 0.5 2.9 1.5 c bx e bx bx ax w x x ) sin( ) cos( 2 11 1 2 1.5 -1.2 - 3 2 sin x b ax e y ax 12 1 2 0.5 1.7 2 a bx b cx e z bx ) sin( 13 -1 1 0.5 1.2 - bx a x arctg w bx x cos 3 ) ( 2 14 1 2 0.5 3.1 - ) ( sin 2 2 b x e x ax y x 8 1 2 3 4 5 6 7 15 1 2 0.5 3.2 - ) lg( ) ln( 3 2 x b b x a e z x x 16 0 1 1 2 4 2 3 3 cx bx a x a x w 17 0 1 1 3 - tgx x x a e b y x 1 18 -1 2 1 2 - x x b x a z 2 4 sin 2 / ) cos( 19 1 2 2 3 1 ) 4 / ( ) ( ln 2 x a c x x b w 20 -1 1 2 π/6 0,5 x x c b x a y 2 sin ) ( cos 2 Задание 2 (программа 1_2) 1. Идет k секунда суток. Определить, сколько целых часов (h) и целых минут (m) и секунд (s) прошло к этому моменту. 2. Определить площадь трапеции с основаниями а, b, высотой h и объем усеченного конуса, если считать а, b - площадями оснований. 3. Определить координаты центра тяжести трех материальных точек с массами m 1 ,m 2 ,m 3 и координатами (x 1 ,y 1 ), (x 2 ,y 2 ), (x 3 ,y 3 ). 4. Вычислить по заданному радиусу R объем шара и площадь круга, найти соотношение между ними. 5. Вычислить медианы треугольника по заданным сторонам a, b, c. 6. Вычислить площадь поверхности и объем конуса по заданным ра- диусам и высоте h. 7. По заданному радиусу найти объем шара и площадь поверхности. 8. Вычислить, какая идет секунда суток при положении стрелок в h часов, m минут и s секунд, а также угол (в градусах) между положением часовой стрелки в начале суток и ее положением в указанный момент. 9. Ввести двузначное целое число х<15. Написать программу перево- да его в восьмеричную систему счисления. 10. Ввести координаты двух точек (х 1 , y 1 ), (x 2 ,y 2 ). Найти расстояние между ними. 9 Лабораторная работа 2 Программирование разветвленных алгоритмов. Операторы передачи управления Структура условного оператора передачи управления: if (<выражение>) <оператор 1> else <оператор 2>; (Если) (иначе) - ключевые слова, где <условие> - это произвольное выражение логического типа, которое может принимать два значения: истина (TRUE) и ложь (FALSE); <оператор> - любой оператор языка СИ, заканчивается точкой с запятой. Сокращенная форма условного оператора: if (<выражение>) <оператор>; Оператор безусловного перехода: goto <идентификатор-метка>; Меткой является идентификатор. Метка размещается перед операто- ром С/С++, к которому выполняется переход и отделяется двоеточием (:). Пример 1. Составить программу для начисления базовой зарплаты со- гласно следующему правилу: если стаж работы сотрудника менее трех лет, то зарплата равна 100$, при стаже работы от трех до 5 лет - 150$, свыше 5 лет зарплата повышается с каждым годом на 10$, причем при стаже, пре- вышающем 20 лет, она составляет 300$. Для программирования решения этой задачи определим математиче- скую формулировку задачи: 100, если ST < 3; ZP= 150, если 3 ≤ST 5; 150+ (ST -5)*10, если 5 < ST≤ 20; 300, если ST > 20; где ZP - зарплата, ST - стаж работы. Далее построим СА (рис.2,а), ей со- ответствует следующая программа: #include #include void main () { int ST; // ST - стаж (байтовый (целый) тип беззнаковый) float ZP; // ZP - зарплата (плавающий тип) printf ("\n Введите стаж "); scanf ("%d",&ST); if (ST<3) ZP = 100; else if (ST<5) ZP = 150; else if (ST>=20) ZP=300; else ZP=150+(ST- 5)*10; printf ("\n Зарплата = %10.2f$\n",ZP); 10 getch(); } Оператор выбора switch позволяет в зависимости от значения какой- либо переменной или выражения (ключа выбора) выполнить те или иные операторы, помеченные соответствующими константами. Структура оператора: switch (<выражение> ) { case<константа 1>: <группа операторов 1>; case <константа 2>: <группа операторов 2>; case <константа N>: <группа операторов N> default: <операторы>; } где <выражение> - выражение (переменная) любого порядкового типа; <константа> - константа того же типа, что и <выражение>; <оператор> - произвольный оператор C/C++. Рис.2 б) Да Да Да Нет Нет Нет Начало Ввод стажа ST ST<3 ST>=20 ZP=100+(ST-5)*10 Вывод ZP Конец ZP=100 ZP=150 ZP=300 ST<=15 а) 4 3 1..2 Начало Ввод чис- ла углов T T Конец Пятиугольник Не фигура Треугольник Четырех- угольник Многоугольник 5 иначе 11 Пример 2.Напечатать в зависимости от числа углов название фигуры (треугольник, четырехугольник, пятиугольник, шестиугольник, много- угольник). Вариант реализации задачи с применением оператора выбора пред- ставлен СА (рис.2,б) и следующей программой: #include #include void main () { int T; // T – число углов clrscr(); // очистка экрана printf ("Введите число углов "); scanf ("%d",&T); switch (T) { case 1: case 2 : printf ("Это не фигура\n "); break; case 3: printf ("С %d углами - треугольник\n ", T); break; case 4: printf ("С %d углами - четырехугольник\n ", T); break; case 5 : printf ("С %d углами - пятиугольник\n ", T ); break; case 6: printf ("С %d углами - шестиугольник\n ", T ); break; default : printf ("С %d углами - многоугольник\n ", T ); } getch(); } Задание 1 (программа 2_1) Вычислить значение функции в зависимости от интервала, в который попадает вводимый с клавиатуры аргумент: 1. Для t [0,3], a t 2 ln t при 1 2 t , где a=-0.5,b=2 z = 1 при t<1, e a t cos b t при t>2, 2. Для x [0,4], 5 a x при x 2, где а=2.3 f = х при 0.3< x 2, cos(x-a) при x 3 0 , 3. Для x [0,7], (a+b)/(e x +cosx) при 0 x 2.3, где a=-2.7,b=-0.27 z = (a+b)/(x+1) при 2.3 x 5, e x +sinx при 7 5 x , 12 4. Для i [7,12], a i 4 + b i при i< 10, где a=2.2,b=0.3. y = tg(i + 0.5) при i = 10, e 2i + 2 2 i a при i >10, 5. Для x [0.9,5], x 2 - 7/x 2 при x<1.3, где a=1.5 y = ax 3 + 7 x при 1.3 x 3, lg(x + 7 x ) при x 3 , 6. Для t [-1.4], 1 sin 2 t b at при t<0.1, где a=2.1,b=0.37. z = at + b при 0.1 t 2, 1 cos 2 t b at при t 2 , 7. Для x [0,6], a e sin x +2.5 при x<0.3, где a=1.5. y = e cos x + a при 0.3 x<4, (sin x)/ (a + e x ) при x 4, 8. Для x [1,2], y = a/x + b x 2 - c при x 2 1 , где a=1.8,b=-0.5, c=3.5 (a + bx)/ 1 x при x>1.2, 9. Для t [1,5], t 3 a t при t>a, где a=2.5 z = t sin a t при t=a, e -at cos a t при t10. Для x [0,4], e -bx sin b x при x<2.3, где a=1,b=3. y= сos bx при 2.3 3 x , e -ax cos b x при x , 3 11. Для t [0.5,3], a t 2 – b 1 t при t, b t a t 2/3 - 3 1 t при t>b, 12. Для x [0,2], |e -2x sin bx| при x >1, где b=-2.9 y = cos bx при x = 1, e -x cos bx при x < 1, 13. Для x [0.5,2] sin (cos a x) при x >1, где a=-0.8 z = tg ax при x = 1, a 2 x при x < 1, 14. Для x [1,2], ln bx - 1/(bx+1) при x < 1.3, где b=1.3. y = bx + 1 при 1.3 x 1.7, ln bx +1/(bx+1) при x > 1.7, 13 15. Для x [-1,1], ax 2 +bx 2/3 при x<0.1, где a=2.5,b=-0.9. z= a x 2 при x=0.1, b x 2/3 при x>0.1. 16. Ввести координаты точки (x, y). Напечатать, в каком квадранте или на какой оси координат находится эта точка. 17. Ввести радиусы R 1 , R 2 и высоту. Вычислить объем усеченного ко- нуса: 3 / ) ( 2 2 1 1 S S S S h , где S- площадь оснований. Если R 1 = R 2 - объем и площадь цилиндра, если R 1 = 0 или R 2 = 0 - объем (hπr 2 ) и площадь πr( 2 2 h r ) поверхности конуса. 18. Ввести с клавиатуры цифру. Определить, какой системе счисления она может принадлежать. 19. Ввести число. Определить, делится ли оно нацело на два, три или пять. 20. Ввести a, b, h. Если h=0, вычислить площадь прямоугольника; при a = b, найти площадь квадрата; в противном случае подсчитать площадь трапеции. 3> |