Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
С Т Р У К Т У А С И - П Р О Г Р А М М Ы
Программа на Си, каких бы размеров она ни была, состоит из функций и переменных. Функции содержат инструкции, описывающие вычисления, которые необходимо выполнить, а переменные хранят значения, используемые в процессе этих вычислений. Обычная СИ-программа представляет собой определение функции main, которая для выполнения необходимых действий вызывает другие функции. Обычно можно давать любые имена для своих функций, но “main" - особое имя: любая программа начинает свои вычисления с первой инструкции функции main. Кроме функций, которые разрабатываются самим программистом, может использоваться большое количество функций, включенных в библиотеки Си. Пример Си-программы, в которой с клавиатуры вводится значение вещественной переменной x, вычисляется y=x2 и распечатывается на экране. // Возведение числа в квадрат //Заголовочные файлы включаемых библиотек #include < stdio.h> #include< conio.h> #include< windows.h> //Функция возведения вещественного числа в квадрат double Sqr(double x) { return x*x; //возведения х в квадрат } //Главная функция программы int main() { //Определение переменных double x, y; /*Функции для подключения кириллицы в консольном окне при вводе/выводе данных*/ SetConsoleOutputCP(1251); SetConsoleCP(1251); //Ввод значения аргумента printf(" \n Введите значение x= "); scanf(" %lf", & x); //Возведение x в квадрат, запись его в y y=Sqr(x); //Печать результата printf(" \n Квадрат х=%-9.3lf составляет y=%-9.3lf", x, y); //Ожидание нажатия клавиши getch(); return 0; } В тексте программы использованы комментарии для пояснения хода выполнения вычислений, которые значительно облегчают понимание и сопровождение программы. В примере используются 2 функции Sqr() и main(), определенные в программе. Скобки (), стоящие после идентификатора, указывают на то, что это функция. Также используются функции, определенные в библиотеках Си. Для того, чтобы сообщить компилятору, что он должен включить информацию о подключаемых библиотеках, в первых 3-х строках программы используются директивы препроцессора, начинающиеся с инструкции #include. В директивах указаны имена заголовочных файлов библиотек. Для функций pintf() и scanf() подключается заголовочный файл стандартной библиотеки ввода-вывода stdio.h, в котором они определены. Функции SetConsoleOutputCP(1251) и SetConsoleCP(1251) используются для подключения кодовой страницы 1251 (кириллические символы) при вводе/выводе данных в консольном окне. Они определены в файле windows.h. Функция getch(), определенная в файле стандартной библиотеки работы с консолью conio.h, ожидает ввода символа с клавиатуры и возвращает его код. В языке СИ все переменные должны быть определены до их использования. Определения устанавливают соответствие имени и атрибутов переменной, функции или типа. Определение переменной вызывает выделение памяти для хранения ее значения. Строка double Sqr(double x) является определением функции с именем Sqr. Один из способов передачи данных между функциями состоит в том, что функция при обращении к другой функции передает ей список значений, называемых аргументами. Этот список берется в скобки и помещается после имени функции. Функции Sqr в качестве параметра передается значение вещественного аргумента (double x). Слово double перед именем функции указывает на то, она возвращает значение вещественного типа. Функция - имеет { " блок" } в фигурных скобках. Блок - это инструкции, написанные на языке Си. Он определяет, что делает функция. Знак «;» после блока в определении функции не ставится. Блок содержит последовательность объявлений, определений и операторов. Возведение аргумента в квадрат выполняется в операции x*x. Оператор return возвращает из функции вычисленное значение. Поэтому блок функции Sqr() содержит только 1 оператор. Главная функция программы main() не ждет никаких аргументов, что отмечено пустым списком ().Онаначинается с определения переменных. При определении переменных указывается тип, после которого задается список переменных данного типа, заканчивающийся знаком "; ": тип < список переменных>;. В функции main() определены две переменные double x, y;. При определении переменных их можно проинициализировать (задать начальное значение). Определение double x, y=0.0; указывает, что переменной y будет присвоено значение 0. Функция вызывается по имени, после которого, в скобках, указывается список аргументов. Таким образом, приведенные ниже строки - это вызов функций с аргументом " 1251": SetConsoleOutputCP(1251); SetConsoleCP(1251);. Эти функциииспользуются для подключения кириллицы в консольном окне при вводе/выводе данных. При вызове функции SetConsoleOutputCP(1251) выполнение main() приостанавливается, и управление передается на первый оператор вызванной функции. После завершения работы вызванной функции управление возвращается в main() на следующий оператор. При вводе значения х функцией printf() в консольном окне будет напечатано переданное ей в параметрах приглашение «Введите значение x=». Функция scanf() приостановит выполнение программы, открывает консольное окно и ожидает окончания ввода данных. Если ввести, например, 123.54 и нажать < Enter>, выполнение программы продолжится. После ввода значения аргумента х выполняется оператор присваивания: y=Sqr(x); В нем вызывается функция Sqr(), которой в параметре передается значение х. Функция возвращает значение х2, которое будет сохранено в переменной y. Далее функцией printf() результат распечатывается на экране монитора. На экран выводятся значения х и у= х2, отформатированные на ширину поля из 9-и знаков с 3-мя знаками после десятичной точки, и выровненные по левому краю: Квадрат х=123.540 составляет y=15262.132.
При вызове функции getch(), вновь откроется консольное окно, и будет ожидаться ввод символа с клавиатуры. Пока ожидается ввод символа, консольное окно остается открытым. В это время можно просмотреть полученные результаты. После чего нажимается любая клавиша. Функция getch(), вернет код нажатой клавиши. Но, так как он в программе использоваться не будет, он не сохраняется в переменной. Работа функции main() заканчивается оператором return 0; Функция возвращает операционной системе значение 0 – признак успешного завершения программы. Таким образом, можно сказать, что программа на языке Си состоит из функций, определений и директив. Одна из функций должна иметь имя main. Общая структура программы на Си следующая: директивы_препроцессора определения_объектов; определение_функции_1 определение_функции_2 ... определение_функции_N Определение функции и имеет структуру: тип имя_функции(< список параметров>) { определения_объектов; исполняемые_операторы; }
|