Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабник по C.pdf
Скачиваний:
74
Добавлен:
01.06.2015
Размер:
876.9 Кб
Скачать

– 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 Калачев Д.П., Лутай В.Н.