- •11. Операторы. Дополнение 135
- •12. Передача данных потоком 145
- •13. Файлы 149
- •14. Структура программы 157
- •15. Указатели, массивы, строки 170
- •16. Работа с экраhом 179
- •Задачи 185
- •Приложения 197
- •Библиографический список 224 введение
- •1. Основные понятия и определения
- •1.1. Компьютер
- •Процессор
- •Периферия
- •1.2. Алгоритмы
- •1.3. Программы и языки
- •Основные понятия языка программирования
- •Выполнение программы
- •Машинный и алгоритмический языки
- •Метаобозначения
- •Этапы обработки программы на компьютере
- •Терминология
- •Трансляция
- •Редактирование связей (компоновка)
- •Загрузка
- •1.4. Данные
- •Системы счисления
- •Типы и совокупности данных
- •Вещественные
- •Логические
- •Совокупности данных
- •2. Элементы языка
- •2.1. История языков с и Basic
- •2.2. Алфавит
- •2.3. Идентификаторы
- •2.4. Знаки разрядки
- •2.5. Комментарии
- •Могут ставиться везде, где допустим знак разрядки. Транслятор рассматривает их как пробел.
- •2.6. Запись текста программы
- •3.1.1. Целые
- •3.1.2. Данные с плавающей точкой
- •3.1.3. Логический тип
- •3.1.4. Символьные данные
- •3.1.5. Дополнительные типы данных
- •3.2. Совокупности данных
- •3.2.1. Массивы
- •Объявления массивов
- •Обращение к элементу массива
- •3.2.2. Структуры
- •Вопросы для самопроверки и контроля Вопросы для самопроверки
- •Контрольные вопросы
- •4. Выражения
- •4.1. Арифметические операторы Основные
- •Дополнительные
- •Приоритет
- •4.2. Операторы конкатенации
- •4.3. Операторы сравнения
- •4.4. Логические операторы
- •4.5. Обращение к функции
- •4.6. Встроенные функции
- •4.7. Заключительные замечания
- •5.2. Присваивание
- •5.3. Безусловный переход
- •5.4. Инструкция If. Пустая инструкция
- •5.5. Составная инструкция
- •5.6. Циклы
- •5.6.1. Циклы с предусловием
- •Циклы while
- •Циклы for
- •5.6.2. Циклы с постусловием
- •5.6.3. Вложенные циклы
- •5.7. Управляемые переходы
- •5.7.1. Инструкция break
- •5.7.2. Инструкция continue
- •5.7.3. Инструкции exit и continue
- •5.8. Многоальтернативный выбор
- •5.8.1. Инструкция switch (язык с)
- •5.8.2. Инструкция select case (язык Basic)
- •Вопросы для самопроверки и контроля Вопросы для самопроверки
- •Контрольные вопросы
- •6. Ввод-вывод
- •6.1. Язык Си
- •6.1.1. Управляющая строка
- •6.1.1.1. Спецификация d (целые десятичные числа)
- •6.1.1.2. Спецификация f (десятичные числа с плавающей точкой)
- •6.1.1.3. Спецификация e (десятичные числа с плавающей точкой)
- •6.1.1.4. Спецификация g (универсальная спецификация)
- •6.1.2. Вывод символьной информации
- •6.1.3. Инструкции printf и scanf. Схема ввода-вывода
- •6.2. Язык Basic
- •6.2.1. Метод ReadLine
- •6.2.2. Методы Write и WriteLine
- •7.1.1. Распределение скаляров
- •7 .1.2. Распределение массивов
- •7.1.3. Статическое и динамическое распределение памяти
- •7.2. Блоки
- •7.3. Процедуры
- •7.3.1. Определения процедур
- •7.3.2. Передача данных между процедурами
- •Механизмы передачи данных
- •Прототипы функций (c)
- •Передача скаляров Возвращаемое значение
- •Входные данные
- •Выходные данные
- •Передача массивов
- •Передача функций
- •Вопросы для самопроверки и контроля Вопросы для самопроверки
- •Контрольные вопросы
- •8. Препроцессор
- •8.1. Определение символических констант
- •8.2. Включение файлов в текст программы
- •9.1. Формирование листинга
- •Перенос:
- •9.2. Комментарии
- •9.3. Имена Имена объектов программы должны быть осмысленными.
- •3. Литералы.
- •9. Ввод-вывод:
- •10.5. Подмассивы (сечения) (c)
- •10.6. Динамические массивы (b)
- •10.7. Структуры и объединения
- •10.7.1. Структуры
- •10.7.3. Поля битов (с)
- •10.7.4. Объединения (смеси) (с)
- •10.7.5. Переменные структуры
- •10.10. Пользовательские типы данных
- •10.11. Преобразование типов
- •10.10.1. Автоматические преобразования
- •10.10.2. Явные преобразования
- •Вопросы для самопроверки и контроля Вопросы для самопроверки
- •Контрольные вопросы
- •11. Операторы. Дополнение
- •11.1. Уровень 1
- •11.2. Уровень 2 (унарные или одноместные операторы)
- •11.3. Уровень 3 (мультипликативные операторы)
- •11.4. Уровень 4 (аддитивные операторы)
- •11.5. Уровень 5 (сдвиги)
- •11.6. Уровень 6 (отношения)
- •11.7. Уровень 7 (равенство и неравенство)
- •11.8. Поразрядные операторы
- •11.9. Логические операторы
- •11.10. Уровень 13 (условное выражение)
- •11.11. Уровень 14 (операторы присваивания)
- •11.12. Уровень 15 (оператор ',' - запятая)
- •11.13. Некоторые замечания
- •11.14. Постоянные выражения
- •Вопросы для самопроверки и контроля Вопросы для самопроверки
- •Контрольные вопросы
- •12. Передача данных потоком
- •12.1. Спецификация "s" управляющей строки функций scanf и printf
- •12.2. Функции getchar и putchar
- •12.3. Функции gets и puts
- •12.4. Внутренняя передача данных (функции sscanf и sprintf)
- •13.1. Основные понятия
- •13.2. Описание файла
- •13.3. Открытие и закрытие файлов
- •13.4. Средства языка с
- •13.4.1. Открытие и закрытие файла
- •13.4.2. Основные функции обмена
- •13.5. Средства языка Basic
- •13.5.1. Открытие и закрытие файла Инструкция FileOpen
- •Инструкция FileClose
- •13.5.2. Работа с файлами Инструкция Input
- •Инструкция LineInput
- •Инструкции Write и WriteLine
- •Инструкции Print и PrintLine
- •Дополнительные функции
- •Функция MsgBox
- •14.1. Элементы структуры программы.
- •14.1.2. Язык Basic
- •14.2. Область видимости (действия) и время жизни переменных
- •14.2.1. Язык c
- •14.2.2. Язык Basic
- •14.3. Инициализация данных
- •14.3.1. Язык с
- •2. Массивы.
- •15.1. Указатели
- •Определение указателей
- •Задание значений
- •Вывод значений
- •15.2. Указатели и массивы
- •15.3. Работа со строками
- •15.3.1. Литералы
- •15.3.2. Переменные
- •15.3.3. Операторы и функции
- •15.4. Динамические объекты
- •15.5. Типичные ошибки, связанные с указателями Отсутствие инициализации указателя
- •Двойное указание
- •15.6.2. Однонаправленный список
- •15.7. Указатели и многомерные массивы
- •15.8. Рекурсивные процедуры
- •15.8.1. Рекурсивное решение
- •15.8.2. Нерекурсивное решение. Стек в виде массива
- •15.8.3. Нерекурсивное решение. Стек в виде списка
- •Вопросы для самопроверки и контроля Вопросы для самопроверки
- •Контрольные вопросы
- •16. Работа с экраhом
- •16.2. Управление окном
- •16.3. Управление атрибутом (цветами символа и фона в окне)
- •16.4. Информация о текстовом режиме
- •16.5. Пример
- •Простые циклы
- •Вложенные циклы
- •Процедуры
- •Работа со строками
- •Приложения
- •П1.1. Установка среды
- •П1.2. Запуск среды
- •П1.3. Меню Файл
- •П1.4. Меню Сервис
- •П1.5. Отладка
- •Начало отладки
- •Установка точек прерывания
- •Прогон до точки прерывания
- •Пошаговое выполнение программы
- •Получение значений объектов программы
- •Приложение 2. Среда разработки Visual Basic п2.1. Запуск среды
- •П2.2. Подготовка к работе с новым проектом
- •П2.3. Окна и режимы работы
- •П2.4. Главное меню
- •П2.5. Меню File (Файл)
- •П2.6. Редактирование текста
- •П2.7. Меню View (Вид)
- •П2.8. Меню Project (Проект)
- •П2.9. Отладка
- •Точки прерывания
- •Определение значений объектов программы в момент прерывания
- •Продолжение работы
- •П2.10. Меню Tools (Сервис)
- •П2.11. Меню Window (Окно)
- •Приложение 3. Ответы на вопросы для самопроверки
- •2. Элементы языка
- •3. Элементы данных
- •4. Выражения
- •5. Основные инструкции
- •6. Ввод-вывод
- •7. Процедуры
- •8. Препроцессор
- •9. Стиль программирования
- •10. Данные. Дополнение
- •11. Операторы. Дополнение
- •12. Передача данных потоком
- •13. Файлы
- •14. Структура программы
- •15. Указатели, массивы, строки
- •16. Работа с экраном
- •Приложение 4. Темы для курсовой работы
- •Библиографический список
5.5. Составная инструкция
В языке C составная инструкция употребляется в тех случаях, когда по правилам языка требуется одна инструкция, а по логике программы необходимо несколько.
Формат:
{<инструкция>;[<инструкция>;]...}
Пример. Найти x=max(a, b), y=min(a, b).
if(a>b){
x=a; y=b;
}else{
x=b; y=a;
}
В языке Basic такой инструкции нет по той же причине, что и пустой инструкции.
5.6. Циклы
Циклические (повторяющиеся) фрагменты программы можно реализовать с помощью уже рассмотренных инструкций, однако это делает фрагменты более длинными и ухудшает читабельность текста. Тем не менее умение запрограммировать циклы с помощью этих инструкций весьма полезно, поскольку проясняет последовательность действий при выполнении инструкций цикла.
Обобщенная блок-схема цикла состоит из следующих блоков (см. раздел 1.3): задание начальных значений, проверка условия продолжения (окончания) цикла, тело цикла, изменение условия продолжения (окончания) цикла.
Примеры. Программирование циклов без использования инструкции цикла.
Дано: {ai}, i=1...100. Найти сумму(ai>0) и сумму(ai<0).
C
u=v=0; i=0; // Инициализация цикла
begin: if(i>=100) goto end; // Условие окончания
if(a[ i ]>0)u+=a[ i ]; if(a[ i ]<0)v+=a[ i ]; // Тело цикла
i++; // Изменение условия
goto begin; // Переход к началу
end: ;
Basic
u=0 : v=0 : i=0 ' Инициализация цикла
begin: If i>=100 Then Goto konec ' Условие окончания
If a( i )>0 Then u+=a(i) ' Тело
If a( i )<0 Then v+=a(i) ' цикла
i+=1 ' Изменение условия
Goto begin ' Переход к началу
konec: ..................................
Дано: {ai}, i=1...100. Найти y=max{ai} и его номер.
С
MaxElem=a[0]; NumbMaxElem=i=1; // Инициализация цикла
Begin: if(i>=100) goto End; // Условие окончания
if(MaxElem<a[ i ]){ // Тело
MaxElem=a[ i ]; NumbMaxElem=i+1; //
} // цикла
i++; // Изменение условия
goto Begin; // Переход к началу
End: ;
Basic
MaxElem=a(0) : NumbMaxElem=1 : i=1 ' Инициализация цикла
Begin: If i>=100 Goto Konec ' Условие окончания
If MaxElem<a(i) Then MaxElem=a(i) : NumbMaxElem=i+1' Тело цикла
i+=1 ' Изменение условия
Goto Begin ' Переход к началу
Konec: ...........................................
Различают циклы с предусловием (тело цикла может ни разу не выполняться, см. выше) и постусловием (тело цикла выполняется хотя бы 1 раз).
Пример. Цикл с постусловием.
MaxElem=a(0) : NumbMaxElem=1 : i=1
Begin: If MaxElem<a(i) Then MaxElem=a(i) : NumbMaxElem=i+1
i+=1
If i<100 Goto Begin
Konec: ...........................................
5.6.1. Циклы с предусловием
Наиболее употребительный тип инструкции цикла. Существует несколько форм таких инструкций и в языке C, и в языке Basic. Назовем их условно циклы while и циклы for.
Циклы while
C
Формат:
while(<условие>)<инструкция>;
Эквивалентная схема:
label: if(<условие>){<инструкция>; goto label;}
...........................................................................
Замечания.
1. Тело цикла – 1 инструкция. Следовательно, при необходимости выполнения в теле нескольких действий нужно использовать составную инструкцию.
2. Для того, чтобы цикл когда-либо закончился (не произошло зацикливания), необходимо в теле цикла изменять переменные, входящие в условие.
3. Заметим, что задание начальных значений в инструкцию не входит. Следовательно, для этой цели необходимо использовать отдельные инструкции, расположив их перед инструкцией while.
4. Под эквивалентной схемой будем понимать сочетание инструкций присваивания, перехода, if, которое полностью реализует действия инструкции цикла в той же последовательности. Она облегчает понимание порядка выполнения инструкции цикла.
Пример. Найти xn/n!,n=1,2,..., пока |un|>5e-6.
Рекуррентное соотношение: un/un-1=xn*(n-1)!/xn-1*n!=x/n un=un-1*x/n
s=0;
u=n=1;
while(fabs(u)>5e-6){
u *= x/n; s += u; n++;
}
Basic
Формат:
Do While <условие>
<инструкции>
Loop
Пример. Тот же.
s=0 : u=1 : n=1
Do While Abs(u)>5e-6
u *= x/n : s += u : n += 1
Loop
Допустима другая разновидность этой инструкции:
Do Until <условие>
<инструкции>
Loop
Она отличается тем, что цикл повторяется до тех пор, пока условие не примет значение True. Выбор разновидности определяется тем, какое условие (продолжения или прекращения цикла) легче сформулировать или короче записать.
Пример.
s=0 : u=1 : n=1
Do Until Abs(u)<=5e-6
u *= x/n : s += u : n += 1
Loop
Есть еще 1 инструкция, более похожая на инструкцию языка C:
While <условие>
<инструкции>
End While
Работает так же, как инструкция Do While ... Loop.
Рекомендация. Циклы while разумно применять в тех случаях, когда:
- число повторений тела цикла не определено;
- неизвестна закономерность повторений или она сложна.
Замечание. Один и тот же алгоритм может быть реализован с любым видом инструкции цикла и даже, вообще, без них. В вопросе выбора вида инструкции надо руководствоваться понятностью текста программы, прежде всего, для себя, а также для других возможных читателей.
