Опубликован: 25.08.2010 | Доступ: свободный | Студентов: 6066 / 588 | Оценка: 3.91 / 3.44 | Длительность: 11:09:00
Лекция 2:

Простейшие программы

< Лекция 1 || Лекция 2: 123 || Лекция 3 >
Аннотация: В данной лекции описывается структура простейшей программы, переменные, операции, выражения, преобразования базовых типов, вводные замечания о средствах ввода-вывода, особенности вывода кириллицы в консольное окно
Ключевые слова: программа, препроцессор, ПО, функция, значение, вызов функции, переменная функции, definition, rule, именованная область, диапазон, операции, время выполнения, описание переменной, область действия, место, переменная, фигурные скобки, модуль, имя переменной, глобальные переменные, поиск, локальная переменная, область видимости, вложенный блок, внешняя переменная, инициализатор, выражение, базовый тип, тип переменной, преобразование типов, const, слово, память, определение, освобождение памяти, класс, static, оператор описания, статическая переменная, external, класс памяти, объявление переменной, объявление имени, спецификатор, тело функции, доступ, вывод, стандартная библиотека, директива, заголовочный файл, пространство имен, STD, конфликт, course, SUM, курсор, управляющая последовательность, строковый, литеры, обратный, представление, семантика, стандартный ввод, адрес переменной, FLOAT, спецификация преобразования, функции ввода/вывода, форматирование, локализация, код символа, DOS, среда разработки, вычисленное значение, операнд, очередь, операции отношения, унарные операции, инкремент, декремент, отрицание, тернарная операция, умножение, остаток, сложение, вычитание, логическое ИЛИ, приоритет операций, операция присваивания, CoS, целый тип, int, арифметическое выражение, ссылка, присваивание, передача данных, тип значений, аргумент операции, операторы, вычисление выражения, значение выражения, неявное преобразование, вещественное число, равенство, неравенство, логические операции, вычисление, char, short

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

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

Программа на языке С++ состоит из функций, описаний и директив препроцессора. О директивах мы говорили выше. Функция - это законченный фрагмент кода, к которому можно обратиться по имени (вызвать функцию). Функция может получать аргументы и возвращать в вызывающий код вычисленное в ней значение. Например, вызов функции, вычисляющей синус угла, может выглядеть примерно так же, как в математике: y = sin(x);.

Одна (и только одна) функция программы должна иметь имя main. Выполнение программы начинается с первого оператора этой функции. Ее вызывает на выполнение исполняющая система.

Описания представляют собой определения и объявления элементов программы: переменных, функций, классов, типов и т. д. Любой элемент программы должен быть определен только один раз. Это правило в стандарте называется правилом одного определения ( one definition rule, или odr ) . Объявление может встречаться в программе столько раз, сколько необходимо.

ПРИМЕЧАНИЕ

Такие требования естественны: ведь определения требуют от компилятора конкретных действий (например, выделения памяти), а объявления служат для информации.

Итак, программа, состоящая из одного модуля, имеет следующую структуру:

директивы препроцессора
описания
int main()
{
    операторы главной функции
}

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

Переменные

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

Перед использованием любая переменная должна быть определена. Пример описания целой переменной с именем a и вещественной переменной: x

int a; float x;

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

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

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

СОВЕТ

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

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

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

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

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

Начнем с инициализатора. С его помощью можно присвоить переменной начальное значение ( инициализировать переменную ) .Инициализатор можно записывать в двух формах - со знаком равенства:

= выражение

или в круглых скобках:

( выражение )

Выражение должно быть вычисляемым на момент выполнения оператора, например:

short int a = 1;    
short int b( a + 1 );

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

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

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

const char C = 'C', 
	X = '|';  // символьные константы С и X
int const y = 56;             // целая константа y
char s, sf = 'f';       // инициализация относится только к sf
char t (54);
float c = 0.22, x(3), sum;

Класс памяти задается явным образом или по контексту описания переменной. Если он не задан явно, и переменная описана внутри блока (в частности, внутри функции main ), она считается автоматической. Память под нее выделяется при входе в блок и при необходимости инициализируется каждый раз при выполнении оператора, содержащего ее определение. Освобождение памяти происходит при выходе из блока, в котором описана переменная. Иными словами, сколько раз выполняется блок, столько раз "рождается" и "умирает" локальная переменная. Время ее жизни - с момента входа в блок и до выхода из блока.

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

Ключевое слово extern хотя и относится в стандарте к спецификаторам класса памяти, на самом деле служит для объявления переменной. Переменная, описанная как extern, должна быть определена в другом месте программы (как правило, в другом модуле). Объявление переменной может задаваться в программе несколько раз, а определение должно быть единственным. В отличие от определения, объявление переменной не должно содержать инициализатора - это запрещено стандартом. Фактически это просто объявление имени в данной области видимости.

Спецификатор extern может задаваться и в определении переменной, но при этом переменная обязательно должна быть проинициализирована, например:

extern double PI = 3.1415926; // это определение переменной PI

В одномодульной программе использовать объявление переменной не имеет смысла, хотя это и не запрещено стандартом. Рассмотрим примеры описаний.

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

Здесь глобальная переменная a определена вне всех блоков, областью ее действия является вся программа. Переменная создается при запуске программы и уничтожается при окончании ее работы. Область видимости переменной - вся программа, кроме строк 6-10, так как в первой из них определяется локальная переменная с тем же именем, область действия которой начинается с точки ее описания и заканчивается при выходе из блока.

Переменные b и c - локальные, область их видимости (и действия) - блок, но время жизни различно: переменная b "рождается" при входе в блок и "умирает" при выходе из него, а переменная c, как и глобальная переменная a, создается при запуске программы и существует все время, пока работает программа.

Переменная х является глобальной и определена после тела функции main. Область действия - вся программа, однако выше точки определения переменная не видна. Чтобы иметь к ней доступ внутри тела функции, переменная объявлена как extern (строка 9).

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

< Лекция 1 || Лекция 2: 123 || Лекция 3 >
Dana Kanatkyzi
Dana Kanatkyzi
Здравствуйте.Помогите решить задачу минимум 4 чисел.Условие такое:"Напишите функцию int min (int a, int b, int c, int d) (C/C++)"находящую наименьшее из четырех данных чисел."Заранее спасибо!
Ринат Кудяков
Ринат Кудяков
Россия, г. Москва