- •Язык программирования Си
- •7. Понятие о препроцессоре языка Си 29
- •8. Операторы языка Си и приемы программирования 30
- •9. Массивы. Адресная арифметика языка Си 51
- •Правила записи программы на языке Си
- •Правила формального описания синтаксиса языка программирования
- •Идентификаторы языка Си
- •Понятие о типах данных.
- •Системы счисления. Представление данных в эвм.
- •Основные типы данных языка Си
- •Правила записи констант различных типов
- •Беззнаковый тип для целых данных
- •Символьные строки
- •Понятие функции
- •Стандартная функция printf
- •Стандартная функция scanf
- •Операции и выражения
- •Простейшие арифметические операции
- •Операция присваивания
- •Оператор-выражение
- •Использование в выражениях операндов разных типов
- •Операции преобразования типов
- •Стандартные математические функции
- •Простейшие функции, определяемые программистом
- •Дополнительные арифметические операции
- •Дополнительные операции присваивания
- •Битовые операции
- •Операции отношения
- •Логические операции
- •Операция определения размера данных
- •Приоритеты операций
- •Понятие о препроцессоре языка Си
- •Операторы языка Си и приемы программирования
- •Оператор цикла while
- •Условный оператор и условная операция
- •1) Короткие операторы:
- •2) Группы коротких операторов:
- •3) Длинные группы операторов:
- •Запись алгоритмов с помощью диаграмм Несси - Шнейдермана (структограмм )
- •Некоторые приемы программирования
- •Оператор прерывания цикла
- •Оператор продолжения цикла
- •Пример организации простейшего меню
- •Множественный выбор. Оператор переключения
- •Оператор цикла do-while.
- •Перечисления. Работа с клавиатурой ibm pc
- •Пример организации светового меню
- •Массивы. Адресная арифметика языка Си
- •Описание массива
- •Ввод-вывод массива
- •Инициализация массива
- •Программа вычисления длины строки символов
- •Двумерные массивы (массивы массивов)
- •Адресная арифметика языка Си
- •Указатели и одномерные массивы
- •Указатели и двумерные массивы
- •Указатели и функции
- •Оператор typedef
- •Дополнительные описания указателей для ibm pc
- •Непосредственная работа с экранной памятью
- •Дополнительные сведения о функциях
- •Области видимости и глобальные данные
- •Время жизни переменных и классы памяти языка Си
- •Передача аргументов в функцию
- •Возврат значений из функций
- •Работа с динамической памятью
- •Стандартные функции управления динамической памятью
- •Пример использования динамической памяти
- •Особенности работы с двумерными массивами
- •Пересчет индексов вручную
- •Массивы с постоянной длиной строки
- •Общий случай двумерного массива
- •Особенности работы с массивами большого размера
- •Модульное программирование в системе Turbo c
- •Обеспечение корректной стыковки модулей
- •Создание библиотек функций
- •Некоторые библиотечные функции языка Си
- •Функции консольного ввода/вывода (уникальны для tc)
- •Функции обработки строк.
- •Функции распознавания вида символа
- •Функции преобразования данных
- •Структуры языка c.
- •Описание структуры
- •1 Способ
- •2 Способ
- •Трактовка имени структуры.
- •Доступ к элементу структуры.
- •Инициализация структур.
- •Структуры и функции.
- •Поля бит в структурах.
- •Объединения.
- •Дополнительные сведения о препроцессоре языка c.
- •Условное выражение.
- •Приоритеты и направления операций.
- •Динамические данные.
- •Линейные списки.
- •Организация данных в виде стека.
- •Организация данных в виде очереди.
- •Организация данных в виде деревьев.
- •Библиотека ввода-вывода языка c.
- •Открытие потока.
- •Закрытие потока.
- •Предопределенные указатели потоков.
- •Функции ввода-вывода.
Беззнаковый тип для целых данных
Обычно целый тип охватывает и отрицательные и положительные значения. Например, тип int имеет диапазон значений от -32768 до 32767. Иногда отрицательные значения не нужны. Тогда имеется возможность вдвое увеличить диапазон положительных значений, т. е. от 0 до 65535. Это можно сделать если описать тип как беззнаковый.
БНФ:
имя_беззнакового_типа =
"unsigned "("int"|"long"|"short"|"char" )
Пример:
unsigned int ab, c, d;
Символьные строки
Последовательность символов, заключенная в двойные кавычки, представляет собой символьную строку. Двойные кавычки в строку не входят. Например, "Это строка символов". Первая кавычка указывает на начало строки, последняя на ее окончание.
Строка символов хранится в памяти ЭВМ как массив символов.
Массив символов представляет собой последовательность символов, расположенных в непрерывной области памяти и объединенных общим именем:
Э |
т |
о |
|
С |
т |
р |
о |
к |
а |
|
с |
и |
м |
в |
о |
л |
о |
в |
\0 |
В конце строки символов компилятор ставит ноль-символ, т.е. символ, код которого равен 0. Он служит признаком конца строки.
Значение символьной строки - это адрес ее первого символа.
При трансляции программы компилятор разместит все символьные строки в памяти, а в программу вместо них подставит соответствующие адреса (т.е. значения символьных строк!).
Символьная строка является константой, т.е. ее невозможно изменить в процессе выполнения программы. На практике часто необходимо выполнять различные действия над символьными строками: например запросить ввод имени пользователя, которое затем используется в выводной информации. Подобные операции возможны, если описать переменную как массив символов.
БНФ:
описание_массива_символов =
"char " имя "["размер"]" { "," имя "["размер"]" } ";"
где размер - максимально возможное количество символов плюс 1 для размещения нуль символа.
Пример:
char name[50], fio[81];
Переменная name способна хранить строку из 49 символов, fio из 80. Значениями переменной name и fio являются адреса областей памяти, выделенных для хранения соответствующих строк.
Понятие функции
Под функцией понимают часть программы, которая реализует вполне законченный алгоритм, и может быть вызвана (то есть, запущена) из любого места программы. После окончания работы функции программы продолжается с места вызова функции.
Язык Си имеет мощные средства создания собственных функций пользователя. Однако на первых порах мы будем использовать стандартные готовые функции, предоставляемые нам библиотекой языка Си. Для вызова функции необходимо записать следующую конструкцию языка:
БНФ:
вызов_функции =
имя_ функции "(" [ аргумент { "," аргумент } ] ")"
Пример:
printf( "Это простое число %d", num );
Здесь имя функции "printf", функция имеет два аргумента, первый - строка символов, второй - переменная num.
Аргументы функции - это данные, которые передаются функции для обработки. Функция может не только получать аргументы, но и возвращать вычисленные значения:
A = sin( x );
Если функция возвращает значение, то ее вызов можно использовать в различных операциях:
A = sin(x) * cos(y);
n = printf( "%d", k ) + 5;
Функции sin и cos возвращают вычисленные значения синуса и косинуса, а функция printf возвращает количество выведенных на экран байт.
Основная функция, описанная как void main ( void ), не принимает аргументов и не возвращает значения (void - пусто).