(2 часа)
Цель работы: Изучение логической организации программы и простейшее использование функций в Турбо Си.
Процесс разработки программного обеспечения предполагает разделение сложной задачи на набор более простых задач и заданий. В (Турбо) Си поддерживаются функции как логические единицы (блоки текста программы) , служащие для выполнения конкретного задания.
Важным аспектом разработки программного обеспечения является функциональная декомпозиция.
Функции имеют нуль или более формальных параметров и возвращают значение скалярного типа, типа void (пусто) или указатель. При вызове функции значения, задаваемые на входе, должны соответствовать числу и типу формальных параметров в описании функции. Если функция не возвращает значения (т.е. возвращает void), то она служит для того, чтобы изменять свои параметры (вызывать побочный эффект) или глобальные для функции переменные.
Например, функция, возвращающая куб ее вещественного аргумента:
double cube( double x )
{
return x * x * x ;
}
Аргумент х типа double специфицируется вслед за первой открывающей скобкой. Описание extern , помещаемое в функцию main , является ссылкой вперед , позволяющей использовать функцию cube в функции main. Ключевое слово extern можно опускать, но сама ссылка вперед на описание функции является обязательной.
Логическая организация простой программы на Турбо Си.
(Турбо) Си предоставляет необычайно высокую гибкость для физической организации программы или программной системы.
В табл.1 показана типичная организация небольшой программы на (Турбо) Си.
/* Заголовки и комментарии, описывающие программу */
/* Директивы include */
#include имя_файла_1
...
#include имя_файла_n
/* Макро */
#define макро_1 значение_1
...
#define макро_n значение_n
/* Описание глобальных переменных */
тип_данных глобальная_переменная_1;
...
тип_данных глобальная_переменная_n;
main()
{
/* описание extern, обеспечивающие ссылку вперед на функции и используемые в теле функции main */
/* Описание локальных переменных */
тип_данных локальная_переменная_1;
...
тип_данных локальная_переменная_m;
/* Тело функции main */
...
}
/* Функции, используемые в программе main */
Тип_данных имя_функции_1( формальные параметры )
{
/* Описание extern, обеспечивающее ссылку вперед на функции и используемые в теле данной функции */
/* Описание локальных переменных */
тип_данных локальная_переменная_1;
...
тип_данных локальная_переменная_u;
/* Тело функции - 1 */
...
}
...
Тип_данных имя_функции_n( формальные параметры )
{
/* Описание extern, обеспечивающая ссылку вперед на функции и используемые в теле данной функции n */
/* Описание локальных переменных */
тип_данных локальная_переменная_1;
...
тип_данных локальная_переменная_r;
/* Тело функции n */
...
}
Cтруктура каждой функции совпадает со структурой главной программы (main). Поэтому функции иногда еще называют подпрограммами.
Подпрограммы решают небольшую и специфическую часть общей задачи.
Задание: Составить и распечатать программу, вычисляющую кубы чисел, заданных разными способами.
Лабораторная работа 5
Типы констант. Использование констант в (Турбо) Си
(2 часа)
Цель работы: Изучение использования констант различных типов в Турбо Си.
В языке (Турбо) Си имеются четыре типа констант: целые, вещественные (с плавающей точкой), символьные и строковые.
Константы целого типа
Константы целого типа могут задаваться в десятичной, двоичной, восьмеричной или шестнадцатеричной системах счисления.
Десятичные целые константы образуются из цифр. Первой цифрой не должен быть нуль.
Восьмеричные константы всегда начинаются с цифры нуль, вслед за которой либо не стоит ни одной цифры, либо стоят несколько цифр от нуля до семерки.
Шестнадцатеричные константы всегда начинаются с цифры нуль и символа х или Х, все, за которыми может стоять одна или более шестнадцатеричных цифр.
Шестнадцатеричные цифры - это десятичные цифры от 0 до 9 и латинские буквы: a, b, c, d, e, f, или A, B, C, D, E, F.
Например: задание константы 3478 в десятичном, восьмеричном и шестнадцатеричном виде:
int a = 3478,
b = 06626,
c = 0хD96;
К любой целой константе можно справа приписать символ l или L, и это будет означать, что константа - длинная целая (long integer). Символ u или U, приписанный к константе справа, указывает на то, что константа целая без знака (unsigned long).
Считается, что значение любой целой константы всегда неотрицательно. Если константе предшествует знак минус, то он трактуется как операция смены знака, а не как часть константы.
Константы вещественного типа
Константы с плавающей точкой (называемые вещественными) состоят из цифр, десятичной точки и знаков десятичного порядка е или Е. Ниже приведены все возможные варианты записи констант вещественного типа:
1. 2e1 .1234 .1e3
.1 2E1 1.234 0.0035e-6
1.0 2e-1 2.1e-12 .234
Cимвольные константы
Cимвольные константы заключаются в апострофы (кавычки). Все символьные константы имеют в (Турбо) Си значение типа int (целое), совпадающее с кодом символа в кодировке ASCII.
Одни символьные константы соответствуют символам, которые можно вывести на печать, другие - управляющим символам, задаваемым с помощью esc - последовательности, третьи - форматирующими символами, также задаваемым с помощью esc - последовательности.
Например:
символ " апостроф " задается как '\'', переход на новую
строку - как '\', а обратный слэш - как '\'.
Каждая esc - последовательность должна быть заключена в кавычки.
Управляющие коды
\n Новая строка
\t Горизонтальная табуляция
\v Вертикальная табуляция
\b Возврат на символ
\r Возврат в начало строки
\f Прогон бумаги до конца страницы
\ Обратный слэш
\' Одинарная кавычка
\" Двойная кавычка
\а Звуковой сигнал
\? Знал вопроса
\ddd Код символа в ASCII от одной до трех восьмеричных цифр
\xhhh Код символа в ASCII от одной до трех шестнадцатеричных цифр.
Строковые константы
Строковые константы состоят из нуля или более символов, заключенных в двойные кавычки. В строковых константах управляющие коды задаются с помощью esc - последовательности. Обратный слэш используется как символ переноса текста на новую строку.
Пример описания строковых констант:
# include <stdio.h>
main( )
{
char *str1, *str2;
str1=“ Пример использования\n\n”;
str2=“строковых\
констант.\n\n”;
printf(str1);
printf(str2);
}
Программа выведет следующий текст:
Пример использования
строковых констант.
Задание: Написать и распечатать программу, выводящую на экран строковую константу и число, состоящее из цифр вашего дня рождения, заданное в виде десятичной, восьмеричной и шестнадцатеричной константы.
Лабораторная работа 6
Управляющие структуры (Турбо) Си
(2 часа)
Цель работы: Изучение приемов использования операторов ветвления и операторов циклов в Турбо Си.
Управляющие структуры или операторы управления служат для управления последовательностью вычислений в программе. Операторы ветвления и циклы позволяют переходить к выполнению другой части программы или выполнять какую-то часть программы многократно, пока удовлетворяется одно или более условий .
Блоки и составные операторы.
Любая последовательность операторов, заключенная в фигурные скобки, является составным оператором(блоком). Составной оператор не должен заканчиваться (;), поскольку ограничителем блока служит сама закрывающаяся скобка. Внутри блока каждый оператор должен ограничиваться (;).
Составной оператор может использоваться везде, где синтаксис языка допускает применение обычного оператора.
Пустой оператор.
Пустой оператор представляется символом (;), перед которым нет выражения. Пустой оператор используют там, где синтаксис языка требует присутствия в данном месте программы оператора, однако по логике программы оператор должен отсутствовать.
Необходимость в использовании пустого оператора часто возникает, когда действия, которые могут быть выполнены в теле цикла, целиком помещаются в заголовке цикла.
Операторы ветвления.
К операторам ветвления относятся if, if else, ?,switch и go to. Общий вид операторов ветвления следующий:
if (логическое выражение)
оператор;
-------------------------------------------------------------------
if (логическое выражение)
оператор_1;
else
оператор_2;
-------------------------------------------------------------------
<логическое выражение> ? <выражение_1> : <выражение_2>;
Если значение логического выражения истинно, то вычисляется выражение_1, в противном случае вычисляется выражение_2.
-------------------------------------------------------------------
switch (выражение целого типа)
{
case значение_1:
последовательность_операторов_1;
break;
case значение_2:
последовательность_операторов_2;
break;
. . .
case значение_n:
последовательность_операторов_n;
break;
default:
последовательность_операторов_n+1;
}
Ветку default можно не описывать. Она выполняется, если ни одно из вышестоящих выражений не удовлетворено.
-------------------------------------------------------------------
Оператор цикла.
В Турбо Си имеются следующие конструкции, позволяющие программировать циклы: while, do while и for. Их структуру можно описать следующим образом:
while( логическое выражение)
оператор;
Цикл с проверкой условия наверху
--------------------------------------------------------------
do
оператор;
while (логическое выражение);
Цикл с проверкой условия внизу
--------------------------------------------------------------
for (инициализация, проверка, новое_значение)
оператор;
----------------------------------------------------------------