Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Voprosy_k_ekzamenu_po_informatike

.pdf
Скачиваний:
41
Добавлен:
09.06.2015
Размер:
2.24 Mб
Скачать

15. БАЗОВЫЕ ТИПЫ ДАННЫХ В С/С++, ПРЕОБРАЗОВАНИЕ ТИПОВ, СТАНДАРТНЫЕ ФУНКЦИИ.

Основные типы в С++ делятся на три категории: целочисленные, с плавающей запятой и void. Целочисленные типы позволяют обрабатывать целые числа. Типы с плавающей запятой позволяют задавать значения, которые могут иметь дробные части.

Целочисленные типы данных.

char (1 байт, от -128 до 127) - это целочисленный тип, обычно содержащий члены кодировки выполнения.

bool (1 байт, false или true) — это целочисленный тип, который может иметь одно из двух значений: true или false.

short (2 байт, от -32768 до 32767) — это целочисленный тип, размер которого больше или равен размеру типа char и меньше или равен размеру типа int.

int (4 байт, от -2*1e9 до 2*1e9) — это целочисленный тип, размер которого больше или равен размеру типа short int и меньше или равен размеру типа long.

long long (4 байт, от -9*1e18 до 9*1e18) (или long int) — это целочисленный тип, который больше или равен размеру типа int.

Числа с плавающей запятой.

float (4 байт, от -3.4*1e38 до 3.4*1e38) — это тип с плавающей запятой наименьшего размера.

double (8 байт, от -1.7*1e308 до 1.7*1e308) — это тип с плавающей запятой, размер которого больше или равен размеру типа float, но меньше или равен размеру типа long double.

Типом void описывается пустой набор значений. Задание переменных типа void невозможно. Этот тип служит в основном для объявления функций, не возвращающих значения, или универсальных указателей на нетипизированные или произвольно типизированные данные. Любое выражение можно явно преобразовать или привести к типу void.

Преобразование типов. В C++ различают явное и неявное преобразование типов данных. Неявное преобразование типов данных выполняет компилятор С++, а явное преобразование данных выполняет сам программист.

31

Если в выражении операнды принадлежат разному типу, то перед вычислением выполняется преобразование более коротких типов в более длинные для сохранения значимости и точности. Пример неявного преобразования типов:

1) int a = 5;

2) float b = 5.555;

3) double c = a * b;

Иерархия типов данных приведена в таблице:

С помощью операции приведения, можно указать компилятору преобразования значения одного типа в другой тип. Примеры явного преобразования типов:

1)(int) x;

2)int j = static_cast<int>(d);

Сложные типы данных. Некоторые виды информации, которые логически представляют собой единое целое, нельзя записать в одну переменную. Например, это могут быть координаты точек на плоскости или в пространстве, комплексные числа, характеристики автомобилей и тому подобное. Для хранения таких данных существуют специальные средства, называемые сложными (композитными) типами данных. Сложный тип данных представляет собой упорядоченный набор из нескольких переменных. Примерами таких типов данных являются: структуры, объединения, пользовательские типы.

Стандартные функции C++.

cos / sin / tan – возвращает косинус / синус / тангенс аргумента, измеряемого в радианах. Пример: cos(3.14);

log – возвращает натуральный логарифм аргумента. Пример: log(5.5); pow – возвращает значение аргумента, возведенного в указанную степень.

Пример: pow (7.0, 3.0);

sqrt – возвращает квадратный корень из аргумента. Пример: sqrt(4);

32

16. ОПЕРАЦИИ, ИСПОЛЬЗУЕМЫЕ В С/С++, ПЕРЕЧИСЛИМЫЙ ТИП В С/С++.

Операции. Операции можно классифицировать по количеству операндов на: унарные – воздействуют на один операнд, бинарные – воздействуют на два операнда, тернарная – воздействует на три операнда.

Унарные операции. Инкремент и декремент (++ --). Операция определение размера (sizeof). Операции отрицания (- !).

Бинарные операции. Арифметические операции (+ - * / %), операции отношения (< <= == !=…), логические операции (&& ||), операции присваивания (= *= +=).

Тернарная операция. Условная операция (? :)

Приоритеты операторов.

Приоритет

Оператор

Описание

Ассоциативность

 

 

 

 

 

1

::

 

Область видимости

Слева-направо

 

 

 

 

 

 

++

--

Суффиксальный/постфиксный инкремент и

 

 

декремент

 

 

 

 

 

 

()

 

Вызов функции

 

2

[]

 

Обращение к массиву по индексу

 

 

 

 

 

.

 

Выбор элемента по ссылке

 

 

−>

 

Выбор элемента по указателю

 

 

 

 

 

 

 

++

--

Префиксный инкремент и декремент

Справа-налево

 

+

Унарный плюс и минус

 

 

!

~

Логическое НЕ и побитовое НЕ

 

 

(type)

Приведение к типу type

 

3

*

 

Indirection (разыменование)

 

 

&

 

Адрес

 

 

sizeof

Размер

 

 

new, new[]

Динамическое выделение памяти

 

 

delete,delete[]

Динамическое освобождение памяти

 

 

 

 

 

 

4

.*

->*

Указатель на член

Слева-направо

 

 

 

 

 

5

*

/ %

Умножение, деление и остаток

 

 

 

 

 

 

6

+

Сложение и вычитание

 

 

 

 

 

 

7

<<

>>

Побитовый сдвиг влево и сдвиг вправо

 

 

 

 

 

 

8

<

<=

Знаки сравнения

 

 

 

 

 

>

>=

 

 

 

 

 

 

 

9

==

!=

Равенство и неравенство

 

 

 

 

 

 

10

&

 

Побитовое И

 

 

 

 

 

 

11

^

 

Побитовый XOR (исключающее или)

 

 

 

 

 

 

12

|

 

Побитовое ИЛИ (inclusive or)

 

 

 

 

 

 

13

&&

 

Логическое И

 

 

 

 

 

 

33

14

||

 

 

Логическое ИЛИ

 

 

 

 

 

 

 

 

?:

 

 

Тернарное условие

Справа-налево

 

=

 

 

Прямое присваивание (предоставляемое по

 

 

 

 

умолчанию для C++ классов)

 

15

 

 

 

 

+=

−=

 

Присвоение с суммированием и разностью

 

 

 

 

 

*=

/=

%=

Присвоение с умножением, делением и остатком

 

 

от деления

 

 

 

 

 

 

 

 

 

 

 

16

throw

 

Throw оператор (выброс исключений)

 

 

 

 

 

 

 

17

,

 

 

Запятая

Слева-направо

 

 

 

 

 

 

Перечисления. Перечисления используются в тех случаях, когда переменные создаваемого типа могут принимать заранее известное конечное множество значений. Пример:

enum days_of_week { Sun, Mon, Tue, Wed, Thu, Fri, Sat };

Объявление типа начинается со слова enum и содержит перечисление всех возможных значений переменных создаваемого типа – констант перечисляемого типа.

34

17. ВВОД/ВЫВОД ДАННЫХ В С.

Операции ввода/вывода в языке Си организованы посредством библиотечных функций. Самыми распространенными из них являются scanf и printf.

printf() – обеспечивает форматированный вывод. Пример: printf(“%d%c”, a, b); // вывод на экран переменной a типа int и переменной b типа char

Управляющая строка (заключенная в кавычки “”) содержит компоненты трех типов: обычные символы, которые просто копируются в стандартный выходной поток (выводятся на экран дисплея); спецификации преобразования, каждая из которых вызывает вывод на экран очередного аргумента из последующего списка; управляющие символьные константы. Далее следует последовательность переменных, значения которых будут выведены на экран.

Каждая спецификация преобразования начинается со знака % и

заканчивается некоторым символом, задающим преобразование. Ниже представлена таблица этих спецификаций:

scanf() – обеспечивает форматированный ввод. Пример:

scanf(“%d%c”, &a, &b); // присваивание значений переменным a и b Аргументы scanf() должны быть указателями на соответствующие

значения. Для этого перед именем переменной записывается символ &.

Операции ввода/вывода файлов. После того, как файл открыт, то для чтения или записи данных используют следующие функции:

35

char c = fgetc(fp);
fputc(s, fp);
fputc(c, fp);

fputc() – функция выводит символ в файл. Пример:

// вывод символа с в файл с указателем fp

fputs() – функция выводит строку в файл. Пример:

// вывод символа с в файл с указателем fp

fgetc() – функция считывает символ из файла. Пример:

// считает один символ из файла с указателем fp

fgets() – функция считывает строку из файла. Пример:

fgets(s, maxline, fp);

Читает строку в s, где s — массив символов или указатель типа char (предварительно должна быть выделена память для чтения с использованием указателя), maxline — максимальное число символов, которое требуется читать из файла с указателем fp. В случае ошибки или достижения конца файла возвра-

щает NULL.

fread() – функция считывает определенное количество байт из файла. Пример:

fread(buf, m, n, fp);

Эта функция читает из файла c указателем fp первые n элементов данных, каждый из которых имеет длину m байт. Чтение происходит в буфер, на который указывает указатель buf, например, char buf[50] или char *buf (но в последнем случае предварительно надо выделить память для буфера). Общее количество байт чтения составит (n * m). Функция возвращает количество прочитанных элементов, а по достижении конца файла или возникновении ошибки чтения возвращает NULL.

fwrite() – функция выводит определенное количество байт в файл. Пример:

fwrite(ptr, m, n, fp);

Функция добавляет n элементов в файл с указателем fp, каждый элемент длиной в m байт. Данные записываются из буфера, на который указывает указатель ptr. Общее количество записанных байтов равно (n * m). В случае ошибки записи функция возвращает ноль, в противном случае — количество записанных элементов.

fscanf() – функция считывает данные из файла и преобразует аргументы в определенный формат. Пример:

fscanf(fp, Control, arg1, arg2, ... , argn);

Функция читает данные из файла c указателем fp, преобразует их по форматам, записанным в управляющей строке Control, и отформатированные данные записывает в аргументы arg1, ... , argn.

36

fprintf() – функция выводит данные в файл и преобразует аргументы в определенный формат. Пример:

fprinf(fp, Control, arg1, arg2, ... , argn);

Выводит данные в файл c указателем fp, преобразует аргументы arg1, ... , argn к форматам, которые записаны в управляющей строке Control, и отформатированные данные записывает в файл.

37

18. ВВОД/ВЫВОД ДАННЫХ В С++.

В С++ существует два распространенных пути ввода-вывода информации: с помощью потоков, реализованных в STL и посредством традиционной системы ввода-вывода, унаследованной от С. Для использования потоков нужно подключить заголовочный файл <iostream>.

Вывод cout. Идентификатор cout является объектом С++, предназначенным для работы со стандартным потоком вывода. Поток – это некоторая абстракция, отражающая перемещение данных от источника к приемнику. Стандартный поток вывода направлен на экран, хотя допускается возможность его перенаправления на другие устройства вывода, такие как текстовые файлы. Пример:

cout << “Some text” << endl;

Операция << является операцией помещения в поток.

Ввод cin. Идентификатор cin является объектом, определенным в С++ для работы со стандартным потоком ввода. Этот поток содержит данные, вводимые с клавиатуры. Пример:

int a, b;

cin >> a >> b;

Операция >> является операцией извлечения.

Операции ввода/вывода файлов.

in >> x – операция считывания значения из потока in в переменную x. out << x операция вывода значения переменной х в поток out.

38

19. ПРОИЗВОДНЫЕ ТИПЫ ДАННЫХ, МАССИВЫ, РАБОТА С МАССИВАМИ.

Производные типы данных можно условно подразделить на две группы: непосредственно производные типы и составные производные типы.

Непосредственно производные типы являются производными от некоторых существующих типов, реализуя типы указателей, ссылки, функции преобразования типов. В группу непосредственно производных типов входят: массивы, указатели, ссылки, перечисления, указатели на члены класса.

В группу составных производных типов входят: классы, структуры, объединения.

Одномерный массив – это фиксированное количество элементов одного и того же типа, объединенных общим именем, где каждый элемент имеет свой номер.

Статические одномерные массивы. Память под статический массив выделяется на этапе объявления массива в стеке или сегменте данных. Пример объявления статического массива:

float a[10];

int b[] = {1, 2, 3};

Для обращения к элементу массива указывается имя массива, а затем в квадратных скобках индекс – a[2].

Динамические одномерные массивы. Динамические одномерные массивы отличаются от статических тем, что имя массива является указателемпеременной и память под элементы массива выделяется в куче с помощью new. Пример объявления динамического массива:

float *a = new float[10];

Обращение к элементу массива идентичное со статическим.

Двумерный массив представляет собой фиксированное количество элементов одного и того же типа, объединенных общим именем, где каждый элемент определяется номером строки и номером столбца на пересечении которых он находится.

Статические двумерные массивы. Память под статический двумерный массив выделяется на этапе объявления массива в стеке или сегменте данных. Пример объявления статического массива:

float a[10][3];

int b[] = {{1, 2, 3}, {4, 5, 6}};

39

Для обращения к элементу двумерного массива указывается имя массива, а затем в квадратных скобках номер строки и столбца – a[0][2].

Динамические двумерные массивы. Динамические двумерные массивы отличаются от статических тем, что имя массива является указателемпеременной и память под столбцы массива выделяется в куче с помощью new, после чего для каждого указателя выделяется память под строки тоже с помощью new. Пример объявления динамического массива:

int **a = new int *[10];

for (int i = 0; i < 10; i++) a[i] = new int[5];

Обращение к элементу двумерного массива идентичное со статическим.

40