- •Предисловие
- •Знакомство с языком C
- •Структура программы
- •Пример простой программы
- •Более сложный пример
- •Контрольные вопросы
- •Основные понятия, объявление переменных, типы данных
- •Объявление переменных
- •Примеры описаний переменных:
- •Основные типы данных
- •Производные типы.
- •Контрольные вопросы
- •Ввод/вывод с помощью функций printf() и scanf().
- •Модификаторы спецификаций преобразования используемые в функции printf()
- •Применение функции scanf()
- •Контрольные вопросы
- •Операции
- •Простейшие арифметические операции
- •Операция присваивания
- •Использование в выражениях операндов разных типов
- •Операции преобразования типов
- •Дополнительные арифметические операции
- •Дополнительные операции присваивания
- •Операции отношения
- •Логические операции
- •Приоритеты операций
- •Таблица 3. Таблица приоритетов рассмотренных выше операций
- •Контрольные вопросы
- •Операторы
- •Оператор-выражение
- •Ветвление
- •Условный оператор
- •Оператор switch
- •Оператор break
- •Циклы
- •Цикл while
- •Цикл do…while
- •Цикл for
- •Другие операторы
- •Оператор continue
- •Оператор goto
- •Оператор вызова функции
- •Контрольные вопросы
- •Обработка числовых последовательностей
- •Последовательная обработка
- •Обработка числовых последовательностей
- •Примеры
- •Контрольные вопросы
- •Последовательная обработка символьных данных
- •Символьные данные
- •Последовательная обработка символов
- •Функции getchar( ) и putchar( )
- •Контрольные вопросы
- •Обработка массивов
- •Массивы
- •Объявление массива
- •Использование и обработка массивов
- •Примеры
- •Контрольные вопросы
- •Указатели и динамические массивы
- •Указатели
- •Динамическое выделение памяти
- •Статические и динамические массивы
- •Контрольные вопросы
- •Подпрограммы
- •Описание подпрограмм
- •Параметры подпрограмм
- •Область действия переменных
- •Примеры
- •Контрольные вопросы
- •Рекурсивные функции
- •Понятие рекурсивной функции
- •Контрольные вопросы
- •Символьные строки и функции обработки строк
- •Посимвольная обработка строк
- •Пример программы
- •Контрольные вопросы
- •Структуры
- •Тип данных структура
- •Контрольные вопросы
- •Работа с файлами
- •Примеры
- •Контрольные вопросы
- •Массивы и функции как параметры
- •Указатели на функции
- •Массивы и указатели
- •Указатели и двумерные массивы
- •Пример
- •Технологии программирования
- •Структурное программирование
- •Модульное программирование
- •Объектно-ориентированное программирование
- •Компонентное программирование
- •Структурная декомпозиция задачи и разработка алгоритмов и программ методами сверху вниз и снизу вверх
- •Контрольные вопросы
- •Модульное программирование
- •Работа с графикой на языке C и модуль graphics.h
- •Типы видео мониторов и их режимы
- •Инициализация графики
- •Система координат
- •Основные графические функции
- •Функции рисования
- •Функции изменения параметров рисования
- •Шаблоны линий
- •Шаблоны закраски
- •Задание на расчетно-графическую работу
- •Порядок выполнения работы
- •Задание
- •Задание для вариантов 1-11
- •Задание для вариантов 12-20
- •Задание для вариантов 21-40
- •Пример исходных данных для вариантов 12-16
- •Задание для вариантов 41-60
- •Варианты индивидуальных заданий
- •Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Вариант 11
- •Вариант 12
- •Вариант 13
- •Вариант 14
- •Вариант 15
- •Вариант 16
- •Вариант 17
- •Вариант 18
- •Вариант 19
- •Вариант 20
- •Вариант 21
- •Вариант 22
- •Вариант 23
- •Вариант 24
- •Вариант 25
- •Вариант 26
- •Вариант 27
- •Вариант 28
- •Вариант 29
- •Вариант 30
- •Вариант 31
- •Вариант 32
- •Вариант33
- •Вариант 34
- •Вариант 35
- •Вариант 36
- •Вариант 37
- •Вариант 38
- •Вариант 39
- •Вариант 40
- •Вариант 41
- •Вариант 42
- •Вариант 43
- •Вариант 44
- •Вариант 45
- •Вариант 46
- •Вариант 47
- •Вариант 48
- •Вариант 49
- •Вариант 50
- •Вариант 51
- •Вариант 52
- •Вариант 53
- •Вариант 54
- •Вариант 55
- •Вариант 56
- •Вариант 57
- •Вариант 58
- •Вариант 59
- •Вариант 60
- •Задания на курсовую работу
- •Требования к курсовой работе
- •Этапы разработки программ
- •Содержание отчета по курсовой работе
- •Задания к курсовой работе
- •Литература
- •Функции консольного ввода/вывода
- •Функции обработки строк
- •Функции преобразования данных
Операторы
Оператор-выражение
Выражение заканчивающееся символом ';' является оператором:
<выражение>;
Пример:
ab = ( c = d + 5 ) * 6; /* это оператор */
В дальнейшем будем строго придерживаться этой терминологии, т.е. выражением будем называть совокупность операндов, связанных операциями, а оператором - выражение заканчивающейся точкой с запятой.
Ветвление
Любой конкретный алгоритм может быть записан на языке программирования, использующем только три управляющий структуры: последовательное выполнение, ветвление и повторение. Последовательное выполнение стиль обычно, что мы редко о нем вспоминаем, как об управляющей структуре. Последовательность операторов выполняется в порядке их естественного расположения в программе, с возможным отклонением для вызова внешнего фрагмента (функции), но с обязательным возвратом в точку вызова.
Условный оператор
Ветвление в простейшем случае описывается в языке Си с помощью условного оператора. имеющего вид:
if ( выражение ) оператор_1;
else
оператор_2;
где часть else может и отсутствовать. Сначала вычисляется "выражение" в скобках; если оно истинно то выполняется оператор_1. Если "выражение" ложно (равно нулю - NULL), то оператор_1 пропускается, а выполняется
40
оператор_2. Если на месте условно выполняемых операторов должна располагаться группа из нескольких операторов языка, то они заключаются в фигурные скобки - { }. Часто "выражение" в скобках представляет условие, заданное с помощью операций отношений и логических операций. Операции отношения обозначаются в Си следующим образом:
= |
= |
равно; |
! = |
не равно; < меньше; > больше; |
< |
= |
меньше |
или |
равно; > = больше или равно. |
Символ ! в языке Си обозначает логическое отрицание. Есть еще две логические операции: || означает или, а && - логическое И. Операции отношения имеют приоретет ниже арифметических операций, так что выражение вида k > n%i вычисляется как k > (n%i). Приоритет && выше, чем у ||, но обе логические операции выполняются после операций отношения и арифметических. В сомнительных случаях лучше расставлять скобки.
Примеры оператора if:
if (s >= |
‘0’ && s <= ‘9’) |
|
||
printf |
(“Символ - цифра”); |
|
||
if |
(x < |
0) s1 += x; |
|
|
else |
s2 |
+= x; |
|
|
Вычислить значение величины y при следующих условиях: |
||||
|
|
|
a*x2 + b2*x, |
если a < 0, |
|
|
y = |
x – a*b, |
если 0 ≤ a < 1, |
|
|
|
1 + x, |
если a ≥ 1. |
/* Фрагмент программы |
для вычисления величины y |
*/ |
||||||||
float |
|
a, |
b, |
x, y; |
|
|
|
|
||
scanf |
(“%f%f%f”, &a, &b, &x); |
b *b *x; |
|
|||||||
if ( a < 0 |
) |
y = |
a *x *x |
+ |
|
|||||
else |
if ( a < 1 |
) |
y = |
x |
- |
a * b; |
|
|||
|
else |
|
y = |
1 + x; |
|
|
|
|
||
if (x |
< |
0) |
{ |
s1 |
+= x; |
k1++; } |
|
|
||
else |
|
if (x |
> 0) |
s2 += x, k2++; |
|
|||||
|
|
else |
k3++; |
|
|
|
|
|
||
if (i % |
2) |
|
|
max = a; |
|
|
|
|
||
if (a |
> max) |
|
|
|
|
|||||
else ; |
/* пустой оператор */ |
|
|
|||||||
else |
if (a < |
min) min = a; |
|
|
|
41
Если не написать else ; (с пустым оператором), то компилятор отнесет строку else if (a < min) min = a; ко второму оператору if, а не к первому, что приведет к неверным результатам. Этот фрагмент можно записать иначе:
if |
(i % |
2) |
a; } |
{ if (a |
> max) max = |
||
else |
if |
(a < min) min |
= a; |
Для иллюстрации применения условного оператора рассмотрим программу определения большего из трех чисел. Первый if оператор представляет полную условную конструкцию, во втором случае else отсутствует. Обратите внимание, что точка с запятой, завершая оператор присваивания max=x, не нарушает единство if- оператора. Если else- ветвь пропускается во вложенных условиях, возможна неоднозначность их толкования. Во избежание двусмысленностей решают так: else соответствует ближайшему if, не имеющего своего else.
Пример
#include <stdio.h>
main() /* главная функция*/
{
int x, y, z, max ; /* описание переменных*/ printf(" Введите три числа :\n ");
scanf(" %d %d %d ", &x, &y, &z); /*ввод трех чисел*/ if( x > y) /*операции сравнивания*/
max=x; else
max=y; if ( z>max)
max=z;
printf(" Максимальное из (%d, %d, %d)= %d \n",x, y, z, max);
}
Рассмотрим пример программы, в которой применяются несколько вложенных друг в друга условных операторов. В этой программе строка float A, B, X объявляет эти три переменные как величины вещественного типа. Форматная строка функции scanf предписывает ввести два вещественные числа, которые станут значениями переменных A и B соответственно.
Пример
/*РЕШЕНИЕ УРАВНЕНИЯ AX=B*/ #include <stdio.h>
main()
{
42
float A,B,X; printf("ВВЕДИ А, В\n"); scanf("%f %f",&A, &B); if(A!=0)
printf("РЕШЕНИЕ:%f\n", B/A);
else if(B==0)
printf("X-ЛЮБОЕ ЧИСЛО\n"); else
printf("РЕШЕНИЙ НЕТ\n");
}
Посмотрите, как выглядит ветвление, когда глубина вложенности условных операторов равна трем. Если хоть одно условие истинно, то все оставшиеся, разумеется, пропускаются. При глубине вложенности условных операторов свыше трех ветвление теряет наглядность и понятность. Для реализации многозадачного ветвления обычно прибегают к управляющей структуре выбор (переключатель). Когда управляющая структура ветвления становится особенно запутанной, определенную ясность могут внести фигурные скобки. Они обязательны, когда в условном операторе содержится более одного оператора или функции, например
if(a_0)
{
printf("..."); scanf("...")
другие операторы ...
}
Пример 1.5 /* Програииа определяет поведение ракеты,
стартующей на экваторе, в зависимости от ее начальной скорости*/
#include <stdio.h> main()
{
float V; printf("ВВЕДИ V\n"); scanf("%f",&V); if(V<7.9)
printf("РАКЕТА УПАДЕТ НА ЗЕМЛЮ\n"); if(V<11.2)
printf("РАКЕТА СТАНЕТ СПУТНИКОМ ЗЕМЛИ\n "); if(V<16.4)
printf("РАКЕТА СТАНЕТ СПУТНИКОМ СОЛНЦА\n"); else
printf("РАКЕТА ПОКИНЕТ СОЛНЕЧНУЮ СИСТЕМУ\n");
}
43