Здравствуйте.Помогите решить задачу минимум 4 чисел.Условие такое:"Напишите функцию int min (int a, int b, int c, int d) (C/C++)"находящую наименьшее из четырех данных чисел."Заранее спасибо! |
Простейшие программы
Структура программы
Презентацию к лекции Вы можете скачать здесь.
Программа на языке С++ состоит из функций, описаний и директив препроцессора. О директивах мы говорили выше. Функция - это законченный фрагмент кода, к которому можно обратиться по имени (вызвать функцию). Функция может получать аргументы и возвращать в вызывающий код вычисленное в ней значение. Например, вызов функции, вычисляющей синус угла, может выглядеть примерно так же, как в математике: 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).
Если при определении переменных их начальные значения явным образом не заданы, глобальные и статические переменные инициализируются по умолчанию нулевым значением соответствующего типа. Автоматические (локальные) переменные не инициализируются.