Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР6-С++-27 марта-2012.doc
Скачиваний:
17
Добавлен:
28.08.2019
Размер:
6.55 Mб
Скачать

1.11. Рекомендации по заданию исходных значений переменным

В языке С++ имеется возможность задавать исходные значения пере­менным несколькими способами:

с помощью операторов присваивания;

с помощью операторов ввода;

с помощью инициализации переменных;

с помощью именованных констант.

Первые три способа задания исходных значения пере­менным подробно рассмотрены в предыдущих лабораторных работах с 1-ой по 5-ю включительно. Поэтому в данном разделе на конкретных примерах напомним вид указанных операций.

1.11.1. Операторы присваивания

В качестве примера приведем несколько операторов присваивания:

a = 5;

b = 3;

х = y = z = 10;

pi = 3.14159265;

1=0;

к = n = т = 1;

sim = 'а';

eps = 1Е-6;

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

имя_типа имя_переменной;

Например,

int a, b, 1, к, n, t;

float pi, eps, х, y, z;

char sim;

1.11.2. Операторы ввода

Для консольного ввода данных в языке С++ используют формат записи:

cin >> переменная;

Следующая программа LR6-28.cpp в примере 6.28 запрашивает у вас два числа. Программа присваивает числа переменным first и second. Затем программа выводит числа, используя cout.

Пример 6.28.

/*Программа LR6-Primer28*/

#include <iostream.h>

#include<conio.h>

int main()

{

int first, second; // Числа, введенные с клавиатуры

cout << "Введите два числа и нажмите Enter: ";

cin >> first >> second;

cout << "Были введены числа " << first << " и " << second << endl;

getch();

return 0;

}

1.11.3. Инициализация переменных

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

имя_типа имя_переменной = начальное значение;

Пример 6.29.

int n = 1;

В результате выполнения этого оператора переменной n будет при­своено значение числа 1.

Пример 6.30

Оператор

float s = 0;

заменяет два оператора

float s;

s = 0;

Инициализация расширяет возможности программисту по заданию значений переменным. Она позволяет одновременно с объявлением переменной задать и ее началь­ное значение, вместо того, чтобы отдельно в программе писать оператор присваивания.

Пример 6.31

float pi = 3.1415, eps = 1Е-6;

unsigned Year = 2012;

int 1=0, к, n, t =1;

char sim = 'а';

1.11.4. Именованные константы

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

В C++, кроме переменных, можно использовать именованные константы, то есть константы, имеющие фиксированные названия (имена). Имена могут быть произвольными идентификаторами, не совпадающими с другими именами объектов. Принято использовать имена из больших букв и знаков подчеркивания, что визуально отличает имена переменных от имен констант. Способов определения именованных констант три.

Первый способ – это константы перечисляемого типа, имеющие синтаксис:

enum тип_перечисления {список_именованных_констант};

Здесь тип_перечисления – это его название, необязательный произвольный идентификатор; список_именованных_констант – это разделенная запятыми последовательность вида: имя_константы = значение_константы или просто значение константы.

Примеры:

enum BOOL {FALSE, TRUE };

enum DAY {SUNDAY, MONDAY, TUESDAY, WEDNESDAY,

THURSDAY, FRIDAY, SATURDAY};

enum {ONE = 1, TWO, THREE, FOUR, FIVE};

Если в списке нет элементов со знаком "=", то значения констант начинаются с 0 и увеличиваются на 1 слева направо, так, FALSE равно 0, TRUE равно 1. SUNDAY равно 0, и так далее, SATURDAY равно 6. Если в списке есть элементы со знаком "=", то каждый такой элемент получает соответствующее значение, а следующие за ним увеличиваются на 1 слева направо, так значение ONE = 1, TWO = 2, THREE = 3, FOUR = 4, FIVE = 5.

Второй способ – это именованные константы, заданные с ключевым словом const в объявлении вида:

const имя_типа имя_константы = значение_константы;

Модификатор const предназначен для объявления объектов как неизменяемых. Объекту, который объявлен с данным модификатором, можно присвоить только одно значение.

Пример

const double pi = 3.14159265;

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

Примеры:

const float Pi = 3.1415926;

const long M = 999999999;

const float Eps = 0.1e–6;

const unsigned God = 2012;

Попытка присвоить значение любой из констант Pi, M, Eps будет неудачной.

Обратите внимание, что здесь визуализация имен констант c использованием больших букв не является необходимой.

Если программист попытается изменить значение pi, то компьютер выдаст ошибку.

Третий способ ввести именованную константу дает препроцессорная директива #define. Директива #define используется для задания именованных констант и для задания строк подстановки. Синтаксис:

#define имя выражение

Механизм действия директивы – макроподстановки, то есть препроцессор сканирует весь текст программы, и выполняет замены в тексте программы, везде вместо "имя" подставляя "выражение".

Замечание: имена define – определенных констант записываются большими буквами, чтобы визуально отличить их от имен переменных и других объектов.

Примеры:

#define N 10 // По всему тексту вместо N число10,

#define PI 3.1416926 // Вместо PI его числовое значение,

#define STR "Строковая константа, подставляется в текст\n".

Директива #define может определить не только именованную константу, но и выполнить макроподстановки.

Примеры:

#define N1 N+1 // Вместо N1 текст 10 + 1,

#define int long // В тексте все описания int заменятся

// на long.

Удобно использовать эту директиву, чтобы, например, ввести в употребление логические константы:

#define TRUE 1

#define FALSE 0

Кроме того, если в замещаемом имени есть скобки, следующие за именем без пробела, то это макроопределение с параметрами, синтаксис которого:

#define имя (список_параметров) выражение

Например,

#define Cube(x) x*x*x

Имя здесь играет роль имени макроопределения, а параметров может быть несколько, тогда они отделяются запятыми. Между именем и списком параметров не должно быть пробела. Такое макроопределение может использоваться как функция, хотя макроподстановки не заменяют функции, и иногда могут привести к ошибкам.

Пример:

#define Cube(x) x*x*x // макроопределение возведения в степень

#include <stdio.h>

int main()

{

int а = 2;

printf("%d %d ", a, Cube(a));

getch();

return 0;

}

Студенты обычно испытывают определенные затруднения при выборе способа задания исходных значений переменным. Приведем некоторые ре­комендации по выбору способа задания исходных значений переменным.

Во-первых, всегда следует помнить, что задание значений переменным с помощью операторов ввода обладает более широкими возможностями (яв­ляется более универсальным).

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

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

В-четвертых, если значение переменной является постоянным (не меня­ется при переходе от одного варианта расчета к другому) то этим переменным начальные значения следует задать с помощью именованных констант.