- •7. Программирование алгоритма линейной структуры на языке Си 27
- •8. Понятие о препроцессоре языка Си 28
- •9. Операторы языка Си и приемы программирования 28
- •10. Массивы. Адресная арифметика языка Си 47
- •1.Правила записи программы на языке Си
- •2.Правила формального описания синтаксиса языка программирования
- •3.Идентификаторы языка Си
- •4.Понятие о типах данных.
- •4.1.Системы счисления. Представление данных в эвм.
- •4.2.Основные типы данных языка Си
- •4.3.Правила записи констант различных типов
- •4.4.Беззнаковый тип для целых данных
- •4.5.Символьные строки
- •5.Понятие функции
- •5.1.Стандартная функция printf
- •5.2.Стандартная функция scanf
- •6.Операции и выражения
- •6.1.Простейшие арифметические операции
- •6.2.Операция присваивания
- •6.3.Оператор-выражение
- •6.4.Использование в выражениях операндов разных типов
- •6.5.Операции преобразования типов
- •6.6.Стандартные математические функции
- •6.7.Простейшие функции, определяемые программистом
- •6.8.Дополнительные арифметические операции
- •6.9.Дополнительные операции присваивания
- •6.10.Битовые операции
- •6.11.Операции отношения
- •6.12.Логические операции
- •6.13.Операция определения размера данных
- •6.14.Приоритеты операций
- •7.Программирование алгоритма линейной структуры на языке Си
- •8.Понятие о препроцессоре языка Си
- •9.Операторы языка Си и приемы программирования
- •9.1.Оператор цикла while
- •9.2.Условный оператор и условная операция
- •1) Короткие операторы:
- •2) Группы коротких операторов:
- •3) Длинные группы операторов:
- •9.3.Запись алгоритмов с помощью диаграмм Несси - Шнейдермана (структограмм )
- •9.4.Н екоторые приемы программирования
- •9.5.Оператор прерывания цикла
- •9.6.Оператор продолжения цикла
- •9.7.Пример организации простейшего меню
- •9.8.Множественный выбор. Оператор переключения
- •9.9.Оператор цикла do-while.
- •9.10.Перечисления. Работа с клавиатурой ibm pc
- •9.11.Пример организации светового меню
- •10.Массивы. Адресная арифметика языка Си
- •10.1.Описание массива
- •10.2.Ввод-вывод массива
- •10.3.Инициализация массива
- •10.4.Программа вычисления длины строки символов
- •10.5.Двумерные массивы (массивы массивов)
- •10.6.Адресная арифметика языка Си
- •10.7.Указатели и одномерные массивы
- •10.8.Указатели и двумерные массивы
- •10.9.Указатели и функции
- •10.10.Оператор typedef
- •10.11.Дополнительные описания указателей для ibm pc
- •10.12.Непосредственная работа с экранной памятью
- •11.Дополнительные сведения о функциях
- •11.1.Области видимости и глобальные данные
- •11.2.Время жизни переменных и классы памяти языка Си
- •11.3.Передача аргументов в функцию
- •11.4.Возврат значений из функций
- •12.Работа с динамической памятью
- •12.1.Стандартные функции управления динамической памятью
- •12.2.Пример использования динамической памяти
- •12.3.Особенности работы с двумерными массивами
- •12.3.1.Пересчет индексов вручную
- •12.3.2.Массивы с постоянной длиной строки
- •12.3.3.Общий случай двумерного массива
- •12.4.Особенности работы с массивами большого размера
- •13.Модульное программирование в системе Turbo c
- •13.1.Обеспечение корректной стыковки модулей
- •13.2.Создание библиотек функций
- •14.Некоторые библиотечные функции языка Си
- •14.1.Функции консольного ввода/вывода (уникальны для tc)
- •14.2.Функции обработки строк.
- •14.3.Функции распознавания вида символа
- •14.4.Функции преобразования данных
- •15.Структуры языка c.
- •15.1.Описание структуры
- •1 Способ
- •2 Способ
- •15.2.Трактовка имени структуры.
- •15.2.1.Доступ к элементу структуры.
- •15.3.Инициализация структур.
- •15.4.Структуры и функции.
- •15.5.Поля бит в структурах.
- •16.Объединения.
- •17.Дополнительные сведения о препроцессоре языка c.
- •18.Условное выражение.
- •18.1.Приоритеты и направления операций.
- •19.Динамические данные.
- •19.1.Линейные списки.
- •19.2.Организация данных в виде стека.
- •19.3.Организация данных в виде очереди.
- •19.4.Организация данных в виде деревьев.
- •20.Библиотека ввода-вывода языка c.
- •20.1.Открытие потока.
- •20.2.Закрытие потока.
- •20.3.Предопределенные указатели потоков.
- •20.4.Функции ввода-вывода.
6.4.Использование в выражениях операндов разных типов
При участии в арифметических операциях операндов разных типов, перед выполнением операции осуществляется преобразование типов так, чтобы не было потери точности. Затем осуществляется сама операция.
Типы данных в порядке возрастания точности:
char, short, int, long, float, double.
Пример:
int a, c;
float d, e;
e = d*(c+e); /* c будет преобразовано в float */
a = 'A' + 20; /* 'A' будет преобразовано в int */
6.5.Операции преобразования типов
В некоторых случаях правила преобразования типов не позволяют получить верный результат, например:
int a, b;
float c;
a = 7; b = 14;
c = a/b; /* результат 0 */
Для получения правильного результата можно поступить так
c = a; c = c/b;
А можно применить операцию преобразования типа:
преобразование_типа = "("имя_типа ")" выражение
имя_типа - название любого типа, в том числе и заданного программистом.
Для нашего примера применение операции преобразования типа будет выглядеть так:
c = (float)a / (float)b;
Операция преобразования типа имеет приоритет более высокий, чем арифметическая операция.
6.6.Стандартные математические функции
В любых арифметических выражениях можно использовать стандартные математические функции, которые можно применять к любым числовым операндам.
При использовании этих функций в программу необходимо включить файл <math.h>, т.е. необходимо использовать директиву #include <math.h> . При этом будут определены следующие функции:
sin(x) - синус (аргумент в радианах);
cos(x) - косинус (аргумент в радианах);
tan(x) - тангенс (аргумент в радианах);
asin(x) - арксинус (результат в радианах);
acos(x) - арккосинус (результат в радианах);
atan(x) - арктангенс (результат в радианах);
sinh(x) - гиперболический синус;
cosh(x) - гиперболический косинус;
tanh(x) - гиперболический тангенс;
log10(x) - десятичный логарифм;
pow10(x) - возведение числа 10 в степень x;
log(x) - натуральный логарифм;
exp(x) - экспонента;
sqrt(x) - квадратный корень;
pow(x,y) - возведение x в степень y;
fabs(x) - абсолютная величина для double;
abs(x) - абсолютная величина для int.
6.7.Простейшие функции, определяемые программистом
Довольно часто программист сталкивается с тем, что стандартных функций, нужных ему, нет. Например, в библиотеке Turbo C нет функции для вычисления котангенса. В этом случае программист сам может задать нужную ему функцию. Функция должна быть оформлена специальным образом. Описание функции начинается заголовком:
заголовок_функции =
тип имя_функции"("[тип параметр {"," тип параметр}]")"
Например, заголовок функции вычисления котангенса:
double cotan ( double x )
За заголовком функции должно следовать тело функции, т.е. операторы, реализующие функцию. При этом они оформляются подобно операторам основной программы, т.е. тело функции начинается с "{" и заканчивается "}".
Для возврата в вызывающую функцию и для передачи ей вычисленного значения используется оператор return.
"return " [выражение];
Выражение должно быть того же типа, что и тип функции. Его значение будет передано вызывающей программе в качестве значения функции. Например, функцию для вычисления котангенса можно записать так:
double cotan( double x )
{
double ctg;
ctg = 1.0 / tan(x);
return ctg;
}
или
double cotan( double x )
{
return 1.0 / tan(x);
}
После того как функция определена, она может быть использована, так же как и стандартные функции Си, например можно записать:
a = b * cotan(c);
При этом значение c будет передано функции в качестве параметра x, затем будет вычислено выражение 1/tan(x) и передано в вызывающую программу в качестве значения функции cotan.
В функциях могут находится любые операторы языка и в любом количестве.
Собственные функции программиста в простейшем случае могут быть помещены в тот же файл, в котором находится основная программа, и должны располагаться в файле до того как они будут использоваться.
Если это по какой-либо причине не устраивает программиста, то он может в начало файла поместить прототипы всех используемых функций, т. е. заголовки функций, оканчивающихся точкой с запятой. В этом случае сами функции могут располагаться в любом месте файла.
