Структура программы на языке Си
Каждая программа на языке Си – это последовательность препроцессорных директив, описаний и определений глобальных объектов и функций. Препроцессорные директивы управляют преобразованием текста программы до ее компиляции. Определения вводят функции и объекты. Объекты необходимы для представления обрабатываемых данных. Функции определяют потенциально возможные действия программы. Описания уведомляют компилятор о свойствах и именах тех объектов и функций, которые определены в других частях программы.
Структуру программы на языке Си можно определить следующим образом:
директивы_препроцессора
int main (void)
{
определения_объектов;
исполняемые_операторы;
}
Программа на языке Си должна быть оформлена в виде одного или нескольких текстовых файлов. Текстовый файл разбит на строки. В конце каждой строки есть признак ее окончания. Определения и описания программы могут располагаться в тексте достаточно произвольно. Для препроцессорных директив существуют ограничения:
1. препроцессорная директива обычно размещается в одной строке.
2. все директивы начинаются с символа #.
Препроцессор сканирует исходный текст программы в поиске строк, начинающихся с #. Такие строки воспринимаются препроцессором как команды, которые определяют действия по преобразованию текста. Директива #include <…> предназначена для включения в текст программы текста файла из каталога заголовочных файлов, поставляемых вместе со стандартными библиотеками компилятора.
После выполнения обработки в тексте программы не остается ни одной препроцессорной директивы. Теперь программа представляет собой набор описаний и определений.
В программе всегда должна присутствовать функция с именем main. Именно эта функция является главной функцией программы, без которой программа не может быть выполнена. Имя этой функции для всех программ одинаково и не может выбираться произвольно.
Перед именем каждой функции программы следует помещать сведения о типе возвращаемого функцией значения (тип результата). Функция main() является той функцией программы, которая запускается на исполнение по командам операционной системы. Возвращаемое функцией main() значение также передается операционной системе.
Пример:
Вычислить объем цилиндра высотой h и радиусом r.
#include<stdio.h>
#include<conio.h>
int main(void)
{
int r, h; float v, pi = 3.14159;
clrscr();
printf(“Enter r = ”);
scanf(“%d”, &r);
printf(“Enter h = ”);
scanf(“%d”, &h);
if(h>0 && r>0)
{
v = pi*h*r*r;
printf(“ V = %f”, v);
}
else
printf(“Error!!! ”);
getch();
return 0;
}
Лекция № 6 |
Написал Дмитрий | ||||||
25.11.2008 | ||||||
Условный оператор if
Основные операторы языка Си можно условно разделить на 3 группы:
1. операторы выбора;
2. операторы циклов;
3. операторы переходов.
Условный оператор if, относящий к операторам выбора, имеет 3 формы. Первая форма – сокращенная:
if(выражение_условие)
операторы_дествия;
![]() ![]() ![]()
Оператор множественного выбора switch Основным средством для организации мультиветвления служит оператор- переключатель switch. Основная форма оператора: switch(выражение) { case константа_1: действия_1; break; case константа_2: действия_2; break; … case константа_N: действия_N; break; default: действия; } Сначала вычисляется выражение в скобках за ключевым словом switch. Затем просматривается список меток (case константа_1 и так далее) до тех пор, пока не находится метка, соответствующая значению вычисленного выражения. Далее происходит выполнение соответствующей последовательности действий, следующих за двоеточием. Если же значение выражения не соответствует ни одной из меток оператора switch, то выполняется последовательность действий, следующая за ключевым словом default. Допускается конструкция switch, когда слово default и соответствующая последовательность конструкция операторов может отсутствовать. Когда в последовательности операторов встречается ключевое слово break, то выполнение оператораbreak приводит к выходу из оператора switch и переходу к следующему оператору программы. Наличие оператора break необязательно.
Пример [программа pr_6, pr_7]:
|
Лекция № 7 |
Написал Дмитрий |
25.11.2008 |
Циклы
Циклы необходимы, когда нам надо проверить некоторые действия несколько раз, как правило, пока выполняется некоторое условие. В языке Си известно три оператора цикла: for(параметрический), while(с предусловием) и do-while(с постусловием).
Основная форма цикла for имеет следующий вид:
for(выражение_1; выражение_2; выражение_3)
операторы_действия;
или
for(инициализация; проверка условия; шаг цикла)
операторы_действия;
![]() ![]() ![]() ![]() |
Лекция № 8 |
Написал Lekka |
14.11.2008 |
Указатели
В языке Си, кроме базовых типов, разрешено вводить и использовать производные типы, каждый из которых получен на основе более простых типов. Стандарт языка определяет три способа получения производных типов:
1. указатель на объект заданного типа;
2. массив элементов заданного типа;
3. функция, возвращающая значение заданного типа.
Указатель – это объект, значением которого является адрес других объектов: переменных, массивов, функций.
Описание указателя имеет следующий вид:
тип *имя_указателя;
Переменная в программе – это объект, имеющий имя и значение. По имени можно обратиться к переменной и получить ее значение. С точки зрения машинной реализации имя переменной соответствует адресу того участка памяти, который для нее выделен, а значение переменной – содержимому этого участка памяти. Соотношение между именем и адресом условно показано на рисунке 15.
![]() ![]() ![]() |
Лекция № 9 |