- •Московский государственный социальный университет академия информатики и информационных технологий
- •Введение
- •Часть. Основы программирования на Си
- •1.1. Структура простейшей Си-программы
- •1.2. Данные в Си и операции над ними
- •1.2.1. Свойства ячейки памяти. Переменные и константы
- •1.2.2. Типы данных в Си
- •1.2.3. Правила записи констант в Си
- •1.2.4. Описание переменных и именованных констант в Си.
- •1.2.5. Выражения в Си
- •1.3. Операторы преобразования данных
- •1.3.1. Общие положения
- •1.3.2. Функция форматного выводаprintf()
- •1.3.3. Функция форматного вводаscanf()
- •1.4. Разработка программ на Си
- •1.4.1. Понятие о качестве программы и основные технологические принципы разработки программ
- •1.4.2. Алгоритм и способы его записи.
- •1.4.3. Изображение алгоритмов в виде блок-схем
- •1.4.4. Базовые структуры алгоритмов и их кодирование на Си.
- •1. Следование
- •2. Разветвление (развилка)
- •If (условие)
- •If (условие)
- •3. Цикл
- •1.4.4. Примеры разработки программ
- •1.5. Массивы и указатели
- •1.5.1. Понятие массива. Основные правила работы с массивами в Си
- •1.5.2. Примеры программ с массивами.
- •1.5.3. Инициализация массивов
- •1.5.4. Указатели в Си10
- •1.5.5. Связь массивов с указателями в Си
- •Часть. Функции и многофайловые программы в Си
- •2.1. Общие сведения о подпрограммах и функциях
- •2.2. Функции си
- •2.2.1. Описание функции
- •2.2.2. Обращение к функции
- •2.2.3. Место описания функции в программе
- •2.2.4. Примеры программ, использующих функции
- •2.3. Краткие сведения о препроцессоре Си
- •2.3.2.Директива макроопределения #define
- •2.3.3. Директива #include включения файлов
- •2.3.4. Директивы условной компиляции
- •2.415. Многофайловые си-программы
- •2.4.1. Структура программы на Си. Область действия переменных
- •2.4.2. Время жизни и класс памяти переменных
- •Описатели класса памяти
- •2.4.3 Понятие о файле проекта
- •Часть. Обработка символьной информации и документов сложной структуры
- •3.1. Обработка символьной информации на Си
- •3.1.1. Символьный тип
- •3.1.2. Работа со строками символов в Си. Строковые литералы. .
- •3.1.3. Функции и макросы для работы с символьной информацией
- •3.1.4. Примеры программ
- •3.2. Тип "структура" в Си
- •Структура
- •3.3. Файлы в Си
- •3.3.1. Общие понятия.
- •3.2.Функции Си для работы с файлами
- •3.3.3. Примеры программ, использующих файлы
- •Литература
- •Содержание
Часть. Основы программирования на Си
1.1. Структура простейшей Си-программы
Простейшая программа на Си состоит из одного файла и имеет следующую структуру (см. рис.1).
Директивы препроцессора (в простейшем случае #include<stdio.h>/*ввод/вывод*/ #include<math.h> /*стандартные математические функции*/) void main() { описания операторы } |
|
#include <stdio.h> void main() {inta,b,c;/*описание трех целых переменных*/ printf("введитеaиb\n"); /*приглашение к вводу aиb*/ scanf("%d%d", &a, &b);/*ввод a,b*/ c=a+b;/*вычисление с - суммы */ printf("c=%d\n",c);/*вывод с*/ } |
а) |
|
б) |
Рис.1
а) общая схема простейшей Си-программы;
б) пример программы вычисления суммы двух чисел.
В начале программы идут директивы препроцессора, которые более подробно рассмотрены в п. 2.3. В простейшем случае можно ограничиться директивами include, которые необходимы для использования библиотек стандартных функций Си:include <stdio.h>- для функций ввода/вывода,include <math.h>- для стандартных математических функций. Обратите внимание, что директивы препроцессора начинаются со значка #.
Далее идет заголовок главной (и в простейшем случае единственной) функции: void main(). После заголовка в фигурных скобках записываетсяинструкциипрограммы.
Инструкциимогут быть либоописаниями, либооператорами.Операторы- это исполняемые инструкции; при компиляции они переводятся в одну или несколько машинных команд. Описания- это неисполняемые инструкции языка; они используются компилятором для распределения памяти под данные и определения характера операций, которые могут выполняться с этими данными. Описания характеризуют область значений данных. Они могут стоять в любом месте программы до использования описываемых имен. Хороший стиль программирования предполагает, чтобы по возможности описания были собраны в начале программы и предшествовали операторам.
В любое место программы можно включить комментарии - поясняющие фразы, окаймленные, как скобками, символами /* и */. Комментарии компилятором не обрабатываются и служат только для пояснения текста программы. В Си++ также допускается использовать как комментарий строку программы, поставив в начале ее символы //.
1.2. Данные в Си и операции над ними
1.2.1. Свойства ячейки памяти. Переменные и константы
Компьютерные программы, для написания которых предназначен алгоритмический язык Си, обрабатывают данные, которые, естественно, хранятся в оперативной памяти компьютера. Каждое элементарное данное имеет некоторый смысл (например, число или символ) и занимает один или несколько байтов памяти2. Эту область памяти часто называютячейкой памяти. Для того, чтобы ячейки памяти можно было различать и использовать их в программе, каждой ячейке дается имя. Таким образом, ячейка памяти характеризуется своимименемисодержимым(т. е. данным, которое в ней хранится). Кроме того, ячейка имеетадрес(адресом ячейки считается адрес младшего из занимаемых ею байтов). В программе имена ячеек участвуют как имена переменных, т. е. переменные программы - это, по существу, ячейки памяти. При написании программ считают, что ячейка памяти обладает следующими свойствами:
Информация в ячейке памяти хранится сколь угодно долго. Это свойство в известной мере является абстрактным, так как при выключении компьютера, например, информация в оперативной памяти не сохраняется.
При записи нового содержимого в ячейку предыдущее содержимое не сохраняется. Запись содержимого в ячейку называется присваиванием.Оператор присваивания описан в п.1.2.5.
При считывании содержимое ячейки не изменяется.
Если в ячейку на протяжении программы не было ничего записано, то ее содержимое считается неопределенным. Отметим, что это свойство не всегда выполняется в реализациях алгоритмических языков (все переменные в BorlandPascal, статические переменные вBorlandC++ при объявлении обнуляются).
Под константойв программировании понимается значение, не изменяющееся в процессе выполнения программы. Константам, также как и переменным, соответствуют ячейки памяти. Можно считать, что эти ячейки защищены от записи. В программе, кроме константобозначенныхилиименованных(т. е. имеющих имя), могут использоваться явные константы, заданные своим значением. Например, можно использовать константу с именемpi, предварительно задав ей значение 3.1415, а можно использовать в программе явную константу 3.1415.
В качестве именпеременных и констант, также как в качестве других имен, в Си используются идентификаторы. Под идентификатором понимается последовательность букв, символов подчеркивания и цифр, начинающаяся с буквы или символа подчеркивания. При формировании имен (а также служебных слов) прописные и соответствующие строчные буквы считаются различными символами.