Программирование
.pdfФедеральное государственное бюджетное учреждение высшего профессионального образования
«ОМСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
ПРОГРАММИРОВАНИЕ И ОСНОВЫ АЛГОРИТМИЗАЦИИ
Методические указания к лабораторный работам
Омск Издательство ОмГТУ
2012
Составитель: Е. С. Гебель
Лабораторный практикум содержит методические рекомендации по выполнению лабораторных работ в объеме курса «Программирование и основы алгоритмизации» и предназначен для организации и управления самостоятельной работой студентов. Содержит описание особенностей программирования в среде Borland C/C++, синтаксиса и семантики языка С++. Приведены примеры листингов программ, предложены варианты индивидуальных заданий.
Лабораторный практикум предназначен для студентов дневной формы обучения по направлениям 220700 «Автоматизация технологических процессов и производств» и 220400 «Управление в технических системах».
Печатается по решению редакционно-издательского совета Омского государственного технического университета
2
Лабораторная работа 1
ОСНОВЫ ПРОГРАМИРОВАНИЯ В СРЕДЕ Borland C++.
АЛФАВИТ ЯЗЫКА, ЗАРЕЗЕРВИРОВАНЫЕ СЛОВА,ОПЕРАТОРЫ
Приступая к изучению языка, рассмотрим сначала правила программирования (написания текста):
1.Программирование должно быть наглядным (иметь титул, пояснительный текст).
2.Писать следует структурировано (выделяя отступами циклы, ветвления). Выделять текст можно любым количеством пробелов, пустых строк, кроме этого существуют комментарии.
3.Большие и сложные программы следует разбить на несколько простых частей и отлаживать их по отдельности.
Алфавит
Приступая к языку, следует начать с алфавита, т.е. набора символов, допустимых в языке, которыми оперирует язык.
Идентификатор – это имя любого объекта в языке. Следует придерживаться следующих правил создания имен:
1.Допускается использование английских букв и цифр.
2.Начинаться должно с буквы.
3.Прописные и строчные буквы считаются разными.
4.Должны не совпадать с зарезервированными словами. Зарезервированые слова – это специальные идентификаторы, которые
используются строго по назначению.
Список таких слов невелик. Как правило, такие слова обозначают какиелибо действия, структуры в языке. Согласно этим правилам следующие имена
допускаются: аsm auto break case catch char |
class |
const |
continue |
default |
|
do double enum extern float |
goto if |
long |
new |
operator |
private |
protected public register return short signed sizeof stati struct switch template this throw try typedef typeid union unsigned virtual void volatile while.
Комментарий – специальный текст внутри таких скобок, который не считается программой, а служит или для пояснения программы, или для отладки. Обозначается // или /*…*/
Специальные знаки делятся на:
1.знаки операторов: {}, [], (), ‘,:=, ;, ., .. и т.д.
2.знаки операций: +, -, *, /, %.
3.зарезервированные слова.
Логические операторы. Используются для задания различных логических
3
условий для проверок. Соответствуют операторам булевой алгебры: && – логическое и; || – логическое или; ! – логическое не;
<< – сдвиг содержимого влево на один разряд; >>– сдвиг содержимого вправо на 1 разряд.
Операции SHL и SHR практически соответствуют операциям соответственно умножения и деления на 2 для целых чисел.
Операторы отношения:
== проверка на равенство; > больше; < меньше;
>= больше или равно; <= меньше или равно; != не равно.
СТРУКТУРА ПРОГРАММЫ
Программа представляет собой совокупность логически самостоятельных этапов. Программа состоит из определенных разделов и в указанном порядке
(табл. 1):
|
Таблица 1 |
|
Название раздела |
Ключевые слова, указывающие раздел |
|
в программе |
||
|
||
|
|
|
Библиотечные файлы |
# include <…> |
|
Директивы препроцессора |
#if, #elif, #else, #endif |
|
Макроопределения |
#define …. |
|
Пользовательские функции |
тип имя_функции (список параметров) |
|
Пользовательские типы данных |
struct .. |
|
Имя главной функции |
тип main (тип параметров) |
|
Переменные |
тип идентификатор = инициализирующее |
|
значение |
||
|
||
|
|
Операторные скобки { … } указывают начало и конец тела процедуры, функции или управляющего оператора.
Процедуры и функции – специальные программы, которые могут выполнять повторяющиеся участки с разными начальными данными (параметрами). В нужный момент описанные заранее они вызываются на выполнение. Могут быть стандартные (встроенные) и пользовательские процедуры и функции. Конструкцией, описанной выше, задаются
4
пользовательские. Стандартные же не описываются, но требуют подключения соответствующих библиотечных файлов, содержащих их описание. Например, при использовании функции вывода printf() необходимо подключить #include <stdio.h> .
ОСНОВНЫЕ ТИПЫ ДАННЫХ
Любые данные характеризуются своими типами. Тип определяет множество допустимых значений, которые может иметь тот или иной объект, операции, применимые к нему, а также формат внутреннего представления. В С++ требуется задавать тип переменной перед ее использованием.
Рассмотрим простые типы и их разновидность – порядковые типы. Порядковый тип назван так потому, что его значения относятся к упорядоченному множеству, всегда можно сказать, какое следующее, какое предыдущее значение, какой порядковый номер у значения (табл. 2).
|
|
|
Таблица 2 |
№ |
Обозначение |
Диапазон |
Тип данных |
1 |
short, short int, |
-32768... |
Короткое целое со знаком |
|
signed short , |
32767 |
|
|
signed short int |
|
|
|
|
|
|
2 |
unsigned short, |
0...65535 |
Короткое целое без знака |
|
unsigned short int |
|
|
|
|
|
|
3 |
int, signed, |
Зависит от |
Целое |
|
signed int |
реализации |
|
|
|
|
|
4 |
unsigned, |
Зависит от |
Целое без знака |
|
unsigned int |
реализации |
|
|
|
|
|
5 |
long, signed long, |
-2147483648… |
Длинное целое со знаком |
|
long int |
2147483647 |
|
|
|
|
|
6 |
unsigned long |
0...4294967295 |
Длинное целое без знака |
|
Символьный тип определяется зарезервированным словом CHAR и |
||
задает полный набор ASCII-символов (табл. 3). |
|
||
|
|
|
Таблица 3 |
|
|
|
|
№ |
Обозначение |
Диапазон |
Тип данных |
1 |
char, |
-128...127 |
Символьный |
|
signed char |
|
со знаком |
|
|
|
|
2 |
unsigned char |
0...255 |
Символьный без знака |
Другая разновидность простых типов – вещественный тип. Имеется пять стандартных типов для представления дробных величин (табл. 4).
5
|
|
|
Таблица 4 |
№ |
Обозначение |
Диапазон |
Тип данных |
1 |
float |
-3.4e-38... |
Вещественное число с |
|
|
3.14e+38 |
плавающей точкой |
|
|
|
|
2 |
double |
-1.7е-308..1.7е308 |
Вещественное число |
|
|
|
удвоенной точности |
|
|
|
|
3 |
long double |
-3.4e-4932... |
Длинное вещественное |
|
|
3.4e4932 |
число удвоенной точности |
|
|
|
|
Для непосредственного обозначения логических значений в C++ используются целочисленные значения 0 - ложь и 1 - истина. Кроме того, в логических операциях любое ненулевое значение операнда ассоциируется с единицей. Поэтому отрицанием нулевого значения является 1, т.е. истина, а отрицанием любого ненулевого значения оказывается 0, т.е. ложь.
Тип void (отсутствие типа) не имеет ни значений, ни действий.
ОПЕРАТОР ПРИСВАИВАНИЯ, ПРОЦЕДУРЫ ВВОДА-ВЫВОДА
С помощью оператора присваивания переменной или функции присваивается значение выражения. Для этого применяется знак «=», слева от которого записывается имя переменной или функции, а справа – выражение, значение которого вычисляется перед присваиванием. Структура оператора в С++ записывается в виде
<идентификатор> = <выражение>;
Допускается для идентификаторов использовать любой тип, за исключением файлового, причем тип идентификатора и тип выражения должны быть совместимы.
В выражениях могут использоваться математические (библиотека math.h), логические операции и операции отношения (табл. 5).
|
|
|
|
|
|
Таблица 5. |
|
Обращение |
Выполняемая |
|
Тип |
|
|||
|
функция |
Аргумента |
|
Функции |
|
||
|
|
|
|
|
|
|
|
abs(x) |
|Х| |
Целый |
|
Целый |
|||
fabs(x) |
|Х| |
вещественный |
|
вещественный |
|
||
|
|
|
|
|
|
||
sin(x) |
sin X |
|
|
|
|
||
cos(x) |
cos X |
|
|
|
|
||
log(x) |
ln (X) |
|
|
|
|
||
exp(x) |
ex |
|
|
|
|
||
sqrt(x) |
|
|
|
|
|
|
|
|
х |
|
|
|
|
||
atan (x) |
arctg X |
Целый или |
|
вещественный |
|
||
|
|
|
|
|
|
|
|
6
asin(x) |
arcsin x |
вещественный |
|
acos(x) |
arcos x |
|
|
log10(x) |
lg x |
|
|
pow(x,y) |
xy |
|
|
В C++ предусмотрено использование таких математических констант как
M_Pi=3.1415926535897932385, M_Pi_2, M_Pi_4 и M_E=2.7. Более сложные математические функции получаются путем комбинации базовых, которые перечислены выше.
При использовании стандартных функций ввода/вывода в выполняемой программе указывается библиотечный файл stdio.h. Вывод результатов (по формату) на экран осуществляется с помощью функции:
printf(“строка форматов”, [список выводимых аргументов]
Пример. printf (“Итого %d\n”, y);
При вызове printf() обязательно передается в качестве аргумента хотябы одна строка, например printf (“Введите число”);. Строка форматов состоит из символов, которые выводятся без изменения, и символов, задающих преобразование данных. Спецификации преобразования формата имеют вид:
|
% [флаг] [ширина] [.точность]символ формата |
|
Пример. printf(“х=%+3.2f\n y=%5d\a”, x, y); |
||
Флаг может принимать следующие значения, записанные в табл. 6. |
||
|
Таблица 6. |
|
|
|
|
Значения флага |
Описание |
|
- |
Выравнивание по левому краю |
|
+ |
Всегда выводить знак (+ или -) |
|
0 |
Заполнять лишнее пространство нулями вместо пробелов |
|
# |
Выводить 0 перед восьмеричными и 0х перед |
|
|
шестнадцатеричными константами |
|
|
|
|
Ширина – это минимальный размер поля вывода. Точность – это число цифр после десятичной точки для вещественных переменных.
Управляющие символьные константы (табл. 7) или escape-символы применяются для представления символов и чисел, которые нельзя непосредственно ввести с клавиатуры. Еscape-последовательность начинается с косой черты \ и заключается в кавычки.
Таблица 7.
Символьная константа |
Описание |
\n |
Переход на новую строку |
\a |
Звуковой сигнал |
\t |
Горизонтальная табуляция |
7
\v |
|
Вертикальная табуляция |
\b |
|
Возврат на символ |
\r |
|
Возврат на начало строки |
Символы формата определяют тип аргумента (табл. 8). |
||
|
|
|
Символьная константа |
|
Описание |
%с |
символ |
|
%d |
целое десятичное число |
|
%i |
целое десятичное число |
|
%е |
десятичное число в виде х.хх е+хх |
|
%f |
десятичное число с плавающей занятой хх.хххх |
|
%g |
%f или %е, что короче |
|
%о |
восьмеричное число |
|
%s |
строка символов |
|
%х |
шестнадцатеричное число 5a5f |
|
%р |
указатель |
Функция формализованного ввода scanf() предназначения для чтения данных из входного потока и интерпретации их в соответствии со строкой управления форматом.
scanf(“%строка форматов”, &имя переменной);
После преобразования данные записываются в область памяти определенными аргументами, которые следуют за строкой управления форматом. Каждый аргумент списка должен быть указателем на переменную, тип которой соответствует типу, указанному в строке управления форматов, т.е. перед именем аргумента должен указываться символ & (“взять адрес”).
Пример. scanf (“%d %f”, &x, &y);
Пример. Вычислить площадь треугольника по формуле Герона , если длины его сторон А, В и С вводятся с клавиатуры.
Алгоритм программы показан на рис. 1. Листинг программы на языке
С++: |
|
#include <stdio.h> |
// библиотека, содержащая описание |
// операторов ввода/вывода |
|
# include <conio.h> |
// библиотека, содержащая описание |
|
// операторов для работы с экраном |
# include <math.h> |
// библиотека, содержащая описание |
//математических операторов |
|
void main() |
// заголовок главной функции программы |
{ int a, b, c; |
// описание целочисленных идентификаторов |
8
float p, s; |
// описание вещественных идентификаторов |
|
clrscr (); |
// процедура очистки экрана |
|
printf(“Vvedite dliny storon a, b, c \n”); |
// вывод информационного |
|
|
|
// сообщения |
scanf (“%d%d%d”, &a,&b,&c); |
// ввод значений a, b и с |
|
p=(a+b+c)/2; |
|
// вычисление полупериметра |
s=sqrt(p*(p-a)*(p-b)*(p-c)); |
// вычисление площади |
|
printf (“Ploshad S=%4.2f\n”, s); |
// вывод результата |
|
getch(); |
|
// процедура задержки экрана, |
|
// пока не нажата любая клавиша |
}
В результате работы программы на экран выводится сообщение:
Ploshad S=……
Начало
a, b, c
p=(a+b+c)/2
s p p a p b p c
s
Конец
Рис. 1.
Лабораторная работа 2 ПРОГРАМИРОВАНИЕ РАЗВЕТЛЕНЫХ АЛГОРИТМОВ.
ОПЕРАТОРЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ
Оператор безусловной передачи управления позволяет изменить обычный последовательный порядок выполнения операторов и перейти к заданному оператору, помеченному меткой. Структура оператора:
9
goto <идентификатор-метка>;
Метка – это идентификатор, за которым следует двоеточие. Метка должна находиться в той же функции, что и оператор goto. Одно из полезных применений оператора goto – это выход из вложенных циклов.
Условный оператор позволяет проверить некоторое условие и в зависимости от результата проверки выполнить то или иное действие, т.е. сделать ветвление в программе.
Оператор ветвления записывается следующим способом: if (<выражение>) <оператор 1;>
else (<оператор 2>);
Существует два варианта оператора if: так называемые полная и краткая формы. Полная форма этого оператора приведена выше. Если значение условия «истинно», то выполняется оператор 1 (им может быть составной оператор – блок, который в программе выделяется операторными скобками {…}), следующий за условием. Если же условие принимает значение "ложно", то выполняется оператор 2, следующий за ключевым словом else.
В записи оператора if вторая часть (т. е. оператор else) может отсутствовать (краткая форма):
if (<выражение>) <оператор;>
Тогда, если условие принимает значение «ложно», выполняется сразу следующий оператор программы. В языке С++ нет логического типа, поэтому в качестве условия может стоять произвольное выражение. В операторе if лишь проверяется, является ли значение этого выражения ненулевым (истинным) или
нулевым (ложным). |
|
|
|
Пример: a) if (k != 0) k = k+1; |
b) if (k) |
k++; |
|
|
else k = k-1; |
else |
k--; |
Часто встречается необходимость использовать конструкцию if-else-if: |
|||
if (<выражение>) <оператор 1;> |
|
|
|
else |
if (<оператор 2>); |
|
|
… |
|
|
|
else |
if (<оператор n>); |
|
|
else |
(<оператор n+1>); |
|
|
В этой форме условия операторов if проверяются сверху вниз. Как только какое-либо из условий принимает значение «истинно», выполнится оператор, следующий за этим условием, а вся остальная часть конструкции будет проигнорирована.
10