Все программы, представленные в уроках 1—3, были очень простыми. Однако по мере того, как ваши программы начинают выполнять более многоплановые задачи, они должны хранить информацию во время выполнения. Например, программе, печатающей файл, нужно знать имя файла и, возможно, число копий, которые вы хотите напечатать. В процессе выполнения программы хранят такую информацию в памяти компьютера. Чтобы использовать определенные ячейки памяти, программы применяют переменные. Проще говоря, переменная представляет собой имя ячейки памяти, которая может хранить конкретное значение. В этом уроке описано, как создавать и использовать переменные в программах на C++. К концу данного урока вы освоите следующие основные концепции:

  • Вы должны объявлять переменные, которые будете использовать в программе, сообщая компилятору имя и тип переменной.
  • Тип переменной определяет тип значения (например, целое число или число с плавающей точкой), которое может хранить переменная, а также операции, которые ваши программы могут выполнять над переменной.
  • Чтобы присвоить значения переменной, используйте оператор присваивания C++ (знак равно).
  • Для вывода значения переменной на экран программы используют выходной поток cout.
  • При объявлении переменных используйте имена, выражающие смысл переменных, чтобы ваши программы было легче читать и понимать.
  • Используйте комментарии, описывающие работу программы. В этом случае, если другим программистам нужно изменить вашу программу, комментарии подробно опишут работу программы.

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

ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ В ПРОГРАММАХ

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

Тип переменной указывает тип значения, хранимого в переменной, а также набор операций (таких как сложение, умножение и другие), которые программа может выполнять над значением переменной. Большинство программ на C++ будут использовать типы переменных, перечисленные в табл. 4.1.

Таблица 4.1. Типы переменных C++.

Тип

Хранимые значения

char

Значения в диапазоне от -128 до 127. Обычно используется для хранения букв алфавита

int

Значения в диапазоне от -32768 до 32767
unsigned Значения в диапазоне от 0 до 65535
long Значения в диапазоне от -2147483648 до 2147483647
float Значения в диапазоне от -3.4 x 10-38 до 3.4 x 1038
double Значения в диапазоне от 1.7х 10-308 до 1.7х 10308

Прежде чем вы сможете использовать переменную, ваша программа должна ее объявить. Другими словами, вам следует представить переменную компилятору C++. Чтобы объявить переменную в программе, вам следует указать тип переменной и ее имя, по которому программа будет обращаться к данной переменной. Указывайте тип и имя переменной после открывающей фигурной скобки главной программы, как показано ниже:

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

Как правило, тип переменной будет одним из типов, перечисленных в табл. 4.1. Выбираемое вами имя переменной должно нести смысловую нагрузку, которая описывает (для всех, кто читает вашу программу) использование переменной. Например, ваша программа могла бы использовать переменные, такие как employee_name, employee_age и т. д. Обратите внимание на точку с запятой, которая следует за именем переменной. В C++ объявление переменной считается оператором. Поэтому вы должны поставить после объявления точку с запятой.

Фрагмент следующей программы объявляет три переменные, используя типы int, float и long:

#include <iostream.h>

void main(void)

{
   int test_score;
   float salary;
   long distance_to_mars;
}

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

float salary, income_tax, retirement_fund;

Изучение переменных

Переменная представляет собой имя ячейки в памяти компьютера. Во время выполнения ваши программы хранят информацию в переменных. При создании программ вы должны объявлять переменные, сообщая компилятору C++ имя и тип переменной. Например, следующий оператор объявляет переменную с именем age типа int:

int age;

Смысловые имена переменных

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

int х, у, z;

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

int student_age, test_score, grade;

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

float MonthlySalary, IncomeTax;

Слова, которые нельзя использовать для имен переменных

При создании имен переменных необходимо знать, что в C++ слова, перечисленные в табл. 4.2, резервируются в качестве ключевых слов, имеющих специальное значение для компилятора. Вы не имеете права использовать ключевые слова C++ в качестве имен переменных.

Таблица 4.2. Ключевые слова C++.

asm

auto

break

case

catch

char

class

const

default

delete

do

double

else

enum

extern

float

friend

goto

if

inline

int

long

new

operator

protected

public

register

return

short

signed

sizeof

static

switch

template

this

throw

try

typedef

union

unsigned

void

volatile

while

continue

for

private

struct

virtual

Почему ваши программы используют переменные

По мере усложнения ваши программы могут выполнять самые разнообразные операции. Например, программа платежей обрабатывает информацию о каждом служащем. В такой программе вы могли бы использовать переменные с именами employee_name, employee_id, employee_salary и т. д. После запуска программа занесет информацию о первом служащем в эти переменные. После расчета оклада первого служащего программа повторит весь процесс для следующего служащего. Чтобы рассчитать оклад второго служащего, программа занесет информацию о втором служащем (его или ее имя, номер и оклад) в перечисленные выше переменные, а затем выполнит свою обработку. Другими словами, в процессе выполнения программа присваивает переменной разные значения, которые, в свою очередь, изменяют или варьируют значение переменной.

ПРИСВАИВАНИЕ ЗНАЧЕНИЯ ПЕРЕМЕННОЙ

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

age = 32;
salary = 25000.75;
distance_to_the_moon = 238857;

Замечание: Значения, присваиваемые переменным, не должны содержать запятые (например, 25,000.75 и 238,857) *. Если вы включаете запятые, компилятор C++ будет генерировать и выводить сообщения о синтаксических ошибках.

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

*Американская запись чисел предполагает отделение каждых трех разрядов целой части числа запятой. - Прим. ред.

 

#include <iostream.h>

void main(void)

{
   int age;
   float salary;
   long distance_to_the_moon;

   age = 32;
   salary = 25000.75;
   distance_to_the_moon = 238857;
}

Присваивание значения при объявлении

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

int age = 32;
float salary = 25000.75;
long distance_to_the_moon = 238857;

Многие программы, представленные в этой книге, присваивают значения переменным при объявлении.

Присваивание значений переменным

При выполнении программы переменные хранят информацию. Для записи значения в переменную программы должны использовать оператор присваивания C++ (знак равно). Следующая строка использует оператор присваивания для записи значения 4 в переменную lesson:

lesson = 4;

Для упрощения этого процесса в C++ можно также присвоить значение переменной при ее объявлении:

int lesson = 4;

ИСПОЛЬЗОВАНИЕ ЗНАЧЕНИЯ ПЕРЕМЕННОЙ

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

#include <iostream.h>

void main (void)

{
   int age = 32,
   float salary = 25000.75;
   long distance_to_the_moon = 238857;
   cout << "Служащему " << age << " года (лет)" << endl;
   cout << "Оклад служащего составляет $" << salary << endl;
   cout << "От земли до луны " << distance_to_the_moon << " миль" << endl;
}

Замечание: Последний оператор cout не помещается на одной строке. В этом случае программа просто переносит слова на следующую строку. Вы можете сделать такой перенос, поскольку C++ использует точку с запятой для указания конца оператора. Если вам необходимо перенести строку, постарайтесь не делать этого в середине символьной строки (внутри двойных кавычек), используйте дополнительный отступ для перенесенной части строки, как показано выше.

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

С:> SHOWVARS <ENTER>

Служащему 32 года (лет)

Оклад служащего составляет $25000.75

От земли до луны 238857 миль

Как видите, для использования значения переменной вы просто обращаетесь к имени переменной в вашей программе.

ПРЕВЫШЕНИЕ ДИАПАЗОНА ЗНАЧЕНИЙ ПЕРЕМЕННОЙ

Как вы уже знаете, тип переменной определяет набор значений, которые переменная может хранить. Например, переменная типа int может хранить значения в диапазоне от -32768 до 32767. Если вы присваиваете переменной значение, которое находится вне этого диапазона, возникает ошибка переполнения. Например, следующая программа OVERFLOW.CPP иллюстрирует, как превышение диапазона значений переменной приводит к ошибке. Как видите, программа присваивает значения, которые находятся вне диапазона для переменной каждого типа:

#include <iostream.h>

void main(void)

{
   int positive = 40000;
   long big_positive = 4000000000;
   char little_positive = 210;
   cout << "сейчас positive содержит " << positive << endl;
   cout << "сейчас big_positive содержит " << big_positive << endl;
   cout << "сейчас little_poaitive содержит " << little_positive << endl;
}

Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод:

сейчас positive содержит -25536

сейчас big_positive содержит -294967296

сейчас little_positive содержит Т

Как видите, программа присваивает переменным типа int, long и char значения, которые находятся вне диапазона хранения каждого типа, поэтому возникает ошибка переполнения. При работе с переменными вам необходимо помнить диапазон значений, которые может хранить переменная каждого типа. Ошибки переполнения плохо уловимы, и поэтому их трудно определить и исправить. Обратите внимание на значение, которое программа выводит для переменной little_positive. Поскольку это переменная типа char, выходной поток cout пытается вывести ее значение в символьном виде. В этом случае выведенное значение соответствует второй половине таблицы ASCII со значением 210.

ПРЕДСТАВЛЕНИЕ О ТОЧНОСТИ

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

Следующая программа PRECISE. CPP присваивает значение чуть меньше 0.5 переменным типа float и double. К сожалению, поскольку компьютер обладает ограниченной способностью в представлении чисел, переменные реально содержат не присваиваемые им значения, а число 0.5:

#include <iostream.h>

void main(void)

{
   float f_not_half = 0.49999990;
   double d_not_half = 0.49999990;
   cout << "Значение типа float 0.49999990 равно " << f_not_half << endl;
   cout << "Значение типа double 0.49999990 равно "<< d_not_half << endl;
}

Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод:

Значение типа float 0.49999990 равно 0.5

Значение типа double 0.49999990 равно 0.5

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

ИСПОЛЬЗОВАНИЕ КОММЕНТАРИЕВ ДЛЯ УЛУЧШЕНИЯ ЧТЕНИЯ ВАШИХ ПРОГРАММ

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

  • Использование понятных по смыслу имен переменных, описывающих их применение.
  • Использование подходящих отступов и выравнивания (см. урок 7).
  • Использование пустых строк для разделения несвязанных операторов.
  • Использование комментариев, которые объясняют работу программы.

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

// Это комментарий

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

// Программа: BUDGET.CPP
// Программист: Kris Jamsa
// дата создания: 1-10-96
//
// Цель: Ежемесячная информация о бюджете.

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

distance_to_the_moon = 238857; // Расстояние в милях

Комментарий справа от оператора присваивания обеспечивает дополнительную информацию всем, кто читает программу. У начинающих программистов часто возникают проблемы, связанные с тем, что и когда комментировать. Как правило, вы включаете немного комментариев в ваши программы. Поэтому убедитесь, что они полезны. Следующие комментарии не дают дополнительной информации программистам, читающим код:

аде =32; // Присвоить 32 переменной age
salary = 25000.75; // Присвоить 25000.75 переменной salary

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

Добавление комментариев в ваши программы

При создании программ включайте комментарии, которые объясняют работу программы. Если другим программистам понадобится изменить вашу программу, они смогут воспользоваться комментариями, чтобы понять поведение программы. Обычно в программах на C++ комментарий начинается с двойного слеша:

// Это комментарий C++

Когда компилятор C++ встречает двойной слеш, он игнорирует весь текст (оставшийся в текущей строке), который следует за слешем. Хорошие программы должны быть легки для чтения и понимания. Комментарии улучшают удобочитаемость вашей программы.

Замечание: В дополнение к использованию комментариев для улучшения удобочитаемости своей программы вам следует использовать пустые строки для разделения несвязанных операторов. Когда компилятор C++ встречает пустую строку, он просто пропускает ее.

ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ

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

    1. Для использования переменной в вашей программе вы должны объявить ее тип и имя.
    2. Имена переменных должны быть уникальны и понятны по смыслу другим программистам, читающим ваш исходный текст. Имя переменной должно соответствовать ее назначению.
    3. Имена переменных должны начинаться с буквы или символа подчеркивания.
    4. В C++ буквы верхнего и нижнего регистров считаются разными.
    5. Тип переменной определяет тип значения, которое переменная может содержать. Общими типами переменных являются char, int, float и long.
    6. Комментарии повышают удобочитаемость вашей программы, поясняя ее работу. В программах на C++ комментарии начинаются с двойного слеша (//).