- •Программирование на языке си
- •Тамбов, 1994
- •Оглавление
- •1.Описание Языка си
- •1.1. Элементы Языка си
- •1.1.1. Используемые символы
- •1.1.2. Константы
- •1.1.3. Идентификатор
- •1.1.4. Ключевые слова
- •1.1.5. Использование комментариев в тексте программы
- •1.2. Типы Данных и Их Объявление
- •1.2.1 Категории типов данных
- •1.2.2. Целый тип данных
- •1.2.3. Данные плавающего типа
- •1.2.4. Указатели
- •1.2.5. Переменные перечислимого типа
- •1.2.6. Массивы
- •1.2.7. Структуры
- •1.2.8. Объединения (смеси)
- •1.2.9. Поля битов
- •1.2.10. Переменные с изменяемой структурой
- •1.2.11. Определение объектов и типов
- •1.2.12. Инициализация данных
- •1.3. Выражения и Присваивания
- •1.3.1. Операнды и операции
- •1.3.2. Преобразования при вычислении выражений
- •1.3.3. Операции отрицания и дополнения
- •1.3.4. Операции разадресации и адреса
- •1.3.5. Операция sizeof
- •1.3.6. Мультипликативные операции
- •1.3.7. Аддитивные операции
- •1.3.8. Операции сдвига
- •1.3.9. Поразрядные операции
- •1.3.10. Логические операции
- •1.3.11. Операция последовательного вычисления
- •1.3.12. Условная операция
- •1.3.13. Операции увеличения и уменьшения
- •1.3.14. Простое присваивание
- •1.3.15. Составное присваивание
- •1.3.16. Приоритеты операций и порядок вычислений
- •1.3.17. Побочные эффекты
- •1.3.18. Преобразование типов
- •1.4. Операторы
- •1.4.1. Оператор выражение
- •1.4.2. Пустой оператор
- •1.4.3. Составной оператор
- •1.4.4. Оператор if
- •1.4.5. Оператор switch
- •1.4.6. Оператор break
- •1.4.7. Оператор for
- •1.4.8. Оператор while
- •1.4.9. Оператор do while
- •1.4.10. Оператор continue
- •1.4.11. Оператор return
- •1.4.12. Оператор goto
- •1.5.1. Определение и вызов функций
- •1.5.2. Вызов функции с переменным числом параметров
- •1.5.3. Передача параметров функции main
- •1.6.1. Исходные файлы и объявление переменных
- •1.6.2. Объявления функций
- •1.6.3. Время жизни и область видимости программных объектов
- •1.6.4. Инициализация глобальных и локальных переменных
- •1.7.1. Методы доступа к элементам массивов
- •1.7.2. Указатели на многомерные массивы
- •1.7.3. Операции с указателями
- •1.7.4. Массивы указателей
- •1.7.5. Динамическое размещение массивов
- •1.8. Директивы Препроцессора
- •1.8.1. Директива #include
- •1.8.2. Директива #define
- •1.8.3. Директива #undef
- •2. Организация списков и их обработка
- •2.1. Линейные списки
- •2.1.1. Методы организации и хранения линейных списков
- •2.1.2. Операции со списками при последовательном хранении
- •2.1.3. Операции со списками при связном хранении
- •2.1.4. Организация двусвязных списков
- •2.1.5. Стеки и очереди
- •2.1.6. Сжатое и индексное хранение линейных списков
- •2.2. Сортировка и Слияние Списков
- •2.2.1. Пузырьковая сортировка
- •2.2.2. Сортировка вставкой
- •2.2.3. Сортировка посредством выбора
- •2.2.4. Слияние списков
- •2.2.5. Сортировка списков путем слияния
- •2.2.6. Быстрая и распределяющая сортировки
- •2.3.1. Последовательный поиск
- •2.3.2. Бинарный поиск
- •2.3.3. М-блочный поиск
- •2.3.4. Методы вычисления адреса
- •2.3.5. Выбор в линейных списках
- •2.4. Рекурсия
1.4.9. Оператор do while
Оператор цикла do while называется оператором цикла с постусловием и используется в тех случаях, когда необходимо выполнить тело цикла хотя бы один раз. Формат оператора имеет следующий вид:
do тело while (выражение);
Схема выполнения оператора do while :
1. Выполняется тело цикла (которое может быть составным оператором).
2. Вычисляется выражение.
3. Если выражение ложно, то выполнение оператора do while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполнение оператора продолжается с пункта 1.
Чтобы прервать выполнение цикла до того, как условие станет ложным, можно использовать оператор break.
Операторы while и do while могут быть вложенными.
Пример:
int i,j,k;
...
i=0; j=0; k=0;
do { i++;
j--;
while (a[k] < i) k++;
}
while (i<30 && j<-30);
1.4.10. Оператор continue
Оператор continue, как и оператор break, используется только внутри операторов цикла, но в отличие от него выполнение программы продолжается не с оператора, следующего за прерванным оператором, а с начала прерванного оператора. Формат оператора следующий:
continue;
Пример:
int main()
{ int a,b;
for (a=1,b=0; a<100; b+=a,a++)
{ if (b%2) continue;
... /* обработка четных сумм */
}
return 0;
}
Когда сумма чисел от 1 до а становится нечетной, оператор continue передает управление на очередную итерацию цикла for, не выполняя операторы обработки четных сумм.
Оператор continue, как и оператор break, прерывает самый внутренний из объемлющих его циклов.
1.4.11. Оператор return
Оператор return завершает выполнение функции, в которой он задан, и возвращает управление в вызывающую функцию, в точку, непосредственно следующую за вызовом. Функция main передает управление операционной системе. Формат оператора:
return [выражение] ;
Значение выражения, если оно задано, возвращается в вызывающую функцию в качестве значения вызываемой функции. Если выражение опущено, то возвращаемое значение не определено. Выражение может быть заключено в круглые скобки, хотя их наличие не обязательно.
Если в какой-либо функции отсутствует оператор return, то передача управления в вызывающую функцию происходит после выполнения последнего оператора вызываемой функции. При этом возвращаемое значение не определено. Если функция не должна иметь возвращаемого значения, то ее нужно объявлять с типом void.
Таким образом, использование оператора return необходимо либо для немедленного выхода из функции, либо для передачи возвращаемого значения.
Пример:
int sum (int a, int b)
{ renurn (a+b); }
Функция sum имеет два формальных параметра a и b типа int, и возвращает значение типа int, о чем говорит описатель, стоящий перед именем функции. Возвращаемое оператором return значение равно сумме фактических параметров.
Пример:
void prov (int a, double b)
{ double c;
if (a<3) return;
else if (b>10) return;
else { c=a+b;
if ((2*c-b)==11) return;
}
}
В этом примере оператор return используется для выхода из функции в случае выполнения одного из проверяемых условий.