Главная страница

Шафеева практика С. Практикум по программированию на языке с методические указания к лабораторным работам Омск 2008 2


Скачать 1.01 Mb.
НазваниеПрактикум по программированию на языке с методические указания к лабораторным работам Омск 2008 2
АнкорШафеева практика С.pdf
Дата06.04.2018
Размер1.01 Mb.
Формат файлаpdf
Имя файлаШафеева практика С.pdf
ТипПрактикум
#17709
КатегорияИнформатика. Вычислительная техника
страница1 из 7
  1   2   3   4   5   6   7


Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования
«
Омский государственный технический университет»
Практикум по программированию на языке С
Методические указания к лабораторным работам
Омск 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, найти площадь квадрата; в противном случае подсчитать площадь трапеции.
  1   2   3   4   5   6   7


написать администратору сайта