Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вот еще 2.5.8.11.14.17.20.23.26.29.32..docx
Скачиваний:
2
Добавлен:
25.09.2019
Размер:
30.36 Кб
Скачать

2.Целые,вещественные типы данных.Операции над ними.Диапозоны значений.Совместимость указанных типов.

В С++ имеется набор встроенных типов данных для представления целых и вещественных чисел, символов, а также тип данных “символьный массив”, который служит для хранения символьных строк. Тип char служит для хранения отдельных символов и небольших целых чисел. Он занимает один машинный байт. Типы short, int и long предназначены для представления целых чисел. Эти типы различаются только диапазоном значений, которые могут принимать числа, а конкретные размеры перечисленных типов зависят от реализации. Обычно short занимает половину машинного слова, int – одно слово, long – одно или два слова. В 32-битных системах int и long, как правило, одного размера.

Типы float, double и long double предназначены для чисел с плавающей точкой и различаются точностью представления (количеством значащих разрядов) и диапазоном. Обычно float (одинарная точность) занимает одно машинное слово, double (двойная точность) – два, а long double (расширенная точность) – три.

char, short, int и long вместе составляют целые типы, которые, в свою очередь, могут быть знаковыми (signed) и беззнаковыми (unsigned). В знаковых типах самый левый бит служит для хранения знака (0 – плюс, 1 – минус), а оставшиеся биты содержат значение. В беззнаковых типах все биты используются для значения. 8-битовый тип signed char может представлять значения от -128 до 127, а unsigned char – от 0 до 255.

Когда в программе встречается некоторое число, например 1, то это число называется литералом, или литеральной константой. Константой, потому что мы не можем изменить его значение, и литералом, потому что его значение фигурирует в тексте программы. Литерал является неадресуемой величиной: хотя реально он, конечно, хранится в памяти машины, нет никакого способа узнать его адрес. Каждый литерал имеет определенный тип. Так, 0 имеет тип int, 3.14159 – тип double.

В целом типе над ограниченным множеством математически целых чисел выполняются операции +, -, *, /, div, mod, где div — операция деления нацело (ее результат — целая часть обычного частного), mod — операция взятия остатка от деления. Только результат операции / имеет вещественный тип, результаты прочих — целого типа. Возведение в целую степень выполняют через умножения.

Над данными вещественного типа допустимы операции + (сложение), – (вычитание), * (умножение), / (деление).

Порядок приоритета:

1. not;

2. *, / , Div, mod, and, shl, shr(сдвиг);

3. +,-,xor, or;

4. =, <>, <,>, <=,>=, in.

5.Ввод вывод данных.Стандартные потоки,файловые потоки.

istream — класс входных потоков;

ostream — класс выходных потоков;

iostream — класс двунаправленных потоков ввода-вывода;

Библиотека обслуживает стандартные потоки путем определения в заголовочном файле iostream.h четырех специальных объектов:

cin — объект класса istream, связанный со стандартным буферизованным входным потоком (обычно — клавиатура кон­соли);использует операцию(>>)

cout — объект класса ostream, связанный со стандартным буферизованным выходным потоком (обычно — дисплей кон­соли);(<<)

Включаемый файл:

#include<fstream>

Файловые потоки реализованы следующими классами:

// файловые потоки ввода

typedef basic_ifstream<char> ifstream;

typedef basic_ifstream<wchar_t> wifstream;

// файловые потоки вывода

typedef basic_ofstream<char> ofstream;

typedef basic_ofstream<wchar_t> wofstream;

// файловые потоки ввода/вывода

// наследники от предыдущих

typedef basic_fstream<char> fstream;

typedef basic_fstream<wchar_t> wfstream;

методы файловых потоков

close() - закрывает файл;

open(const char* s,ios_base::openmode n, long protection = 0666) - открывает файл;

bool is_open() - определяет открыт ли файл.

Конструктор файлового потока может заменить метод open. Значения режима открытия файла задаются вложенным типом open_mode:

typedef int openmode; // режим открытия потока

enum open_mode {

app = 0x01, // всегда писать в конец файла

binary = 0x02, // ввод/вывод в двоичном режиме

in = 0x04, // открыть для ввода

out = 0x08, // открыть для вывода

trunc = 0x10, // уничтожить данные после открытия существующего потока

ate = 0x20 // открыть позиционируя указатель на конец файла

};

текстовой и двоичный режим

В двоичном режиме при операциях ввода/вывода особые символы не заменяются (типа конца строки), что позволяет правильно обработать двоичные файлы (например, файлы *.bmp). При этом для чтения данных используется метод read, а для записи метод write.

По умолчанию потоки открываются в текстовом режиме и в зависимости от типа потока для ввода, вывода или ввода/вывода. Так в вызове ofstream fout("out.txt",ios_base::out|ios_base::app); ios_base::out| можно опустить.

пример

// чтение элемента с текущей позиции потока

template<class T>

inline void read_el(ifstream&fin, T el)

{fin.read((char*)&el,sizeof(el));}

// запись элемента в текущую позицию потока

template<class T>

inline void write_el(ofstream&fout, T el)

{fout.write((const char*)&el),sizeof(el));}

//===========================================

/****************************

Вводим имя файла, затем

выводим его размер.

Для завершения необходимо ввести

некорректное имя файла.

****************************/

#include <iostream>

#include <fstream>

using namespace std;

int main(){char buf[100];ifstream fin;

cout << "for close program input incorrect file name\\n";

while(1){

cout<<"input file name: ";cin>>buf;

fin.open(buf,ios_base::binary);

if(!fin.is_open()) {cout<<"file not exist";break;

} fin.seekg(0,ios_base::end);

cout<<"file size is "<<fin.tellg() <<" bytes"<<endl;

fin.close();

}return 0;}