- •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.2. Присваивание
C
Формат:
...[<переменная>=]<переменная>[<знак>]=<выражение>;
Пример.
x=-.127; i=i+1; a[i+1]=x*y+2*sin((z+1)*(x-2));
Инструкция вида i++; фактически эквивалентна инструкции i=i+1; , поэтому ее также можно отнести к присваиванию.
Инструкция вида x+=a+b/2; эквивалентна инструкции x=x+a+b/2; и является просто сокращенной формой записи операции изменения значения переменной и в качестве знака может использоваться любой оператор, при котором полученная конструкция имеет смысл. В дальнейшем увидим, что таких знаков достаточно много.
Следует обратить внимание на многократное присваивание, которое весьма удобно.
Пример.
i=j=k=0; эквивалентно k=0; j=k; i=j;
Однако, если один из операндов переменная с индексами, то сначала вычисляются индексные выражения и только потом выполняется присваивание.
Пример.
i=1;
j=3;
a[ i ][ j ]=i=i+1; в результате получим i=2 a[1][3]=2
Basic
Формат:
<переменная>[знак]=<выражение>
Опция [знак] имеет тот же смысл, что и в языке С.
Пример.
x=-0.127: i+=1: a(i+1)=x*y+2*Sin((z+1)*(x-2)): m( i, j )=i+1
5.3. Безусловный переход
Инструкция выполняет переход к другой выполняемой инструкции. Для осуществления перехода нужно указать место, в которое необходимо перейти. Для этого используется объект программы – метка, которая присоединяется к нужной инструкции. Такая инструкция называется помеченной.
<помеченная инструкция>:=<метка><инструкция>
<метка>:=<имя:>|<номер:> для Basic
<номер>:=<целое без знака>
Замечания (Basic).
1. Использование номера является анахронизмом – пришло из старых версий языка, сейчас лучше не использовать.
2. Если в качестве метки все-таки используется номер, то в пределах области действия метки номера должны нарастать. Понятие области действия будет введено в другом разделе.
Сама инструкция имеет вид:
C
goto <метка>;
Пример.
goto label;
..........
label:x++;
Basic (устаревший вариант)
Goto 10
.............
10: x=x+1
Рекомендация. Инструкция перехода нарушает естественный порядок выполнения программы, что вызывает трудности при чтении текста программы и ее отладке. Набор инструкций языков C и Basic позволяет реализовать практически любой алгоритм, не используя эту инструкцию, поэтому следует избегать ее применения.
5.4. Инструкция If. Пустая инструкция
Реализует базовую вычислительную структуру – развилку.
C
Формат:
if(<выражение>)<инструкция 1>;
[else <инструкция 2>;]
Если <выражение> принимает значение true (0), то выполняется <инструкция 1>. Если <выражение> принимает значение false (=0), то выполняется <инструкция 2>. По правилам языка в каждой ветви должна быть только одна инструкция. В качестве любой из инструкций может использоваться другая инструкция if. Такие инструкции называют вложенными. Инструкции, входящие в состав инструкции if, для удобства чтения текста принято сдвигать вправо на 3-5 позиций.
Примеры.
if(a>b) if(x*x+y*y>r*r)z=0;
c=a;
else
x+1, если x<0 if(x<0)
c=b; y= y=x+1;
1-x, если x>=0 else
y=1-x;
Вложенные if
i
f(x>y)
x*x-5,
если x<0
if(z==0) y= x+3, если 0<=x<=5
x=5; x-7, если x>5
else
x=-5; if(x<0)
else y=x*x-5;
if(z>10) else
y=5; if(x<=5)
else y=sqrt(x)+3;
y=-5; else
y=x-7;
Пустая инструкция (есть только в языке C) имеет вид: ;.
Пример.
if(x>y)
if(z==w)
if(w<p)
y=1;
else
p=q; //При x>y && z!=w переход к инструкции с меткой m1
else ; // Пустая инструкция
else
x=4;
m1:z=5;
Как видно из примера, необходимость пустой инструкции вытекает из правил языка. Она употребляется тогда, когда по правилам требуется наличие инструкции, а никаких действий в программе не предполагается.
Basic
Используются 2 формы инструкции If.
Однострочная форма.
Формат:
If <условие> Then [<инструкции>] [Else <инструкции>]
Замечания.
1. Эта форма инструкции If записывается в одну строку.
2. Инструкции за словом Then могут отсутствовать только при наличии в инструкции If слова Else.
3. Инструкций за словами Then и Else может быть более одной. В этом случае они отделяются друг от друга символом ":" .
Пример.
If x*x+y*y>r*r Then z=0
If a>b Then c=a : d=b Else c=b : d=a
Блочная форма ("цепочка").
Формат:
If <условие 1> [Then]
[<инструкции>]
[ElseIf <условие 2> [Then]
[<инструкции>]
]...
[Else
[<инструкции>]
]
End If
Замечания.
1. Слово If этой формы должно быть первым в строке. Слово Then можно не записывать.
2. Количество опций (частей) ElseIf в инструкции не ограничено, однако рекомендуется использовать не более 3, поскольку текст становится плохо читаем. Для программирования большего числа альтернатив существует другая инструкция, описанная ниже в данном разделе.
3. Форма обязательно должна заканчиваться инструкцией End If.
4. При выполнении производится последовательная проверка условий. Как только какое-либо из них принимает значение True, выполняются следующие за соответствующим словом Then инструкции и управление передается на инструкцию, следующую за инструкцией End If. Если не будет истинно ни одно из условий, то выполняются инструкции, следующие за словом Else.
5. В состав внутренних инструкций в свою очередь могут входить другие инструкции If любой формы.
6. Транслятор отличает эту форму по отсутствию в строке после слова Then других инструкций, не входящих в инструкцию If. Допустим только комментарий.
Примеры. Вычислить:
x*x-5, если x<0
y= x+3, если 0<=x<=5
x-7, если x>5
If x<0 Then
y=x*x-5
ElseIf x<=5 Then
y=Sqrt(x)+3
Else
y=x-7
End If
Вложенные инструкции:
If x>y Then
If z=w Then
If w<p Then
y=1
Else
p=q
End If
'при x>y and z<>w переход к инструкции с меткой m1
End If
Else
x=4
End If
m1:z=5
Из примеров видно, что в языке Basic не требуется пустая инструкция.
