Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Шафеева практика С

.pdf
Скачиваний:
216
Добавлен:
15.06.2014
Размер:
1.06 Mб
Скачать

Федеральное агентство по образованию Государственное образовательное учреждение высшего профессионального образования

«Омский государственный технический университет»

Практикум по программированию на языке С

Методические указания к лабораторным работам

Омск 2008

Составители: Ольга Павловна Шафеева, канд.техн.наук, доцент, Каворина Юлия Геннадьевна, ст. гр. ИВТ325; Шукурова Гульмира Смагуловна, ст. гр. ИВТ325

Рассмотрены основы алгоритмизации решения задач и программирования на языке СИ. Приводятся примеры разработки алгоритмов и программ для задач разного уровня сложности. Содержатся графические схемы проектируемых алгоритмов.

Предназначены для выполнения студентами лабораторных работ по дисциплинам "Основы алгоритмизации и программирования", "Программирование на языке высокого уровня".

В подготовке методических указаний и отладке программ приняли также участие студенты группы ИВТ325 Грязнова Е.С., Каскевич А.В.

Печатается по решению редакционно-издательского совета Омского государственного технического университета.

УДК 004.43 ББК 32.973.26-018.1

© О.П. Шафеева, 2008 © Омский государственный

технический университет, 2008

2

ВВОД-ВЫВОД В ЯЗЫКЕ СИ. СТРУКТУРА ПРОГРАММЫ

Для реализации лабораторных работ необходима среда Borland С/С++3.1 (3.2). Ее запуск производится через файл bс.exe (BС\BIN\bс.exe). При этом откроется окно редактирования с меню (приложение А).

1. Подготовить в окне редактирования программу, состоящую из одной главной функции:

#include <stdio.h> /* подключение библиотеки <stdio.h> */ void main() /* заголовок главной программы */

{

int x, y, z; /* объявление переменных целого типа */ x = 5; y = 6; /* операторы присваивания */

z = x + y;

printf("сумма =%d\n", z); /* стандартная функция вывода из библ.<stdio.h> */

}

Сохранить программу в файле: имя0_1.с или имя0_1.cpp . Откомпилировать (F9), при необходимости исправить ошибки путем

установки маркера на нужное сообщение и нажатия клавиши <Enter>. Для перехода к другой ошибке нажать <F6> или <F8>, к предыдущей ошибке –

<F7>.

Выполнить программу (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 – для вывода строки символов,

3

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

Основы программирования в среде языка СИ. Оператор присваивания

Оператор присваивания имеет вид <идентификатор> = <выражение>;

В арифметических выражениях могут использоваться операции (приложение Б) и математические функции из библиотек <stdlib.h> и

<math.h> [7].

4

Наиболее часто применяются функции библиотеки <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) – xy;

 

х ;

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). Сначала подключаются библиотеки

5

// из библиотеки <conio.h>
// ввод

#include <stdio.h>

 

// для ввода/вывода

 

#include <conio.h>

// для функций работы с экраном

 

void main ()

 

// Заголовок главной программы

 

{

 

 

 

int A=2, B=3, S; // объявление переменных целого типа

 

clrscr();

//

вызов функции очистки экрана

из библиотеки

<conio.h>

 

 

 

S=A*B ;

// оператор «выражение»

 

printf ("\n Площадь прямоугольника = %d\n", S);

// вывод

getch(); // вызов функции задержки работы до нажатия любой клавиши

}

В результате выполнения программы (Ctrl+F9) на экран выводится сообщение:

Площадь прямоугольника = 6.

Пример 2. Найти площадь равностороннего треугольника. Если стороны треугольника имеют размер А, то его площадь S = A2 sin(π/3)/2. Схема алгоритма (СА) для этой задачи (рис.1) выполнена по ГОСТ 19.701-90

(прил. Г [2]).

 

 

 

Текст программы:

 

 

 

#include <math.h>

 

Начало

#include <stdio.h>

 

 

 

 

 

 

#include <conio.h>

 

Ввод

#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.

S

А 2

sin

 

2

3

 

 

Вывод

S

Конец

Рис.1

Предварительно рассчитанный при подготовке к лабораторной работе на калькуляторе результат для А = 5 составил S = 10.8253, что подтверждает верность программы.

6

Задание 1 (программа 1_1)

x1

x2

a

b

c

 

 

 

 

 

 

 

 

 

Вычислить

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

2

3

4

5

6

 

 

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w ae

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1

2

1.5

2

-0.7

 

x cos (bx) c5

 

 

 

 

 

 

y

 

 

 

 

 

 

sin x

 

c ln ax

2

1

2

0.7

-

2.1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 a2 sin 2 x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

0

2

2

1.2

1

 

z

 

a b esin x c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

1

2

4.1

-2.3

-

 

w

 

 

x3 a2 cos 2x

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a b sin 3x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

-1

1

0.5

2

1.5

y bx2 ea x2 a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x 1,5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ax x 4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

2

4

0.5

1.3

-

 

 

z e

 

x a

 

 

 

 

 

 

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

0

2

0.5

1

-

w e a2

 

 

 

 

 

 

 

 

 

 

ebx

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x 1

x 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

-1

1

2.7

1.7

-

y

 

 

 

 

 

 

 

a2

 

 

 

 

 

 

 

 

ln( a bx)

 

(x 2) e bx

9

0

π/2

2

0.7

0.5

z a3 cos (bx sin 2

x) 3

 

 

 

 

 

 

 

c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

1

0

0.5

2.9

1.5

w

 

ax 2 x cos(bx)

 

bx e x sin( bx) c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y e ax

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

1

2

1.5

-1.2

-

 

ax b sin 2x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

z e bx sin( cx b)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

12

1

2

0.5

1.7

2

 

bx a

 

13

-1

1

0.5

1.2

-

w 2 x arctg(x a) 3 bx cos bx

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e 2x (x b)

14

1

2

0.5

3.1

-

y

 

 

 

 

ax sin 2 x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

1

2

3

4

5

6

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

15

1

2

0.5

3.2

-

z e2x ln( a x) b3x lg( b x)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

16

0

1

1

2

4

 

 

w

 

 

 

x a

 

 

 

3

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

bx3 cx2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

17

0

1

1

3

-

 

 

 

y

 

 

b ex 1

 

 

 

 

 

 

a x

 

x tgx

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

18

-1

2

1

2

-

 

 

 

 

z

a cos(x b)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x4 / 2 sin 2 x

 

 

 

 

 

 

 

w

 

 

 

(b

 

 

 

 

) (x2

 

 

 

c

 

19

1

2

2

3

1

 

ln

 

 

 

x

 

 

 

 

)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x / 4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

20

-1

1

2

π/6

0,5

 

 

y

a cos (x b)

2x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c sin 2 x

 

 

 

Задание 2 (программа 1_2)

1.Идет k секунда суток. Определить, сколько целых часов (h) и целых минут (m) и секунд (s) прошло к этому моменту.

2.Определить площадь трапеции с основаниями а, b, высотой h и

объем усеченного конуса, если считать а, b - площадями оснований.

3.Определить координаты центра тяжести трех материальных точек с массами m1,m2,m3 и координатами (x1,y1), (x2,y2), (x3,y3).

4.Вычислить по заданному радиусу R объем шара и площадь круга, найти соотношение между ними.

5.Вычислить медианы треугольника по заданным сторонам a, b, c.

6.Вычислить площадь поверхности и объем конуса по заданным радиусам и высоте h.

7.По заданному радиусу найти объем шара и площадь поверхности.

8.Вычислить, какая идет секунда суток при положении стрелок в h часов, m минут и s секунд, а также угол (в градусах) между положением часовой стрелки в начале суток и ее положением в указанный момент.

9.Ввести двузначное целое число х<15. Написать программу перевода его в восьмеричную систему счисления.

10.Ввести координаты двух точек (х1, y1), (x2,y2). Найти расстояние между ними.

8

Лабораторная работа 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 <stdio.h>

 

#include <conio.h>

 

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);

9

getch();

}

Оператор выбора switch позволяет в зависимости от значения какойлибо переменной или выражения (ключа выбора) выполнить те или иные операторы, помеченные соответствующими константами.

Структура оператора:

switch (<выражение> )

{

case <константа 1>: <группа операторов 1>; case <константа 2>: <группа операторов 2>;

. . .

case <константа N>: <группа операторов N> default: <операторы>;

}

Начало

Ввод

стажа

 

Да

ZP=100

ST<3

 

 

 

Нет

 

 

ST<=15

Да

ZP=150

 

Нет

Да

ST>=20 ZP=300

Нет

ZP=100+(ST-5)*10

Вывод

ZP

Конец

а)

Рис.2

Начало

Ввод числа углов T

T

1..2

Не фигура

 

3 Треугольник

4Четырехугольник

5

Пятиугольник

иначе Многоугольник

Конец

б)

где <выражение> - выражение (переменная) любого порядкового типа;

<константа> - константа того же типа, что и <выражение>; <оператор> - произвольный оператор C/C++.

10