- •ПРОГРАММИРОВАНИЕ НА ЯЗЫКАХ С И С++
- •СОДЕРЖАНИЕ
- •ВВЕДЕНИЕ
- •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. ОБРАБОТКА ИСКЛЮЧЕНИЙ
- •ЛИТЕРАТУРА
– 37 –
*OutFile; /* выходной файл */ char f_name[30]; /* имя файла */ int c;
/* открытия входного файла */ printf( "%s", sPI );
gets( f_name );
while( !(InpFile = fopen( f_name, "rt" ))){
printf( "%s%s", sEI, sPI ); gets( f_name );
}
/* открытия выходного файла */ printf( "%s", sPO );
gets( f_name );
while( !(OutFile = fopen( f_name, "wt" ))){
printf( "%s%s", sEO, sPO ); gets( f_name );
}
/* обработка */
while( (c = getc( InpFile )) != EOF )
if( !(c==' '||c=='\t') ) putc( c, OutFile );
/* закрытие файлов */ fclose( InpFile ); fclose( OutFile ); }/* main */
Варианты заданий
Варианты этой работы совпадают с вариантами первой лабораторной работы «Массивы и символьные строки» со следующей модификацией: входные данные должны вводиться из файла, а выходные выводиться в файл.
Файл предполагает большой объем данных, а не одну строку !
11. ВВЕДЕНИЕ В C++
Язык С++ создан на основе С для реализации объектно-ориентированного программирования (ООП) . Поэтому С++ содержит концептуальные понятия, отсутствующие в С: классы, наследование, механизм виртуальных функций. Существуют и другие отличия, несвязанные с ООП и направленные на модификацию имеющихся в С средств программирования; они могут быть использованы не только в ООП, но и в типичной для С процедурной технологии программирования. К таковым относятся следующие.
1. Модификация операторов ввода-вывода данных. В язык введены новые объекты: cout, cin и cerr, представляющие соответственно стандартный выходной поток, стандартный входной и поток для вывода на дисплей информации об ошибках. Ввод и вывод данных организуется с помощью этих объектов и операторов >> и <<. (Напомним, что последние используются в С для побитового сдвига информации). Описание средств ввода-вывода содержится в файле iostream.h. Пример:
#include <iostream.h> void main(){
double radius;
cout<<” Введите радиус”;
cin>>radius; // ввод значения переменной radius cout<<”Площадь круга =”<<3.14*radius*radius<<endl;
}
© 1998 Калачев Д.П., Лутай В.Н.
– 38 –
Несомненным достоинством этих операторов является автоматическое определение типов данных. Подробнее о вводе-выводе в С++ см. далее.
2. Введение ссылочного типа. Ссылка по смыслу тесно связана с указателями и вводит другое имя или псевдоним для объекта. В результате появляется возможность передавать аргументы в функцию не только по значению, но и по ссылке. Ссылку можно объявлять в программе. Пример:
int i, lp; int &r=i;
Последняя строка устанавливает для i новое имя r. Присваивание и использование r дают те же результаты, что и соответствующие операции над i.
r=3; //i получает значение 3 lp=&r; //lp получает адрес i
r++; // i увеличивается на 1, r не изменяется
Функция обмена чисел с применением ссылок имеет более компактный вид, чем та же функция с применением указателей (функцию с указателями смотри выше):
int a=1; b=2; swap(a,b);
void swap(int &k, int &l){ int buf;
buf=l;
l=k;
k=buf;
}
3. Введение подставляемых функций. Если функция имеет атрибут inline, то она называется встроенной или подставляемой. Код inline-функции вставляется в объектный код программы в местах ее вызова аналогично вставке макрорасширения в ассемблерах. С одной стороны, это приводит к ускорению работы программы, т. к. практически не расходуется время на вызов функции, с другой – в случае многократных вызовов функции расширяется объектный код программы. Функции в режиме inline целесообразно использовать, если они не сложны и не громоздки (в частности, не допускается наличие циклов).
4. Модификация операторов управления динамической памятью. В С++ динамической памятью управляют 2 оператора – new и delete. Обязательный аргумент у оператора new один – тип объекта, под который выделяется память. Оператор возвращает указатель, тип которого совпадает с типом заданного объекта. Пример:
double *pd; pd= new double;
При выделении памяти под переменную ее можно инициализировать: long *i = new long(123456L);
Оператор new позволяет также выделить память для массива: int ptr=new int[3][4][5];
Если оператор не может выделить память, то он возвращает NULL.
Оператор освобождения динамической памяти delete также имеет 1 аргумент – указатель, возвращаемый предшествующим оператором new. Тип возвращаемого значения –
void.
char *c = new char;
float *f = new float[150];
. . .
delete c;
delete [] f; // эта форма используется для массивов
© 1998 Калачев Д.П., Лутай В.Н.