- •«Алгоритмические языки и программирование»
- •Часть 1
- •Часть 1. «Язык программирования с» (опорний конспект лекций).
- •Содержание
- •6. Понятие о препроцессоре языка Си 25
- •7. Операторы языка Си и приемы программирования 26
- •1.Правила записи программы на языке Си
- •2.Идентификаторы языка Си
- •3.Понятие о типах данных.
- •3.1.Основные типы данных языка Си
- •3.2.Правила записи констант различных типов
- •3.3.Беззнаковый тип для целых данных
- •3.4.Символьные строки
- •4.Понятие функции
- •4.1.Стандартная функция printf
- •4.2.Стандартная функция scanf
- •5.Операции и выражения
- •5.1.Простейшие арифметические операции
- •5.2.Операция присваивания
- •5.3.Оператор присваивания
- •5.4.Использование в выражениях операндов разных типов
- •5.5.Операции преобразования типов
- •5.6.Стандартные математические функции
- •5.7.Простейшие функции, определяемые программистом
- •5.8.Дополнительные арифметические операции
- •5.9.Дополнительные операции присваивания
- •5.10.Операции отношения
- •5.11.Логические операции
- •5.12.Операция определения размера данных
- •5.13.Приоритеты операций
- •6.Понятие о препроцессоре языка Си
- •7.Операторы языка Си и приемы программирования
- •7.1.Оператор цикла while
- •7.2.Условный оператор и условная операция
- •7.3.Некоторые приемы программирования
- •7.4.Оператор прерывания цикла
- •7.5.Оператор продолжения цикла
- •7.6.Пример организации простейшего меню
- •7.7.Множественный выбор. Оператор переключения
- •7.8.Оператор цикла do-while.
- •7.9.Перечисления
- •7.10.Пример организации светового меню
- •8.Массивы. Адресная арифметика языка Си
- •8.1.Описание массива
- •8.2.Ввод-вывод массива
- •8.3.Инициализация массива
- •8.4.Программа вычисления длины строки символов
- •8.5.Двумерные массивы (массивы массивов)
- •8.6.Адресная арифметика языка Си
- •8.7.Указатели и одномерные массивы
- •8.8.Указатели и двумерные массивы
- •8.9.Указатели и функции
- •8.10.Оператор typedef
- •9.Дополнительные сведения о функциях
- •9.1.Области видимости и глобальные данные
- •9.2.Время жизни переменных и классы памяти языка Си
- •9.3.Передача аргументов в функцию
- •9.4.Возврат значений из функций
- •10.Работа с динамической памятью
- •10.1.Стандартные функции управления динамической памятью
- •10.2.Пример использования динамической памяти
- •10.3.Особенности работы с двумерными массивами
- •10.3.1.Пересчет индексов вручную
- •10.3.2.Массивы с постоянной длиной строки
- •10.3.3.Общий случай двумерного массива
- •10.4.Особенности работы с массивами большого размера
- •11.Модульное программирование в системе Turbo c
- •11.1.Обеспечение корректной стыковки модулей
- •11.2.Создание библиотек функций
- •12.Некоторые библиотечные функции языка Си
- •12.1.Функции консольного ввода/вывода (уникальны для tc)
- •12.2.Функции обработки строк.
- •12.3.Функции распознавания вида символа
- •12.4.Функции преобразования данных
7.Операторы языка Си и приемы программирования
Оператор (statement - предложение) - блок, используемый при создании программы. Программа всегда представляет собой последовательность операторов ( предложений ).
Признаком конца оператора в простейшем случае является ; . Одиночная ; является пустым оператором. Как было отмечено выше, точка с запятой поставленная в конце выражения превращает его в оператор.
Кроме простого оператора в языке Си вводится понятие составного оператора, который представляет собой несколько операторов, заключенных в фигурные скобки:
{ оператор { оператор } }
Пример:
{ a = b + c; scanf( "%lf", &t ); }
Составной оператор рассматриваются компилятором как одиночный оператор и может быть использован в любом месте, где допускается использование одиночного оператора.
Все операторы языка Си, кроме оператора-выражения начинаются с ключевых слов. Например, описания начинаются с int, double и т.д.
Ключевые слова являются зарезервированными, т.е. их нельзя использовать для обозначения объектов программ. Имена стандартных функций не являются зарезервированными.
7.1.Оператор цикла while
Оператор цикла while предназначен для реализации циклических алгоритмов и имеет следующую форму записи
while ( выражение ) оператор;
Пример :
while( a < 18 ) a = a+2;
При выполнении оператора цикла while вначале вычисляется выражение. Если оно не равно 0, то выполняется оператор. Далее снова вычисляется выражение и если оно не равно 0, то снова выполняется оператор. Такие циклические действия продолжаются до тех пор, пока выражение отлично от 0. Отсюда и название цикла
while ( пока ). Как только выражение станет равным 0 цикл прекращает выполнятся и управление передается на следующий за циклом оператор.
Циклически выполняемый оператор обычно называют телом цикла. Если в теле цикла необходимо разместить не один, а несколько операторов, то в этом случае используют составной оператор.
Все операторы тела цикла должны быть записаны с отступом, обычно в три пробела.
Рассмотрим пример программы, которая выводит на экран таблицу функций sin(x) и cos(x):
#include <math.h>
#include <stdio.h>
void main( void )
{
double x = 0;
while( x < 3.0 )
{
printf( "%6.3lf %9.6lf %9.6lf\n",x, sin(x), cos(x) );
x += 0.2;
}
}
Если после while( x < 3.0 ) ошибочно поставить точку с запятой, то никаких сообщений об ошибках выдано не будет, но цикл станет бесконечным. Действительно, в этом случае тело цикла будет пустым оператором ;, переменная x не будет меняться, следовательно, результат выражения x < 3.0 всегда будет отличен от нуля.
В теле правильно организованного цикла обязательно должны содержатся операции, влияющие на выражение в заголовке цикла так, чтобы цикл рано или поздно завершился.
7.2.Условный оператор и условная операция
Условный оператор предназначен для выбора одного из двух альтернативных действий и имеет следующую форму записи:
if (выражение) оператор_1; [else оператор_2];
Пример:
if ( a ) c = b+1; else c = b - 1;
if ( a > b ) k = sin( x ); else k = x + x;
При выполнении условного оператора вначале вычисляется <выражение>. Если его значение не равно нулю, то выполняется <оператор_1>, а <оператор_2> пропускается. Если значение выражения равно нулю, то выполняется <оператор_2>, а <оператор_1> пропускается.
При наличии вложенных операторов if следует иметь в виду, что ключевое слово else всегда относится к ближайшему if, как показано в следующем примере:
if( b > a )
if( c < d ) k= sin(x);
else t = cos(x);
else c = tan( x );
Для того чтобы избежать ошибок рекомендуется использовать операторные скобки
if( b < a )
{
if( c < d ) k = sin( x );
else t = cos( x );
}
else c = tan( x );
Особенно это важно если у вложенного оператора if отсутствует else, т.е
if( b > a )
if( c < d ) k = sin( x );
else c = tan( x ); /* else относится к
вложенному if */
if( b > a )
{
if( c < d ) k = sin( x );
}
else
c = tan( x ); /* else относится к первому if */
Если в качестве <оператора_1> или <оператора_2> используется группа операторов, то ее записывают как составной оператор, заключая ее в операторные скобки "{" и "}".
Для того, чтобы сделать программу более понятной, рекомендуется операторы записывать в следующих формах:
1) короткие операторы:
if( a > b ) k = sin( x ); else k = x*x;
if( a > b ) k = sin( x );
else k = x*x;
2) группы коротких операторов:
if( a > b ) { ... } else {... }
if( a > b ) { ... }
else { ... }
или
if( ... )
{ ..... }
else
{ ..... }
3) длинные группы операторов:
if(... )
{
.
.
.
}
else
{
.
.
.
}
4) множественный выбор:
if ( a == 6 ) { ... }
else if ( a == 8 ) { ... }
else if ( a == 15 ) { ... }
else if ( a > 20 && a < 28 ) { ... }
else { ... }
В некоторых случаях вместо оператора if удобно использовать условную операцию ?:, которая позволяет сократить запись программ и число используемых переменных.
выражение0 ? выражение1 : выражение2
Значение условной операции равно <выражение1>, если <выражение0> не равно 0 и <выражение2> в противном случае.
Пример, следующий оператор
if ( x>a ) f = sin( x-a ); else f = sin(x);
можно заменить условной операцией, и сразу вычислить f:
f = sin( x>a ? x-a : x );
Очевидно, в последнем случае получился более короткий код, поскольку обращений к переменной f и функции sin вдвое меньше.
