- •2.Целые,вещественные типы данных.Операции над ними.Диапозоны значений.Совместимость указанных типов.
- •2. *, / , Div, mod, and, shl, shr(сдвиг);
- •5.Ввод вывод данных.Стандартные потоки,файловые потоки.
- •8.Примеры функций обработки одномерных массивов.Работа в динамической памяти.
- •11.Правила оформления функции в с.Правила локализации переменных.Область действия и область видимости переменных.Примеры с разным типом возвращаемого значения.
- •14.Работа со строками.Форматы представления строк.Функции для работы со строками и примеры.
- •17.Бинарные и типизированные фаилы.Общие черты и отличия.Представления данных в них.
- •20.Пользовательские типы данных.Структуры.Массивы структур/записей.
- •23.Перегрузка операций для структур:определение правил для операторов согласно разработанным пользовательским типам.
- •26.Рекурсивные алгоритмы.Проверка строки на симметричность.Вычисление суммы ряда.
- •29.Графические библиотеки.Основные функции и процедуры.
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;}