
- •Оглавление
- •6. Ввод-вывод 52
- •11. Операторы. Дополнение 93
- •12. Передача данных потоком 100
- •13. Файлы 103
- •14. Структура программы 109
- •15. Указатели, массивы, строки 118
- •16. Работа с экраhом 137
- •17. Управление программой с помощью клавиатуры 151
- •Введение
- •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.1. Арифметические операторы Основные
- •Дополнительные
- •Приоритет
- •4.2. Операторы конкатенации
- •4.3. Операторы сравнения
- •4.4. Логические операторы
- •4.5. Обращение к функции
- •4.6. Встроенные функции
- •4.7. Заключительные замечания
- •5.1. Объявления
- •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
- •5.8. Многоальтернативный выбор
- •5.8.1. Инструкция switch (язык с)
- •5.8.2. Инструкция select case (язык Basic)
- •Вопросы для самопроверки и контроля Вопросы для самопроверки
- •Контрольные вопросы
- •6. Ввод-вывод
- •6.1. Управляющая строка
- •6.1.1. Спецификация d (целые десятичные числа)
- •6.1.2. Спецификация f (десятичные числа с плавающей точкой)
- •6.1.3. Спецификация e (десятичные числа с плавающей точкой)
- •6.1.4. Спецификация g (универсальная спецификация)
- •6.1.5. Вывод символьной информации
- •6.2. Инструкции printf и scanf. Схема ввода-вывода
- •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. Литералы.
- •10.5. Подмассивы (сечения) (c)
- •10.6. Динамические массивы (b)
- •10.7. Структуры и объединения (c)
- •10.7.1. Структуры
- •10.7.2. Рекурсивные структуры
- •10.7.3. Поля битов
- •10.7.4. Объединения (смеси)
- •10.7.5. Переменные структуры
- •10.9. Пользовательские типы данных
- •10.9.1. Инструкция type (b)
- •10.9.2. Инструкция typedef (c)
- •10.10. Преобразование типов
- •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.2. Описание файла
- •13.3. Открытие и закрытие файлов
- •13.4. Средства языка с
- •13.4.1. Открытие и закрытие файла
- •13.4.2. Основные функции обмена
- •13.5. Средства языка Basic
- •13.5.1. Открытие и закрытие файла Инструкция open
- •Инструкция close
- •13.5.2. Работа с файлами Инструкция input
- •Функция input
- •Инструкция line input
- •Инструкция write
- •Инструкция print
- •Инструкция width
- •Длина файла
- •Функция MsgBox
- •Вопросы для самопроверки и контроля Вопросы для самопроверки
- •Контрольные вопросы
- •14. Структура программы
- •14.1. Элементы структуры программы.
- •14.1.1. Язык c
- •14.1.2. Язык Basic
- •14.2. Область видимости (действия) и время жизни переменных
- •14.2.1. Язык c
- •14.2.2. Язык Basic
- •14.3. Проект программы
- •14.3.1. Использование директивы препроцессора #include
- •14.3.2. Средства управления проектом
- •14.4. Инициализация данных
- •2. Массивы.
- •15.1. Указатели
- •Определение указателей
- •Задание значений
- •Вывод значений
- •15.2. Указатели и массивы
- •15.3. Работа со строками
- •15.3.1. Литералы
- •15.3.2. Переменные
- •15.3.3. Операторы и функции
- •15.4. Динамические объекты
- •15.5. Типичные ошибки, связанные с указателями Отсутствие инициализации указателя
- •Двойное указание
- •Hе выполнено освобождение выделенной памяти
- •Задание адреса локальной (auto) переменной
- •15.6. Примеры использования указателей. Структуры данных
- •15.6.1. Стек
- •15.6.2. Однонаправленный список
- •15.7. Ссылки и многомерные массивы
- •15.8. Рекурсивные процедуры
- •15.8.1. Рекурсивное решение
- •15.8.2. Нерекурсивное решение. Стек в виде массива
- •15.8.3. Нерекурсивное решение. Стек в виде списка
- •Вопросы для самопроверки и контроля Вопросы для самопроверки
- •Контрольные вопросы
- •16. Работа с экраhом
- •16.1. Текстовый режим(textmode)
- •16.1.2. Управление режимом и окном
- •16.1.3. Управление атрибутом(цветами символа и фона в окне)
- •16.1.4. Информация о текстовом режиме
- •16.1.5. Пример
- •16.1.6. Пример(продолжение)
- •16.2. Графический режим
- •16.2.1. Установка и закрытие
- •16.2.2. Форматирование Цвета
- •Битовые образы(pattern)
- •Текстовые фонты
- •Восстановление установок по умолчанию
- •16.2.3. Размещение на экране Окна
- •Координаты курсора и перемещения
- •16.2.4. Вывод на экран Текст
- •Прямоугольники
- •Эллипсы
- •Многоугольники
- •Пиксели
- •16.2.5. Дополнительные функции
- •Простые циклы
- •Вложенные циклы
- •Процедуры
- •Работа со строками
- •Приложения
- •П1.1. Меню File (Файл)
- •П1.2. Меню Options (Установки среды)
- •П1.3. Разное
- •П1.4. Редактирование текста
- •П1.5. Сообщения
- •Трансляция
- •Компоновка (редактирование связей)
- •Ошибки времени выполнения
- •П1.6. Отладка
- •Прогон до точки прерывания
- •Пошаговое выполнение программы
- •Установка точек прерывания
- •Получение значений объектов программы
- •П1.7. Окна
- •Управление окнами
- •Приложение 2. Среда разработки Visual Basic Express
- •П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. Работа с экраном
- •17. Управление программой с помощью клавиатуры
- •Приложение 4. Темы для курсовой работы
- •Библиографический список
9.3. Имена Имена объектов программы должны быть осмысленными.
Пример.
tip razmer adress
Hе надо!
xx aa a1 a2
В настоящее время во всем мире приняты 2 системы записи (нотации) имен: "паскалевская" и "венгерская". Обе рекомендуют использовать имена, состоящие, в общем случае, из нескольких слов. В "паскалевской" нотации каждое слово начинают с прописной буквы.
Пример.
BegKm EndKm FieldName
В "венгерской" нотации перед именем записывается тип объекта программы.
Пример.
intBegKm intEndKm charFieldName
Не используйте в программе сходные имена!
Пример.
value values
ax1 axi
k K
Если имя содержит цифры, записывайте их в конце.
Пример.
fund1 Tab15
Имя не должно совпадать с ключевым словом (для языков, где ключевые слова не резервируются) или с именем библиотечной или встроенной функции.
В языках Basic и С ключевые слова зарезервированы, т.е. при подобном совпадении транслятор выдает ошибку. Однако в некоторых языках допустимы такие конструкции.
Пример. PL/1.
if if = then then
then=else;
else
else=if;
9.4. Язык и приемы программирования
1. Активно используйте удобные и понятные особенности языка.
Пример.
C a=b=0; k++; x+=c; //Многократное присваивание – это удобно!
Basic x=5 : y=x^3-2 '2-3 связанные короткие инструкции в 1 строку
2. Изучайте и используйте библиотечные функции. Малоупотребительные комментируйте.
Пример.
/* pow(x,n) – возведение x в степень n */
3. Не применяйте трюки!
Пример. Формирование единичной матрицы.
for(k=0; k<n; k++){
for(m=0; m<n; m++){
x[k][m]=((k+1)/(m+1))*((m+1)/(k+1)); // Это трюк!
}
}
То же самое можно записать так.
for(k=0; k<n; k++){
for(m=0; m<n; m++){
x[k][m]=0;
}
x[k][k]=1;
}
4. Не игнорируйте предупреждения и старайтесь их ликвидировать!
Предупреждение при трансляции в большинстве случаев указывает место возможной ошибки.
Conversion may lose signicant digits При преобразовании могут быть потеряны значащие цифры. Возникает, например, при попытке присваивания short=long (C) или integer=long (Basic).
Parameter 'doc' is never used Параметр 'doc' никогда не используется. Чаще всего возникает после модификации выполняемых инструкций программы, когда необходимость в параметре doc отпала, а в объявлении или в списке параметров процедуры он сохранился.
5. Избегайте промежуточных переменных. Формулы следует в записывать в том же виде, как это принято в математике.
Пример.
y=2*(a+b) / sqrt((a+b)*(a+b)+(c+d)*(c+d));
6. Не изменяйте значение параметра цикла внутри тела цикла.
Это затрудняет понимание логики программы. Кроме того, некоторые языки программирования (Fortran) в целях оптимизации по времени работы помещают копию параметра цикла в регистр процессора. В этом случае изменение параметра цикла в теле цикла не повлияет на условие его выполнения, что почти наверняка приведет к ошибке.
7. Избегайте инструкций перехода.
Эти инструкции нарушают естественный порядок выполнения программы. Придерживайтесь принципа: текст программы надо читать как книгу слева направо и сверху вниз.
Не используйте помеченные инструкции, на которые нет ссылок.
Единственный смысл такого применения меток – это дополнительное комментирование. Зачем тогда комментарии языка?
8. Объявляйте все переменные явно.
Явное объявление, кроме своей основной функции определения типа объекта программы, позволяет выявить 1 весьма распространенный вид ошибок – описки. Применение подобных имен в тексте вызовет ошибку или предупреждение при трансляции.
9. Не используйте одни и те же переменные для различных целей.
При последующей модификации одного фрагмента программы такие переменные могут вызвать ошибку в другом фрагменте.
10. Не забывайте, что данные с плавающей точкой есть приближенные представления десятичных значений.
Для них с осторожностью надо применять операции равно и не равно.
Пример. Цикл с вещественным параметром.
for x=0 to 2 step 0.05
........................
next x
Проход по телу цикла при x=2 может не выполниться. Необходимо записывать так:
for x=0 to 2.02 step 0.05
........................
next x
11. Используйте исчерпывающие проверки.
Если переменная должна принимать значения 1|2|3, не следует полагать, что ее значение равно 3, если оно не равно 1 и не равно 2, т.к. возможны ошибки.
9.5. Стиль в языках С и Basic
По оценке авторов:
ОВ – весьма важная рекомендация;
В – рекомендация средней важности;
МВ – рекомендация относительно малой важности.
Степень важности рекомендаций определялась на основании оценки их влияния на написание надежной (с минимумом ошибок) программы.
1. (В) Имена. Использовать "паскалевскую" или "венгерскую" нотации.
2. (В) Описатели. Поскольку различные трансляторы языка C отводят данным типа int 2 или 4 байта, использовать для обычных целых тип short, длина элемента которого всегда 2 байта, для длинных целых long – длина всегда 4 байта. Если постановка задачи не требует повышенной точности представления, использовать для данных с плавающей точкой типы float (C) и single (Basic).