Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy_k_ekzamenu_otv.doc
Скачиваний:
8
Добавлен:
24.09.2019
Размер:
399.87 Кб
Скачать

  1. Структура программы на языке C++.

  1. Константы в языке C++.

  1. Переменные в языке C++.

  1. Массивы в языке C++.

  1. Арифметические операции в языке C++. Приоритеты операций.

  1. Арифметические выражения в языке C++. Использование скобок.

  1. Математические функции в языке C++.

  1. Условный оператор в языке C++.

  1. Составной оператор в языке C++.

  1. Оператор цикла со счетчиком в языке C++.

  1. Операторы цикла с предусловием и постусловием.

  1. Функции пользователя в языке C++.

  1. Работа с файлами в C++. Описание, открытие и закрытие файлов.

  1. Работа с файлами в C++. Форматный ввод/вывод.

  1. Табулирование функций.

  1. Решение нелинейного уравнения. Методы хорд и касательных.

  1. Решение нелинейного уравнения. Метод половинного деления (бисекции).

  1. Интегрирование функций. Метод прямоугольников.

  1. Интегрирование функций. Метод трапеций.

  1. Суммирование бесконечных сходящихся рядов.

1

Структура программы на языке C++

// struct_program.cpp: определяет точку входа для консольного приложения.

#include "stdafx.h"

//здесь подключаем все необходимые препроцессорные директивы

void main() { // начало главной функции с именем main

//здесь будет находится ваш программный код

}

В строке 1 говорится о точке входа для консольного приложения, это значит, что данную программу можно запустить через командную строку Windows указав имя программы, к примеру, такое struct_program.cppСтрока 1 является однострочным комментарием, так как начинается с символов "//", подробнее о комментариях будет рассказано в следующей статье. Встроке 2 подключен заголовочный файл "stdafx.h". Данный файл похож на контейнер, так как в нем подключены основные препроцессорные директивы(те, что подключил компилятор, при создании консольного приложения), тут же могут быть подключены и вспомогательные(подключенные программистом).

include - директива препроцессора, т. е. сообщение препроцессору. Строки, начинающиеся с символа "#" обрабатываются препроцессором до компиляции программы.

Препроцессорные директивы также можно подключать и в строках, начиная после записи #include "stdafx.h" до начала главной функции. Причём такой способ подключения библиотек является основным, а использование "stdafx.h" - это дополнительная возможность подключения заголовочных файлов. С 4-й по 6-ю строки объявлена функция main. Строка 4 – это заголовок функции, который состоит из типа возвращаемых данных (в данном случае void), этой функцией, и имени функции, а также круглых скобочках, в которых объявляются параметры функции.

void - тип данных не имеющий значения, т.е он не может хранить никакой информации.

Между фигурными скобочками  размещается  основной программный код, называемый еще телом функции. Это самая простая структура программы. Данная структура написана в Microsoft Visual Studio 2010(MVS2010). Все выше сказанное остается справедливым и для других компиляторов,  кроме строки 2. Контейнера "stdafx.h" нигде кроме MVS нет.

Программа на языке С++ состоит из директив препроцессора, указаний компилятору, объявлений переменных и/или констант, объявлений и определений функций.

2

Константы в языке C++.

Константа — число или  символьное значение, которое не может быть изменено в течении программы. 

Существует в языке C++ два типа констант: литеральные и символьные.

Литеральные константы

Литеральная константа – это значение, непосредственно вводимое в самой программе.

1

int coder = 14;

Переменная coder типа int, а число 14 является литеральной константой.

Символьные константы

Такие константы представлены именем, как и все переменные, однако в отличие от переменной, значение инициализированной константы изменить невозможно. Символьные константы, как узнаётся на практике, весьма необходимы. Вот доказательство:

1

summa=moloko*17;

Программа узнаёт общую сумму денег 17 пакетов молока. moloko является константой, цена молока останется неизменной, а вот количество всегда будет меняться.

Директива #define

1

#define moloko 30;

Как вы уже заметили, данная константа не имеет никакого конкретного типа (int, char ,float). Так как за счёт директивы #define происходит текстовая подстановка. Компилятор при виде нашей константы moloko, заменяет значением 30.

Ключевое слово CONST.

При работе с большим кодом программы, будет довольно сложно заниматься поисками нужной нам константы. Так же сложно изучение чужого кода, и не всегда будет понятно, за что данная константа отвечает. Хотя ранее изученная директива #define справляется с этой работой, но на смену ей появился более удобный способ:

1

const unsigned short int moloko=30;

Данный пример имеет символьную константу с именем moloko, так же мы заметили новые для нас слова const unsigned short int. Этот на первый взгляд странный набор слов создаёт огромнейшие преимущества, делая вашу программу более быстрой и более конкретизированной. Такой способ имеет такие преимущества за счёт того, что для компилятора указан тип и при запуске программы может проследить за этой константой в нужных для пользователя случаях.

Чтобы объявить объект константой, в объявление нужно добавить ключевое слово const. Так как константе нельзя присваивать значения, она должна быть инициализирована.

const int a = 100;

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

const int c;

// a является константой

// Все b[i] являются константами

// Ошибка – нет инициализатора!

Типичным является использование констант в качестве размера массивов и меток в инструкции case.

3

Переменные в языке C++.

Объявление переменной задает имя и атрибуты переменной. Атрибутами переменной могут быть тип, количество элементов (для массивов),спецификация класса памяти, а также инициализаторИнициализатор – это константа соответствующего типа, задающая значение, которое присваивается переменной при создании.

Объявление переменной имеет следующий синтаксис: 

[<спецификация класса памяти>] <тип> <имя> [= <инициализатор>]

[,<имя> [= <инициализатор>] ...];

Примеры объявления переменных

int x;

// Объявление переменной целого типа без инициализатора

double y = exp(1);

// Переменная вещественного типа инициализируется числом e.

// exp(x) – функция, вычисляющая ex.

int a, b = 0;

// Объявление двух переменных целого типа. Переменная b

инициализируется значением 0.

Тип переменной определяет диапазон допустимых значений, принимаемых величинами этого типа; набор операций, допустимых над данной величиной и объем памяти, отводимой под эту переменную.

Идентификатор

Размер, бит

Диапазон (множество) значений

Примечание

unsigned char

8

0..255

Небольшие целые числа и коды символов

char

8

-128..127

Очень малые целые числа и ASCII-коды

enum

16

-32768..32767

Упорядоченные наборы целых значений

unsigned int

16

0..65535

Большие целые и счетчики циклов

short int

16

-32768..32767

Небольшие целые, управление циклами

int

16

-32768..32767

Небольшие целые, управление циклами

unsingned long

32

0..4294967295

Астрономические расстояния

long

32

-2147483648..2147483647

Большие числа, популяции

float

32

3.4E-38..3.4E+38

Научные расчеты (7 значащих цифр)

double

64

1.7E-308..1.7E+308

Научные расчеты (15 значащих цифр)

long double

80

3.4E-4932..1.1E+4932

Финансовые расчеты (19 значащих цифр)

4

Массивы в языке C++.

Массив — упорядоченный набор данных, для хранения данных одного типа, идентифицируемых с помощью одного или нескольких индексов. В простейшем случае массив имеет постоянную длину и хранит единицы данных одного и того же типа.

Количество используемых индексов массива может быть различным. Массивы с одним индексом называют одномерными, с двумя — двумерными и т. д. Одномерный массив нестрого соответствует вектору в математике, двумерный — матрице. Чаще всего применяются массивы с одним или двумя индексами, реже — с тремя, ещё большее количество индексов встречается крайне редко.

Пример статического массива на С/С++

int Array[10]; // Одномерный массив целых чисел размера 10

// Нумерация элементов от 0 до 9

double Array[12][15]; // Двумерный массив вещественных чисел двойной точности

// размера 12 на 15.

// Нумерация по столбцам от 0 то 11, по строкам от 0 до 14

Достоинства

  • лёгкость вычисления адреса элемента по его индексу (поскольку элементы массива располагаются один за другим)

  • одинаковое время доступа ко всем элементам

  • малый размер элементов: они состоят только из информационного поля

Недостатки

  • для статического массива — отсутствие динамики, невозможность удаления или добавления элемента без сдвига других

  • для динамического и/или гетерогенного массива — более низкое (по сравнению с обычным статическим) быстродействие и дополнительные накладные расходы на поддержку динамических свойств и/или гетерогенности.

  • при работе с массивом в стиле C (с указателями) и при отсутствии дополнительных средств контроля — угроза выхода за границы массива и повреждения данных

В языке программирования С определены только одномерные массивы, но поскольку элементом массива может быть массив, можно определить и многомерные массивы. Они формализуются списком константных-выражений следующих за идентификатором массива, причем каждое константное-выражение заключается в свои квадратные скобки.

Каждое константное-выражение в квадратных скобках определяет число элементов по данному измерению массива, так что объявление двухмерного массива содержит два константных-выражения, трехмерного - три и т.д. Отметим, что в языке программирования С первый элемент массива имеет индекс равный 0.

Примеры:

int a[2][3]; /* представлено в виде матрицы a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] */ double b[10]; /* вектор из 10 элементов имеющих тип double */ int w[3][3] = { { 2, 3, 4 }, { 3, 4, 8 }, { 1, 0, 9 } };

В последнем примере объявлен массив w[3][3]. Списки, выделенные в фигурные скобки, соответствуют строкам массива, в случае отсутствия скобок инициализация будет выполнена неправильно.

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

Примеры:

int s[2][3];

Если при обращении к некоторой функции написать s[0], то будет передаваться нулевая строка массива s.

int b[2][3][4];

При обращении к массиву b можно написать, например, b[1][2] и будет передаваться вектор из четырех элементов, а обращение b[1] даст двухмерный массив размером 3 на 4. Нельзя написать b[2][4], подразумевая, что передаваться будет вектор, потому что это не соответствует ограничению наложенному на использование сечений массива.

Пример объявления символьного массива.

char str[] = "объявление символьного массива";

Следует учитывать, что в языке программирования Смвольном литерале находится на один элемент больше, так как последний из элементов является управляющей последовательностью '\0'.

5

Арифметические операции в языке C++. Приоритеты операций

Приоритет

Операция

Описание

17

::

контекст

16

->

операция непрямого доступа к членам класса

16

.

операция точки (доступ к полю)

16

[]

индекс массива

16

()

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

15

++ --

инкремент и декремент

15

~

поразрядное НЕ

15

!

логическое НЕ

15

-

унарный минус

15

*

операция разыменования

15

new delete

выделение памяти из кучи

14

.*

доступ к указателю-члену

13

* / %

умножение, деление и взятие остатка

12

+ -

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

11

>> <<

поразрядный сдвиг вправо и влево

10

> >= <= <

условные операции

9

== !=

операции проверки на равенство

8

&

поразрядное И

7

^

поразрядное исключающее ИЛИ

6

|

поразрядное ИЛИ

5

&&

логическое И

4

||

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

3

?:

условная операция

2

= *= /= %= += -=

операции присваивания

2

<<= >>=

поразрядные операции сдвига с присваиванием

2

&= |= ^=

поразрядные логическоие операции с присваиванием

1

,

запятая

Приоритет операций

Итак, каждая операция в языке C++ обладает приоритетом. Приоритет определяет, в какой последовательности будут выполняться операции в выражении.

Не забываем, что оператор в C++ - это строка кода заканчивающаяся точкой с запятой. Не путайте операторы, операции и операнды.

Возьмём например следующий оператор:

y = x + 5;

Здесь выполняются две операции: операция сложения и операция присваивания. Так вот операция суммы обладает более высоким приоритетом, чем операция присваивания. Поэтому сначала вычисляется сумма x и пяти, а затем получившийся результат присваивается переменной y.

Опера́нд (англ. operand) в языках программирования ― аргумент операции; данные, которые обрабатываются командой; грамматическая конструкция, обозначающая выражение, задающее значение аргумента операции; иногда операндом называют место, позицию в тексте, где должен стоять аргумент операции. Отсюда понятие местности, или арности, операции, то есть числа аргументов операции.

В зависимости от положения операндов относительно знака операции различают префиксные (напр.,   (x — операнд)), инфиксные (например,   (a, b — операнды)) и постфиксные (например,   (x — операнд)) записи операции. 

Операция присваивания

Левым операндом должна быть переменная. Нельзя записать:

5 = x;

Операнду находящемуся в левой части присваивается значение операнда стоящего в правой части операции:

x = 5;

cout << x; // на экран будет выведено: 5

Теперь в переменной x хранится значение 5. И его можно использовать.

Арифметические операции с присваиванием

Данные операции позволяют сократить код:

int x = 5;

x += 5; // две последние строки эквивалентны

x = x + 5;

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

Арифметические операции

Приоритет этих операции такой же как и в математике. Операции умножения, деления выполняются раньше чем операции суммы, вычитания.

Для операции умножения в C++ используется знак *.

Кроме того сюда же относится операция взятия остатка %. Данная операция делит первый операнд на второй и берёт остаток от деления:

int x = 3;

int y = 10;

int z;

z = x % y; // z = 3

Мы делим три на десять. Результат - 0,3. Отбрасываем ноль и берём остаток. Результат - 3.

Данная операция хоть и не так распространена как например другие арифметические операции, но тем не менее используется довольно часто. И иногда бывает просто незаменима.

6

Арифметические выражения в языке C++. Использование скобок.

приоритеты арифметических действий, аргументы, степени

7

Математические функции в языке C++.

Математические функции из библиотеки math.h

Математическая запись

Запись на C++

Назначение

cos x

cos(x)

Косинус x радиан

sin x

sin(x)

Синус x радиан

tg x

tan(x)

Тангенс x радиан

chx

cosh(x)

Гиперболический косинус x радиан

shx

sinh(x)

Гиперболический синус x радиан

th x

tanh(x)

Гиперболический тангенс x радиан

arccosx

acos(x)

Арккосинус числа x

arcsinx

asin(x)

Арксинус числа x

arctg x

atan(x)

Арктангенс числа x

ex

exp(x)

Значение e в степени x

xy

pow(x,y)

Число x в степени y

|x|

fabs(x)

Модуль числа x

sqrt(x)

Квадратный корень из x

ln x

log(x)

Натуральный логарифм x

log10x

log10(x)

Десятичный логарифм x

8

Условный оператор в языке C++

Есть два вида условных операторов

if ( выражение ) оператор

if ( выражение ) оператор else оператор

В обоих случаях вычисляется выражение, и если оно не ноль, то выполняется первый подоператор. Во втором случае второй подоператор выполняется, если выражение есть 0. Как обычно, неоднозначность "else" разрешается посредством того, что else связывается с последним встречным if, не имеющим else.

Формат оператора:

if (выражение) оператор-1; [else оператор-2;]

Выполнение оператора if начинается с вычисления выражения.

Далее выполнение осуществляется по следующей схеме:

- если выражение истинно (т.е. отлично от 0), то выполняется оператор-1.

- если выражение ложно (т.е. равно 0),то выполняется оператор-2.

- если выражение ложно и отсутствует оператор-2 (в квадратные скобки заключена необязательная конструкция), то выполняется следующий за if оператор.

После выполнения оператора if значение передается на следующий оператор программы, если последовательность выполнения операторов программы не будет принудительно нарушена использованием операторов перехода.

9

Составной оператор в языке C++

Составной оператор представляет собой несколько операторов и объявлений, заключенных в фигурные скобки:

{ [oбъявление] : оператор; [оператор]; : }

Заметим, что в конце составного оператора точка с запятой не ставится.

Выполнение составного оператора заключается в последовательном выполнении составляющих его операторов.

Пример:

int main () { int q,b; double t,d; : if (...) { int e,g; double f,q; : } : return (0); }

Переменные e,g,f,q будут уничтожены после выполнения составного оператора. Отметим, что переменная q является локальной в составном операторе, т.е. она никоим образом не связана с переменной q объявленной в начале функции main с типом int. Отметим также, что выражение стоящее после return может быть заключено в круглые скобки, хотя наличие последних необязательно.

Составной оператор (называемый также "блок", что эквивалентно) дает возможность использовать несколько операторов в том месте, где предполагается использование одного:

составной_оператор:

{ список_описаний opt список_операторов opt }

список_описаний:

описание

описание список_описаний

список_операторов:

оператор

оператор список_операторов

Если какой-либо из идентификаторов в списке_описаний был ранее описан, то внешнее описание выталкивается на время выполнения блока, и снова входит в силу по его окончании. Каждая инициализация auto или register переменных производится всякий раз при входе в голову блока. В блок делать передачу; в этом случае инициализации не выполняются. Инициализации переменных, имеющих класс памяти static (#4.2) осуществляются только один раз в начале выполнения программы.

10

Оператор цикла со счетчиком в языке C++

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]