- •ПРОГРАММИРОВАНИЕ НА ЯЗЫКАХ С И С++
- •СОДЕРЖАНИЕ
- •ВВЕДЕНИЕ
- •Диапазон
- •1. ЛЕКСИКА ЯЗЫКА C
- •1.1. РАЗДЕЛИТЕЛИ
- •1.2. КОММЕНТАРИИ
- •2. ДАННЫЕ И ОПЕРАЦИИ
- •2.1. БАЗОВЫЕ ТИПЫ ДАННЫХ
- •Наименование
- •2.2. КОНСТАНТЫ
- •Целые константы
- •Константы с плавающей точкой
- •Символьные константы
- •2.3. ОПРЕДЕЛЕНИЕ ПЕРЕМЕННЫХ И ТИПИЗИРОВАННЫХ КОНСТАНТ
- •2.4. ОДНОМЕРНЫЙ МАССИВ
- •2.5. СТРОКИ, СТРОКОВЫЕ КОНСТАНТЫ
- •2.6. УКАЗАТЕЛИ
- •2.7. ПЕРЕИМЕНОВАНИЯ ТИПОВ
- •2.8. СТРУКТУРЫ
- •2.9. МАССИВЫ СТРУКТУР
- •2.10. МНОГОМЕРНЫЕ МАССИВЫ
- •2.11. ОБЪЕДИНЕНИЕ
- •2.12. ПЕРЕЧИСЛЕНИЕ
- •2.13. БИТОВОЕ ПОЛЕ ( ЗАПИСЬ )
- •3. ОПЕРАЦИИ И ВЫРАЖЕНИЯ
- •3.1. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ
- •3.2. ОПЕРАЦИИ СРАВНЕНИЯ
- •3.3. ЛОГИЧЕСКИЕ ОПЕРАЦИИ
- •3.4. ПОБИТОВЫЕ (ПОРАЗРЯДНЫЕ) ОПЕРАЦИИ
- •3.5. ОПЕРАЦИИ ПРИСВАИВАНИЯ
- •3.6. АДРЕСНЫЕ ОПЕРАЦИИ
- •3.7. ДОСТУП К ПОЛЯМ СТРУКТУР, ОБЪЕДИНЕНИЙ И ЗАПИСЕЙ
- •3.8. ДРУГИЕ ОПЕРАЦИИ
- •3.9. ПОРЯДОК ВЫПОЛНЕНИЯ ОПЕРАЦИЙ В ВЫРАЖЕНИИ
- •4. ОПЕРАТОРЫ
- •4.1. ОПЕРАТОР-ВЫРАЖЕНИЕ
- •4.2. ПУСТОЙ ОПЕРАТОР
- •4.3. СОСТАВНОЙ ОПЕРАТОР
- •4.4. УСЛОВНЫЕ ОПЕРАТОРЫ
- •4.5. ОПЕРАТОРЫ ЦИКЛА
- •while( выражение) оператор;
- •do оператор while ( выражение );
- •for( выражение1; выражение2; выражение3 ) оператор;
- •4.6. ОПЕРАТОРЫ ПЕРЕХОДА
- •break;
- •switch
- •continue;
- •goto метка;
- •5. ФУНКЦИИ. КЛАССЫ ПАМЯТИ
- •5.1. ФУНКЦИИ
- •5.2. КЛАССЫ ПАМЯТИ
- •класс памяти
- •ключевое слово
- •существование
- •видимость
- •5.3. ВОЗВРАЩЕНИЕ ЗНАЧЕНИЙ
- •5.4. АРГУМЕНТЫ ФУНКЦИИ
- •6. ФУНКЦИИ ВВОДА С КЛАВИАТУРЫ И ВЫВОДА НА ДИСПЛЕЙ
- •6.1. ФОРМАТИРОВАННЫЙ ВЫВОД
- •6.2. ФОРМАТИРОВАННЫЙ ВВОД
- •6.3. ВВОД СТРОКИ
- •6.4. ВЫВОД СТРОКИ
- •6.5. ВВОД СИМВОЛА
- •6.6. ВЫВОД СИМВОЛА
- •7. ПРЕПРОЦЕССОР
- •7.1. ВКЛЮЧЕНИЕ ФАЙЛОВ
- •7.2. ВЫПОЛНЕНИЕ ПОДСТАНОВОК
- •7.3. УСЛОВНАЯ КОМПИЛЯЦИЯ
- •8. ДИНАМИЧЕСКОЕ РАСПРЕДЕЛЕНИЕ ПАМЯТИ, СПИСКИ
- •8.1. ВЫДЕЛЕНИЕ И ОСВОБОЖДЕНИЕ ДИНАМИЧЕСКОЙ ПАМЯТИ
- •8.2. СПИСКИ
- •Рис.1. Структура однонаправленного линейного списка
- •9. ФАЙЛЫ
- •9.1. ОТКРЫТИЕ И ЗАКРЫТИЕ ФАЙЛОВ
- •9.2. ЧТЕНИЕ И ЗАПИСЬ В ФАЙЛ
- •9.3. ПРОИЗВОЛЬНЫЙ ДОСТУП К ФАЙЛУ
- •10. ЛАБОРАТОРНЫЕ РАБОТЫ
- •10.1. МАССИВЫ И СИМВОЛЬНЫЕ СТРОКИ
- •Цель работы
- •Пример выполнения работы
- •Варианты заданий
- •10.2. ФУНКЦИИ
- •Цель работы
- •Пример выполнения работы
- •Варианты заданий
- •10.3. СТРУКТУРЫ И МАССИВЫ СТРУКТУР
- •Цель работы
- •Пример выполнения работы
- •Варианты заданий
- •10.4. ДИНАМИЧЕСКОЕ РАСПРЕДЕЛЕНИЕ ПАМЯТИ, СПИСКИ
- •Цель работы
- •Пример выполнения работы
- •Варианты заданий
- •10.5. РАБОТА С ФАЙЛАМИ
- •Цель работы
- •Пример выполнения работы
- •Варианты заданий
- •11. ВВЕДЕНИЕ В C++
- •12. КЛАССЫ
- •12.1. ОБЩИЕ ПОЛОЖЕНИЯ
- •12.2. КОНСТРУКТОРЫ И ДЕСТРУКТОРЫ
- •12.3. СОЗДАНИЕ И ВЫЗОВ ОБЪЕКТОВ
- •12.4. ДРУЖЕСТВЕННЫЕ ФУНКЦИИ
- •12.5. ПЕPЕГPУЖЕННЫЕ ОПЕPАЦИИ И ФУНКЦИИ
- •12.6. ПАРАМЕТРИЗИРОВАННЫЕ КЛАССЫ
- •12.7. ПРЕОБРАЗОВАНИЕ ТИПОВ
- •12.8. СТАТИЧЕСКИЕ КОМПОНЕНТЫ КЛАССА
- •13. ПРОИЗВОДНЫЕ КЛАССЫ, НАСЛЕДОВАНИЕ
- •13.1. ИЕРАРХИЯ КЛАССОВ
- •13.2. ДОСТУП К НАСЛЕДУЕМЫМ КОМПОНЕНТАМ
- •Доступ в базовом классе
- •Модификатор доступа
- •14. ВИРТУАЛЬНЫЕ ФУНКЦИИ
- •14.1. ОБЩИЕ ПОЛОЖЕНИЯ
- •14.2. ВИРТУАЛЬНЫЕ ДЕСТРУКТОРЫ
- •14.3. АБСТРАКТНЫЕ КЛАССЫ
- •15.1. ВЫВОД ДАННЫХ
- •15.2. ВВОД ДАННЫХ
- •15.3. ВВОД-ВЫВОД ДАННЫХ, ОПРЕДЕЛЕННЫХ ПОЛЬЗОВАТЕЛЕМ
- •15.4. РАБОТА С ДИСКОВЫМИ ФАЙЛАМИ
- •15.5. ОБРАБОТКА ИСКЛЮЧЕНИЙ
- •ЛИТЕРАТУРА
– 30 –
9. ФАЙЛЫ
9.1. ОТКРЫТИЕ И ЗАКРЫТИЕ ФАЙЛОВ
Для работы с дисковыми файлами в С используется тип FILE, определение которого записано в файле stdio.h. Файлы объявляются как указатели на этот тип:
FILE *in, *out;
Файл открывается функцией FILE *fopen( имя_файла, вид_обработки ), здесь имя_файла – текстовая строка, вид_обработки – один из символов ”r”, ”w”, ”a”. Первый означает, что файл открыт для чтения данных, второй – для записи, третий – для добавления данных. Функция возвращает адрес файла.
При режимах ”w” и ”а” файл, если его нет на диске, создается с соответствующим именем. В случае ошибки, например при отсутствии файла в режиме ”r”, функция fopen возвращает NULL. Поэтому рекомендуется следующая схема работы с файлами:
if(( in=fopen(”text”,”r”))==NULL ){
//работа с файлом
}
else
puts(”не могу открыть файл”);
Файл закрывается функцией fclose(указатель_на_файл);
9.2. ЧТЕНИЕ И ЗАПИСЬ В ФАЙЛ
Все функции ввода-вывода, рассмотренные ранее, имеют аналоги для файлов; в перечень их аргументов включается указатель на соответствующий файл. В операторах fprintf и fscanf он первый, в fputs и fgets – последний. Ниже приведена программа перезаписи числа из файла text в файл text1 вместе с поясняющим текстом.
void main() { FILE *in; int numb;
in=fopen(“text”, “r”);
fscanf(in,”%d”,&numb); // считывание числа из файла text в переменную numb fclose(in);
in=fopen(“text1”,”w”);
fprintf(in,”сумма =%d”,numb); // запись в файл строки и числа fclose(in);
}
Для чтения строки из файла служит функция:
fgets( имя_переменной, длина_строки, указатель_на_файл );
Функция fgets при достижении конца файла возвращает NULL. Функция записи строки в файл имеет вид
fputs( имя_строки, указатель_на_файл );
Для того чтобы вывести на экран содержимое файла text по строкам, длиной не более
80символов в каждой, необходимо выполнить следующую программу.
©1998 Калачев Д.П., Лутай В.Н.
– 31 –
#define MaxLine 80; main(){
FILE *f;
char string[ MaxLine ]; f=fopen(”text”,”r”);
while( fgets(string,MaxLine,f) != NULL) puts(string);
}
Чтение символа из файла и запись символа в файл выполняются функциями: getc(указатель_на_файл) и putc(имя_переменной, указатель_на_файл).
Пример: программа выводит посимвольно на экран содержимое файла text.
void main(){ FILE *f; int ch;
if ((f=fopen(”text”,”r”)!=NULL) { while((ch=getc(f)!=EOF) putchar(ch)); fclose(f);
}
else printf(”Не могу открыть файл”);
}
Символ EOF – признак конца файла.
9.3. ПРОИЗВОЛЬНЫЙ ДОСТУП К ФАЙЛУ
Приведенные выше функции читают или записывают данные в файл последовательно с его начала. Для обработки содержимого файла, начиная с произвольного места, используется функция произвольного доступа, формат которой
fseek( указатель_на_файл, смещение, начальная_точка)
Параметр начальная_точка может принимать значения в диапазоне 0, 1, 2. 0 – начало файла, 2 – конец файла, 1 – текущая позиция. Параметр смещение имеет тип long и показывает, на сколько необходимо переместить указатель в файле от начальной точки; может быть положительным и отрицательным. Функция fseek возвращает 0, если все хорошо, или не 0, если встречен конец файла или возникла ошибка.
После того, как с помощью fseek выбрано нужное место в файле, можно применять функции ввода-вывода.
Пример: long offset=0L;
while ( fseek(fp,offset++,0) == 0 ) putchar(getc(fp));
Здесь выводится 1-й символ файла, смещение offset наращивается на 1, выводится 2-й и т.д. до конца файла.
© 1998 Калачев Д.П., Лутай В.Н.
