Глобальные и локальные переменные. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Глобальные и локальные переменные.



Функции.

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

1.. Определение функции

2. Обращение к функции

3. Организация связи между функцией и программой её вызывающей.

Формат описания функции в С++.

Тип возвращаемого значения_ имя функции (список параметров)

  {
Тело функции Объявления и операторы
  }

При написании функции следуют тем же правилам, что и при написании main(): вначале указывается имя, затем открывающая фигурная скобка, приводится описание используемых переменных, операторы, определяющие работу функции и закрывающая фигурная скобка. Если надо для работы функции, то включаются директивы препроцессора. Имя функции должно начинаться с буквы или со знака подчёркивания и может состоять из букв, цифр и знака подчёркивания. За именем функции должна стоять пара круглых скобок. Это помогает компилятору отличить функции от переменных, скобки могут быть пустыми. Тело функции должно быть заключено в фигурные скобки. Перед именем функции ставится тип возвращаемого значения, если указано служебное слово void, то это указывает, что функция не возвращает никакого значения. Для неопределённого типа возвращаемого значения компилятор предполагает тип integer.

Список параметров – это список, разделённых запятыми объявлений тех параметров, которые получает функция при её вызове. Тип должен быть указан явно для каждого параметра в списке параметров. Если функция не получает никаких значений, то список параметров задаётся как void.

Ни при каких обстоятельствах функция не может быть описана внутри другой функции.

Существует три способа возврата управления в точку, из которой была вызвана функция. Если функция не должна возвращать результат, то управление возвращается в исходную точку при достижении правой фигурной скобки, завершающей функцию или при выполнении оператора return. Если функция должна возвращать результат, то используется оператор return(выражение);

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

Передача аргументов по адресу.

При передаче аргументов по адресу параметру в принимающей функции присваивается адрес указанной переменной. В С++ все массивы передаются по адресу.

Правило передачи по адресу.

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

Рассмотрим пример передачи массива и его изменение.

#include <iostream.h>

#include <string.h>

void change_it (char С[3]); //описание прототипа функции

void main()

{

char name[3]=”ABC”;

change_it(name); // вызов функции с передачей адреса массива

cout<<name<<endl;

}

void change_it(char С[3]) //описание функции

{

cout<<С<<endl;

strcpy(С,”USA”);

return 0;

}

В принимающую функцию change_it передаётся адрес массива name, в результате оба имени name и С ссылаются на одну и ту же область памяти. Элементы массива можно изменить в любой из двух функций, обе функции будут иметь доступ к уже изменённому массиву.

Задания.

Вариант 1.

1. Описать функцию stepen(x,n) от вещественного х и натурального n, вычисляющую величину xn и использовать ее для вычисления b=2.7k +(a+1)n

2. Из трёх матриц вещественных чисел А[3][3], B[2][2], C[2][2] сформировать вектор К из трёх чисел Х,У,Z, упорядоченных по возрастанию, где Х – минимальный элемент А, У – максимальный элемент В, Z – максимальный элемент С. Все повторяющиеся операции оформить в виде функций.

Вариант 2.

1. Даны отрезки a,b,c,d. для каждой тройки этих отрезков, из которых можно построить треугольник, напечатать площадь данного треугольника.

2. Даны три матрицы вещественных чисел. Вычислить след каждой из них с использованием функции. S=åaii

Вариант 3

1. Переменной присвоить значение 1, если уравнение x2 +6.2 x+a2=0 и x2+ax+b-1=0 имеют вещественные корни и при этом оба корня первого уравнения лежат между корнями второго и 0 во всех остальных случаях.

2. Даны 2 целые матрицы размером МхМ. С использованием функции определить являются ли они симметричными, т.е. Хij=Xji

Вариант 4

1. Вычислить выражение F(m.n)=n!*m!/(n+m)!, n и m – неотрицательные целые числа. (Определить функцию, вычисляющую факториал).

2. Описать функцию. Мах (А,n,k.), где А – матрица, n и k –индексы(n>k), вычисляющую наибольший элемент заштрихованной области.
k n

 
 


n

           
     
 
 


k

 

Вариант 5

1. По заданным вещественным числам c и d (c< d) вычислить
óarctg2 x dx+ósin E 10xdx
õ õ
Интегралы вычислить по формуле трапеций при n=20 для первого интеграла и n=100 для второго:
F(x)dx»h [f(a)/2+ Sf(a+ih) +f(b)/2]. Где h=(b-a)/n

2. Найти сумму двух матриц одинаковой размерности. Оформить в виде функции. Все матрицы распечатать.

Вариант 6

1. Написать функцию, которая для заданного натурального N вычисляет сумму его цифр.

2. Даны две квадратные вещественные матрицы 5 порядка. Транспонировать ту из них, в которой наименьший след (сумма диагональных элементов).

Вариант 7

1. Составить функцию возведения любого натурального числа в квадрат без операции умножения, пользуясь следующим свойством: квадрат любого числа равен сумме первых нечётных чисел. (12=1, 22=1+3, 32=1+3+5).

2. Описать функцию сум(А), вычисляющую величину
Х0*Xn-1+X1*Xn-2+…+Xn-1*X0 где Хi – максимальный элемент i строки матрицы.

Вариант 8

1. Составить функцию возведения любого натурального числа n в куб без операции умножения, пользуясь следующим свойством: куб любого числа n равен сумме n нечётных чисел, следующих по порядку за числами, сумма которых составила куб числа n-1. Например:(13=1, 23=3+5, 33=7+9+11).

2. Описать функцию swap(A,B), меняющую местами максимальные элементы матриц А и В.

Вариант 9

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

2. Три выборки заданы в векторах А(10),В(10),С(10). Составить программу статистической обработки этих выборок. В результате обработки определить математическое ожидание М=(åхi)/n и среднеквадратическое отклонение
s =Ö(å(хi - M)2)/n. Вычисление М и s оформить в виде функции.

Вариант 10

1. Описать функцию получения наибольшего общего делителя двух чисел.

2. Описать функцию, которая в том из трёх векторов x,y,z, где больше всего отрицательных элементов (считать, что такой вектор один), все его положительные элементы заменяет на их кубы – если это вектор х или вектор z и на их обратные величины – если это вектор у.

Вариант 11

1. Описать функцию, представляющую число в виде произведения простых чисел. Разложение на множители осуществляется следующим образом: сначала число делится на 2, а затем – подряд на все нечётные числа. Если на какое-либо число оно делится без остатка, то данное простое число является множителем.

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

Вариант 12

1. Описать функцию вычисления корня m-й степени из числа х по итерационной формуле: yn+1=yn+1/n((x/ynm-2)-yn) (y0=1). Итерация заканчивается, как только |yn+1-yn|<e.

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

Дополнительное задание:

1. Описать функцию sort(x), упорядочивающую по неубыванию числа массива х следующим методом: все числа из х упорядочить по последней цифре и перенести во вспомогательный массив у; затем числа из у упорядочить по последней цифре (при равенстве этих цифр сохранять упорядоченность по последней цифре) и записать их снова в массив х, далее из х упорядочить по третьей от конца цифре и перенести в массив у. (учесть, что в конце концов числа должны оказаться в х).

2. Даны целочисленные матрицы А,В,С. Определить есть ли среди них числа, являющиеся полными квадратами.

Функции.

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

1.. Определение функции

2. Обращение к функции

3. Организация связи между функцией и программой её вызывающей.

Формат описания функции в С++.

Тип возвращаемого значения_ имя функции (список параметров)

  {
Тело функции Объявления и операторы
  }

При написании функции следуют тем же правилам, что и при написании main(): вначале указывается имя, затем открывающая фигурная скобка, приводится описание используемых переменных, операторы, определяющие работу функции и закрывающая фигурная скобка. Если надо для работы функции, то включаются директивы препроцессора. Имя функции должно начинаться с буквы или со знака подчёркивания и может состоять из букв, цифр и знака подчёркивания. За именем функции должна стоять пара круглых скобок. Это помогает компилятору отличить функции от переменных, скобки могут быть пустыми. Тело функции должно быть заключено в фигурные скобки. Перед именем функции ставится тип возвращаемого значения, если указано служебное слово void, то это указывает, что функция не возвращает никакого значения. Для неопределённого типа возвращаемого значения компилятор предполагает тип integer.

Список параметров – это список, разделённых запятыми объявлений тех параметров, которые получает функция при её вызове. Тип должен быть указан явно для каждого параметра в списке параметров. Если функция не получает никаких значений, то список параметров задаётся как void.

Ни при каких обстоятельствах функция не может быть описана внутри другой функции.

Существует три способа возврата управления в точку, из которой была вызвана функция. Если функция не должна возвращать результат, то управление возвращается в исходную точку при достижении правой фигурной скобки, завершающей функцию или при выполнении оператора return. Если функция должна возвращать результат, то используется оператор return(выражение);

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

Глобальные и локальные переменные.

Существует два способа определения переменных:

1. определение переменной перед именем функции main(). Такая переменная называется глобальной и доступна от точки её определения до конца файла.

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

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



Поделиться:


Последнее изменение этой страницы: 2016-12-12; просмотров: 150; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.220.120 (0.025 с.)