Как описываются переменные в программе

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

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

Переменные

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

Пример описания целой переменной с именем а и вещественной переменной х:

Общий вид оператора описания переменных:

Python для начинающих. Как работают переменные в Python. #2

[класс памяти] [const] тип имя [инициализатор];

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

  • Необязательный класс памяти может принимать одно из значений auto, extern, static и register. О них рассказывается чуть ниже.
  • Модификатор const показывает, что значение переменной изменять нельзя. Такую переменную называют именованной константой, или просто константой.
  • При описании можно присвоить переменной начальное значение, это называется инициализацией. Инициализатор можно записывать в двух формах — со знаком равенства: = значение или в круглых скобках: ( значение )

Константа должна быть инициализирована при объявлении. В одном операторе можно описать несколько переменных одного типа, разделяя их запятыми.

Примеры:
short int а = 1; // целая переменная а
const char С = ‘С’ ; // символьная константа С
char s, sf = ‘f’ ; // инициализация относится только к sf
char t (54);
float с = 0.22, x(3), sum;

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

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

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

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

Урок 4 Переменные в Python. Оператор присваивания

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

Время жизни может быть постоянным (в течение выполнения программы) и временным (в течение выполнения блока).

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

Классы памяти переменных

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

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

extern — означает, что переменная определяется в другом месте программы (в другом файле или дальше по тексту). Используется для создания переменных, доступных во всех модулях программы, в которых они объявлены (Если переменная в том же операторе инициализируется, спецификатор extern игнорируется).

static — статическая переменная. Время жизни — постоянное. Инициализируется один раз при первом выполнении оператора, содержащего определение переменной. В зависимости от расположения оператора описания статические переменные могут быть глобальными и локальными. Глобальные статические переменные видны только в том модуле, в котором они описаны.

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

Читайте также:
Как узнать что нагружает компьютер программы

int а; //1 глобальная переменная а
int main(){
int b; // 2 локальная переменная b
extern int x; //3 переменная x определена в другом месте
static int с; // 4 локальная статическая переменная с
а = 1; //5 присваивание глобальной переменной
int а; // 6 локальная переменная а
а = 2; //7 присваивание локальной переменной
::а = 3; //8 присваивание .глобальной переменной
return 0;
}
int x = 4; // 9 определение и инициализация х

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

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

Имя переменной должно быть уникальным в своей области действия (например, в одном блоке не может быть двух переменных с одинаковыми именами).

Переменные и выражения в C++

СоветНе жалейте времени на придумывание подходящих имен. Имя должно отражать смысл хранимой величины, быть легко распознаваемым и, желательно, не содержать символов, которые можно перепутать друг с другом, например, 1, l (строчная L) или I (прописная i). Для разделения частей имени можно использовать знак подчеркивания. Не давайте переменным имена, демонстрирующие знание иностранного слэнга — ведь «как вы лодку назовете, так она и поплывет». Как правило, переменным с большой областью видимости даются более длинные имена (желательно с префиксом типа), а для переменных, вся жизнь которых проходит на протяжении нескольких строк исходного текста, хватит и одной буквы с комментарием при объявлении.

Описание переменной может выполняться в форме объявления или определения. Объявление информирует компилятор о типе переменной и классе памяти, а определение содержит, кроме этого, указание компилятору выделить память в соответствии с типом переменной. В C++ большинство объявлений являются одновременно и определениями. В приведенном выше примере только описание 3 является объявлением, но не определением.

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

Выражения в C++

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

(а + 0.12)/6
х у || !z
(t * sin(x)-1.05e4)/((2 * к + 2) * (2 * к + 3))

Операции выполняются в соответствии с приоритетами. Для изменения порядка выполнения операций используются круглые скобки. Если в одном выражении записагю несколько операций одинакового приоритета, унарные операции, условная операция и операции присваивания выполняются справа палево, остальные — слева направо. Например, а = b = с означает [ccie_cpp]а = (Ь = с), а а + b + с означает (а + Ь) + с. Порядок вычисления подвыражений внутри выражений не определен: например, нельзя считать, что в выражении (sin(x + 2) + cos(y + 1)) обращение к синусу будет выполнено раньше, чем к косинусу, и что х + 2 будет вычислено раньше, чем y+1.

Результат вычисления выражения характеризуется значением и типом. Например, если а и b — переменные целого типа и описаны так:

то выражение а + b имеет значение 7 и тип 1nt, а выражение а = b имеет значение, равное помещенному в переменную а (в данному случае 5) и тип, совпадающий с типом этой переменной. Таким образом, в C++ допустимы выражения вида а = b = с: сначала вычисляется выражение b = с, а затем его результат становится правым операндом для операции присваивания переменной а.

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

Преобразования бывают двух типов:

  • изменяющие внутреннее представление величин (с потерей точности или без потери точности);
  • изменяющие только интерпретацию внутреннего представления.

К первому типу относится, например, преобразование целого числа в вещественное (без потери точности) и наоборот (возможно, с потерей точности), ко второму — преобразование знакового целого в беззнаковое.

В любом случае величины типов char, signed char, unsigned char, short int и unsigned short int преобразуются в тип int, если он может представить все значения, или в unsigned int в противном случае.

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

Читайте также:
Как рисовать тату программа на Андроид

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

По материалам книги Павловской Т.А «C++ программирование на языке высокого уровня».

Источник: itandlife.ru

Переменные, константы в С++ и операции с ними: 2-я часть гайда по языку программирования

Разбираемся, как работать с данными в программе на C++. Будет много теории и примеров, чтобы вы углубились в язык ещё больше.

Евгений Кучерявый

Евгений Кучерявый

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

Это вторая часть из серии «Глубокое погружение в C++». В прошлый раз мы разобрались, что такое программа и из чего она состоит, а сейчас узнаем азы работы с данными.

Что такое данные и как они хранятся в программах

Все программы работают с данными. Данные — это любые значения, которые используются в работе программы: строки, числа, ссылки и символы. Например: имя, возраст, количество денег на счету, здоровье персонажа в игре и так далее. Даже отсутствие данных — это данные.

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

Давайте рассмотрим это на примере коробок:

Переменные, операции, выражения

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

Презентацию к данной лекции Вы можете скачать здесь.

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

Пример описания целой переменной с именем a и вещественной переменной x :

int a; float x;

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

int a, b = 1; float x = 0.1, y = 0.1f;

  • переменная a типа int , начальное значение которой не присваивается;
  • переменная b типа int , ее начальное значение равно 1;
  • переменные х и y типа float , которым присвоены одинаковые начальные значения 0.1. Разница между ними состоит в том, что для инициализации переменной х сначала формируется константа типа double , а затем она преобразуется к типу float ; переменной y значение 0.1 присваивается без промежуточного преобразования.

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

int b = 1, a = 100; int x = b * a + 25;

Программа на C# состоит из классов, внутри которых описывают методы и данные. Структуру программы иллюстрирует рис. 3.1. Переменные, описанные непосредственно внутри класса, называются полями класса. Им автоматически присваивается так называемое » значение по умолчанию» — как правило, это 0 соответствующего типа.

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

Структура программы


Рис. 3.1. Структура программы

Так называемая область действия переменной, то есть область программы, где можно использовать переменную, начинается в точке ее описания и длится до конца блока, внутри которого она описана. Блок — это код, заключенный в фигурные скобки . Основное назначение блока — группировка операторов. В C# любая переменная описана внутри какого-либо блока: класса, метода или блока внутри метода. Имя переменной должно быть уникальным в области ее действия. Область действия распространяется на вложенные в метод блоки.

class X // начало описания класса X < int A; // поле A класса X int B; // поле B класса X void Y() // —————————————— метод Y класса Х < int C; // локальная переменная C, область действия – метод Y int A; // локальная переменная A (НЕ конфликтует с полем А) < // ============ вложенный блок 1 ============ int D; // локальная переменная D, область действия – этот блок // int А; недопустимо! Ошибка компиляции, конфликт с локальной // переменной А С = B; // присваивание переменной С поля В класса Х (**) С = this.A; // присваивание переменной С поля А класса Х (***) >// ============ конец блока 1 =============== < // ============ вложенный блок 2 ============ int D; // локальная переменная D, область действия – этот блок >// ============ конец блока 2 =============== > // ————————- конец описания метода Y класса X > // конец описания класса X

В листинге 3.1 приведен пример программы, в которой описываются и выводятся на экран локальные переменные.

using System; namespace ConsoleApplication1 < class Class1 < static void Main() < int i = 3; double y = 4.12; decimal d = 600m; string s = «Вася»; Console.Write( «i = » ); Console.WriteLine( i ); Console.Write( «y = » ); Console.WriteLine( y ); Console.Write( «d = » ); Console.WriteLine( d ); Console.Write( «s objectName»>Листинг 3.1. Описание переменных

Читайте также:
Программа для записи разговоров на Андроид отзывы

Внимание

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

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

Можно запретить изменять значение переменной, задав при ее описании ключевое слово const, например:

<

div xmlns_edi=»http://www.intuit.ru/2010/edi» >

const int b = 1; const float x = 0.1, y = 0.1f; // const распространяется на обе переменные

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

const int b = 1, a = 100; const int x = b * a + 25;

Операции и выражения

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

Например, a + 2 — это выражение , в котором + является знаком операции , а a и 2 — операндами. Пробелы внутри знака операции , состоящей из нескольких символов, не допускаются. Операции C# приведены в таблице 3.1.

Таблица 3.1. Операции C# Категория Знак операции Название
Первичные x() Вызов метода или делегата
x[] Доступ к элементу
x++ Постфиксный инкремент
x— Постфиксный декремент
new Выделение памяти
typeof Получение типа
checked Проверяемый код
unchecked Непроверяемый код
Унарные + Унарный плюс
Унарный минус (арифметическое отрицание)
! Логическое отрицание
tilde<> Поразрядное отрицание
++x Префиксный инкремент
—x Префиксный декремент
(тип)x Преобразование типа
Мультипликативные (типа умножения) * Умножение
/ Деление
% Остаток от деления
Аддитивные (типа сложения) + Сложение
Вычитание
Сдвига Сдвиг влево
>> Сдвиг вправо
Отношения и проверки типа Меньше
> Больше
Меньше или равно
>= Больше или равно
is Проверка принадлежности типу
as Приведение типа
Проверки на равенство == Равно
!= Не равно
Поразрядные логические Сдвиг влево с присваиванием
>>= Сдвиг вправо с присваиванием

Тогда выражение a + b имеет значение 7 и тип int , а выражение a = b имеет значение , равное помещенному в переменную b (в данном случае — 5) и тип, совпадающий с типом этой переменной.

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

Например, a + b + c означает (a + b) + c , а a = b = c означает a = (b = c) .

Преобразования встроенных арифметических типов-значений

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

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

Если неявного преобразования из одного типа в другой не существует, программист может задать явное преобразование типа с помощью операции (тип)x . Его результат остается на совести программиста.

Арифметические операции не определены для более коротких, чем int , типов. Это означает, что если в выражении участвуют только величины типов sbyte , byte , short и ushort , перед выполнением операции они будут преобразованы в int . Таким образом, результат любой арифметической операции имеет тип не менее int .

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

Неявные арифметические преобразования типов


Рис. 3.2. Неявные арифметические преобразования типов

Введение в исключения

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

Если в процессе вычислений возникла ошибка, система сигнализирует об этом с помощью специального действия, называемого выбрасыванием (генерированием) исключения. Каждому типу ошибки соответствует свое исключение . Поскольку C# — язык объектно-ориентированный, исключения являются классами, которые имеют общего предка — класс Exception , определенный в пространстве имен System .

Например, при делении на ноль будет сгенерировано исключение DivideByZeroException , при недостатке памяти — исключение OutOfMemoryException .

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

Источник: intuit.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru