
- •Федеральное агентство по образованию
- •Краткая история языка с
- •Особенности и основные понятия языка Си
- •Структура программы
- •Типы данных
- •Классификация типов данных
- •Вещественные
- •Логический
- •Диапазоны представления данных
- •Объявление переменных
- •Константы в языке Си
- •Операции языка Си. Приоритет операций
- •Операция присваивания
- •Арифметические операции
- •Операции отношения
- •Логические операции
- •Поразрядные операции
- •Операцияsizeof
- •Операция выбора по условию
- •Операция запятая
- •Приведение типов Неявное преобразование типов
- •Явное преобразование типов
- •Основные средства ввода-вывода на Си Понятие потока
- •Стандартные потоки
- •Функции потокового ввода-вывода
- •Функции ввода
- •Ввод символов
- •Ввод строк
- •Форматированный ввод
- •Операторы языка Си
- •Оператор if
- •Оператор switch
- •Оператор while
- •Оператор do while
- •Оператор for
- •Оператор break
- •Оператор continue
- •Функции вывода на экран
- •Вывод символов
- •Функция вывода строк puts()
- •Форматированный вывод
- •Указатели в языке Си
- •Адресная арифметика
- •Массивы
- •Функции в языке с
- •Прототипы функций
- •Указатели типа void
- •Функции, возвращающие указатели
- •Встраиваемые функции
- •Рекурсивные функции
- •Функции с переменным числом аргументов
- •Аргументы функции main()
- •Область действия и область видимости
- •Локальные переменные
- •Локальные переменные в функции Main()
- •Глобальные переменные
- •Классы памяти
- •Указатели на указатели
- •Указатели и многомерные массивы
- •Массивы указателей
- •Указатели на функции
- •Операции над строками символов Определение длины строки
- •Копирование строк
- •Поиск в строках
- •Преобразования символов в строках
- •Другие функции для работы со строками
- •Преобразования строк в числа
- •Преобразования чисел в строки
- •Функции анализа символов
- •Распределение памяти
- •Манипулирование блоками памяти
- •Типы, определяемые пользователем
- •Перечислимый тип
- •Структуры
- •Сложные структуры
- •Битовые поля в структурах
- •Объединения
- •Работа с файлами Связь между потоками и файлами
- •Типы дисковых файлов
- •Открытие файла
- •Запись и чтение данных
- •Форматированный ввод-вывод Форматированный вывод
- •Int fprintf (file *fp, char *fmt, ...);
- •Форматированный ввод
- •Символьный ввод
- •Символьный вывод
- •Блочный ввод-вывод
- •Закрытие файла
- •Директивы препроцессора
- •Директива #include
- •Директива #define
- •Директивы условной компиляции
- •Директива #undef
- •Предопределенные макросы
- •69 Лекции по курсу «Языки программирования» Часть III
Структура программы
|
<команды препроцессора> |
#include <stdio.h> (эквивалентно {$I stdio.h}) #define N 20 (эквивалентно Const N=20;) |
|
|
|
|
<определение типов> |
1) Определение синонима старого типа typedef unsigned int uint; ----------- ----- определение синоним
2) определение нового типа typedef struct { int a, b;} str; |
|
|
|
|
<прототипы функций> |
Заголовок int sum(int x, int y); |
|
|
|
|
<глобальные переменные> |
int x, y; ( то же , что Var x, y: integer); или int x=2, y=3; (то же, что const x:integer=2; y:integer=3;) |
|
|
|
|
<функции> |
Заголовок + тело
|
Функции в свою очередь имеют следующую структуру:
<тип > Имя(<описания формальных параметров>)
{ --- то же, что begin
<описания локальных переменных>
<операторы и вызовы функций>
} --- то же, что end
В программе на СИ из всех функций, которые вы объявляете, только одна должна иметь имя main. Это и есть главный модуль вашей программы. Если вы забыли назвать одну из функций как main, то программа не сможет выполниться. Компилироваться программа начинает не сразу – вначале выполняются предложения препроцессора. Он находит в тексте свои команды и в соответствии с ними выполняет преобразование текста программы.
Когда программа начинает выполняться, первой вызывается функция Main(), а она может вызывать другие функций, описанные по тексту программы выше или ниже (вложенные функции в Си запрещены). Любая программа на Си состоит только из функций (процедур в чистом виде нет). Однако, некоторые функции имеют тип void (пустой тип) и не возвращают значений, так, что они аналогичны процедурам Паскаля. Вы также можете просто игнорировать значения, возвращаемые функциями, и вызывать функции как процедуры.
Прототип представляет собой заголовок функции, заканчивающийся точкой с запятой. Требуются прототипы по следующей причине. К сожалению, компилятор Си не производит контроля соответствия количества и типов фактических и формальных параметров. Это является источником ошибок.
Прототипы обычно не требуются, если все используемые функции определяются выше точки их вызова (обычно в main()). Прототипы стандартных функций хранятся в виде специальных заголовочных (h-файлов), которые надо подключать к своей программе с помощью #include <имя h-файла>.
Определяются переменные в Си по другому, чем в Паскале:
слово Var не пишут, а тип и имя поменялись местами по сравнению с Паскалем;
в Си переменные можно инициализировать прямо в месте описания (как для типизированных констант на Паскале);
в отличие от Паскаля регистр букв в именах переменных учитывается, т.е.
int a,b; не то же, что int A,B;.
Комментарий на Си заключается внутрь /* */, комментарий может занимать несколько строк и допускается вкладывание одного комментария в другой с любым уровнем вложенности.