Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Козак Н.В. Лекции Основы создания программ в Си...doc
Скачиваний:
24
Добавлен:
23.09.2019
Размер:
2.24 Mб
Скачать

Базовые элементы языка Си

Простейшее консольное приложение на языке Си имеет следующий вид:

#include <stdio.h>

#include <conio.h>

/*

** Печать простого сообщения.

*/

#pragma argsused

int main(int argc, char* argv[])

{

printf("Hello World!\n");

printf ("Press a key...\n");

getch();

return 0;

}

При запуске программа выдает сообщение Hello… и запрашивает нажатие любой кнопки, после чего выполнение программы завершается.

Первые две строчки являются с директивой (т.е. указанием) #include для препроцессора. Все строчки программы начинающиеся с символа # являются директивами для препроцессорной обработки. Директивы #include означают, что каждую из них следует заменить на содержимое файла, имя которого указано в угловых скобках. Это необходимо для проверки корректности вызова библиотечных функций printf и getch соответственно имеющих объявления в этих заголовочных файлах.

Далее 3 троки являются просто комментариями заключенными между парами символов /* … */, которые служат для описание кода программы и полностью игнорируются компилятором.

После директив и комментариев в программе расположено определение функции main (). Любая программа на Си содержит эту функцию, которая является ее входной точкой. В среде Windows вместо main () часто используется winMain ().Функция main () — это, конечно, частный случай функции вообще. Функции являются основными «строительными блоками» программы, или подпрограммами. Они, в свою очередь, строятся из операторов, составляющих тело функции. Каждый оператор оканчивается точкой с запятой (;). В общем виде функция определяется таким образом:

возвращаемый_тип имя_функции(список_параметров)

{

// В фигурных скобках заключено тело функции,

// составленное из отдельных операторов.

тело_функции

}

Представление данных в Си

Литералы

Данные могут присутствовать непосредственно в тексте программы. В этом случае они представляются в виде литеральных констант. Литералы могут быть числовыми, символьными и строковыми. В приложении Hello мы пользовались строковыми литералами. Это — последовательность символов, заключенная в двойные кавычки.

Символьный литерал служит для представления одиночного знака. Это символ, заключенный в одиночные кавычки (апострофы).

Числовые литералы могут быть вещественными (с плавающей точкой) и целыми.

В таблице 3.1 перечислены все упомянутые выше виды литеральных констант и даны соответствующие примеры (в листочке приложения).

Можно дать литеральной константе некоторое имя, определив ее в качестве макроса препроцессора.

#define PI 3.14159265

#define num_e 2.4

#define TRUE 1

#define FALSE 0

После этого можно вместо литерала использовать указанное имя. Это особенно удобно в том случае, когда одна и та же константа встреча­ется в различных частях программы; используя имя вместо литералов, вы га­рантированы от опечаток и, кроме того, гораздо проще вносить в код измене­ния только в одном месте, если значение константы нужно модифицировать во всей программе.

Встроенные типы данных

Любая информация рассматривается компилятором как принадлежащая к некоторому типу данных. В языке имеется несколько встроенных, или простых, типов (возможны и другие типы данных, например, определяемые пользователем). Простые типы перечислены в таблице 3.2.

Размер и допустимый диапазон значений приведены здесь для 32-битной машины. Поэтому, например, тип int имеет размер 32 бита (4 байта) и эквивалентен типу long; на 16-разрядной машине int имел бы размер 2 байта. Но появившихся сравнительно недавно 64-х разрядных машинах int имеет размер 64 бита (8 байт). Это существенно если вы занимаетесь переносом программ на машину с другой разрядностью.