- •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. Определения процедур
- •Прототипы функций (c)
- •7.3.2. Передача данных между процедурами
- •Механизмы передачи данных
- •Передача скаляров Возвращаемое значение
- •Входные данные
- •Выходные данные
- •Передача массивов
- •Передача функций
- •Вопросы для самопроверки и контроля Вопросы для самопроверки
- •Контрольные вопросы
- •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. Темы для курсовой работы
- •Библиографический список
16.2. Управление окном
void window(int left, int top, int right, int bottom); Описывает окно с абсолютными координатами. При некорректных аргументах выполнение игнорируется. Никаких внешних действий на экране не происходит!!!
16.3. Управление атрибутом (цветами символа и фона в окне)
Замечание. Все нижеперечисленные функции влияют только на выполнение функций консольного ввода-вывода. Например, функция printf выводит информацию только с позиции, где находится курсор, безотносительно назначенного окна.
void textcolor(int color); Цвет символа кодируется целыми значениями из диапазона [0-15].
Пример. textcolor(RED); // Красный цвет
void textbackground(int color); Цвет фона. Диапазон [0-7].
void textattr(int attr); Одновременное установка цветов символа и фона.
Структура памяти под аргумент attr побитно имеет вид:
7 6 5 4 3 2 1 0
B b b b f f f f ffff – символ, bbb – фон, B – мерцание.
Пример.
textattr(BLACK+(RED<<4)); // Черный символ на красном фоне
Замечание. Все функции этого пункта только устанавливают цветовой режим, но окраску содержимого окна не производят. Это делают последующие за ними функции консольного ввода-вывода.
16.4. Информация о текстовом режиме
void gettextinfo(struct text_info *ptr);
Структура text_info определена в файле coniow.h и имеет вид:
struct text_info{
unsigned short winleft, wintop, winright, winbottom; //Текущее окно
unsigned short attribute, normattr; //Текущий атрибут
unsigned short currmode; //Текстовый режим
unsigned short screenheight, screenwidth; // Размеры экрана
short curx, cury; // Координаты курсора в окне
}
16.5. Пример
Формирование окон сообщений, подсказок, полей ввода.
Набор функций:
- message - вывод сообщений,
- status - вывод подсказок,
- diagnos - вывод диагностических сообщений,
- vvod - формирование полей ввода,
- out_text - вывод строки в окно,
- init_window - инициализировать окно,
- clear_window - очистить окно,
- ramka - нарисовать рамку окна.
/*****************************/
/* MESSAGE */
/* Вывести сообщение */
/*****************************/
#include <coniow.h>
#define EKRAN BLACK
void message(int nom, // N сообщения
int reg){ // режим: FULL=1-вывод, CLEAR=0-очистить окно
static struct mes{
int beg_x, // Коорди-
beg_y, // наты
end_x, // ок-
end_y, // на
char regim; // r-разрядка, p-плотный
char* text; // Текст сообщения
}def[ ]={ // Описание сообщений
28,2,52,4,'r',"ВВОД ДАННЫХ",
19,12,61,14,'p',"Имя файла входных данных",
.........................................
19,12,61,14,'r',"ВВОД ДАННЫХ ЗАКОНЧЕН"
};
struct mes *p; // Указатель на элемент описания
p=&def[nom-1];
if(reg){
init_window(p->beg_x, p->beg_y, p->end_x, p->end_y, BLACK,
LIGHTGRAY);
out_text(2, 2, 200, p->regim, p->text);
}else{
clear_window(p->beg_x, p->beg_y, p->end_x, p->end_y, EKRAN);
}
} // End message
Приведенные ниже функции включены в файл window.c.
/* Вывод строки в окно */
void out_text(int x, // Начальная позиция курсора по X
int y, // Начальная позиция курсора по Y
int kol, // Число выводимых символов
int reg, // Режим: r-разрядка, p-плотный
char *text){ // Текст сообщения
int i;
gotoxy(x, y);
for(i=0; i<kol && *(text+i) != '\0'; i++){
if(reg=='r')putch(' ');
if(*(text+i)=='\n'){
y++;
gotoxy(x, y);
}else{
putch(*(text+i));
}
}
} // End out_text
Замечание. Символы второй кодовой страницы надо задавать в виде:
\<код символа в 8-й системе счисления>. См. пример ниже.
/* Рисование рамки */
void ramka(int width, // ширина(в позициях)
int height){ // высота(в строках)
static unsigned char cont[ ]="+\226|"; //Символы рамки
int i;
gotoxy(1, 1);
putch(cont[0]);
for(i=2; i<width; i++)putch(cont[1]);
putch(cont[0]);
for(i=2; i<height; i++){
gotoxy(1, i);
putch(cont[2]);
gotoxy(width, i);
putch(cont[2]);
}
gotoxy(1, height);
putch(cont[0]);
for(i=2; i<width; i++)putch(cont[1]);
putch(cont[0]);
} // End ramka
Вопросы для самопроверки и контроля
Вопросы для самопроверки
1. Какой заголовочный файл нужен для работы с окнами?
2. Укажите начальные координаты курсора в текстовом режиме.
Контрольные вопросы
1. Какие функции работают в абсолютных координатах экрана?
2. Что делает функция textattr?
ЗАДАЧИ
Элементарные конструкции
1. Какие нижеприведенных записей можно использовать в качестве имен:
X Begin a[3] 3D_Studuo Step1 sin(x) CTEK a15x Str.X 1 конец _XX x_x
2. Какие из записей ниже являются целыми литералами:
0 +006 -45 3. .55 0712 &034 0xabc 0X12a5 &habc &H12A5
3. Какие из записей ниже можно считать литералами с плавающей точкой:
-123.4 34.05 75. -.05 0.0123 -34.593E-12 -2e5 1D15 d-23 1e1 -1e-1.2 0E-3
4. Записать на языках C и Basic следующие арифметические выражения:
a)
б)
в)
г)
д)
е)
5. Определить количество сотен натурального числа.
6. Дано трехзначное натуральное число n. Записать его в обратном порядке, например, 456 654.
7. Записать логическое выражение, принимающее значение true, если точка М(x,y) попадает в заштрихованную область:
a
) y б)
y
1 1
x -1 1 x
1 2
-1
в) y г) y
2
2
-2 1 1 2 x -1 1 x
-2 -2
8. Записать логическое выражение, принимающее значение true, если из отрезков с длинами x, y, z можно составить треугольник.
9. Начертить на плоскости XY области, в которых перечисленные ниже выражения принимают значения true (выражения записаны на языке C):
а) x*x+y*y<=1 || x>0
б) x>y == y>0
в) x+y<=1 || x>=0 && !(y<0)
г) x*x+y*y<1 && y>=x ==y>.5
