Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Оператор return

Читайте также:
  1. АКТ ВОЗВРАТА ИМУЩЕСТВА / PROPERTY RETURN ACT
  2. ГЛАВА 11 • НОВЫЙ ПОВОРОТ В ДЕЛЕ ОПЕРАТОРОВ 151
  3. ГЛАВА 2. НАБЛЮДАЕМ ЗА ОПЕРАТОРАМИ__________________ ___________________ _______ 39
  4. ГЛАВА 2. НАБЛЮДАЕМ ЗА ОПЕРАТОРАМИ______________________________________________ 35
  5. ГЛАВА 2. НАБЛЮДАЕМ ЗА ОПЕРАТОРАМИ________________________________________________ 37
  6. ГЛАВА 3. НАЧИНАЕМ ПОНИМАТЬ ОПЕРАТОРОВ
  7. Дополнительное и вспомогательное операторское оборудование.

Оператор return завершает выполнение функции, в которой он задан, и возвращает управление в вызывающую функцию, в точку, непосредственно следующую за вызовом. Функция main передает управление операционной системе. Формат оператора:

return [выражение];

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

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

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

Пример:

int sum (int a, int b) { renurn (a+b); }

Функция sum имеет два формальных параметра a и b типа int, и возвращает значение типа int, о чем говорит описатель, стоящий перед именем функции. Возвращаемое оператором return значение равно сумме фактических параметров.

Пример:

void prov (int a, double b) { double c; if (a<3) return; else if (b>10) return; else { c=a+b; if ((2*c-b)==11) return; } }

В этом примере оператор return используется для выхода из функции в случае выполнения одного из проверяемых условий.

Массив

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

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

тип имя[предел №1][предел №2]...[предел №N];

Примеры:
int a[10];
double b[5];

Обращение к элементам массива в языке С осуществляется путем указания имени массива и, следом за ним, индексов элемента в парных квадратных скобках. Индексация в языке C начинается с нуля.

Поэтому, в массиве a обращение к первому элементу будет иметь вид: a[0], а к последнему – a[9].
На практике наиболее часто используются только:

одномерные массивы (векторы);
двумерные массивы (матрицы).


Объявление одномерного массива в си (далее просто массив) имеет следующий синтаксис:
тип имя[размер];

В качестве размера массива может указываться любое положительное целочисленное значение. В стандарте С89 значение могло являться только константой. В стандарте С99 было введено понятие динамического массива.
Динамический массив - массив, при создании которого в качестве размера указывается значение некоторого выражения, в которое входят переменные, объявленные и инициализированные ранее (выражение должно иметь положительный целочисленный результат).

Например:
int n;
printf("Введите размер массива: ”);
scanf("%d”,&n);
double x[n];


При объявлении статических массивов допускается производить инициализацию элементов массива. Синтаксис такого объявления:
тип имя[размер] = {значение №1,... значение №N};

Примеры:
int a[5] = {1,2,3,4,5}, b[5] = {1,2};
double x[10] = {0.0};
int c[] = {1,2,3,4,5};
char d[] = {’a’,’b’,’c’};
int e[5] = {1,2,,4,5};
//Неправильно - ошибка
Объявление константных массивов (значения их элементов изменить нельзя) начинается с ключевого слова const, за которым следует объявление массива с инициализацией.
Примеры:
const int array[] = {1,2,3,4,5};
const double vector[5] = {1.0,2.0,3.0};

Обращение к элементу массива осуществляется путем указания имени массива, а после имени в квадратных скобках индекса элемента:
имя[индекс]

Индексация в языке С начинается с нуля, поэтому для массива размером, например, десять элементов правильными будут индексы от нуля до девяти включительно.

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

int a[10];
for(int i=0;i<10;i++) scanf("%d”,&a[i]);
...
for(int i=0;i<10;i++) printf("%d\t”,a[i]);

Присвоение массива массиву также осуществляется поэлементно. Например, необходимо присвоить вещественный массив x вещественному массиву y. Фрагмент программы:

double x[15], y[15];
...
for(int i=0;i<15;i++) y[i] = x[i];
...

В языке С во время выполнения программы не производится контроль за допустимыми значениями индексов элементов. Поэтому, если индекс элемента выходит за рамки массива, то в программе возможно появление ошибок. Ошибки могут быть:
ростыми (например «случайное» изменение переменных);
критическими (выход за пределы пространства памяти, отведенной для программы).
Например:
int a[10];
for(int i=0;i<=10;i++) a[i] = i;

Функци

2.8. Функции

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

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

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

в виде некоторых модулей и в дальнейшем иметь возможность присоединять

эти модули к своей программе.

 

Объявление, определение и вызов функций

Определение функции имеет следующий вид:

тип_возвращаемого_значения имя(список_формальных_параметров)

{

последовательность_операторов;

}

Определение функции задает: 1) тип возвращаемого функцией значения;

2) имя функции; 3) список формальных параметров; 4) последовательность

операторов. Тело функции, заключенное в фигурные скобки, содержит объяв-

ления автоматических переменных и операторы, определяющие действия, вы-

полняемые функцией.

Прототип функции имеет следующий вид:

тип_возвращаемого_значения имя(список_формальных_параметров);

Вызов функции имеет следующий вид:

имя(список_фактических_параметров);

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

 

/* Прототип функции */

int volume(int a, int b, int c);

int main(void)

{

int x=5, y=6, v;

v=volume(x,y,8); /* Вызов функции */

return 0;

}

 

/* Определение функции */

int volume(int a, int b, int c)

{

return a*b*c;

}

 

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

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

метров оставляют пустым. Важно, что типы фактических параметров при вызове функции должны

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

имеющего следующий синтаксис: return выражение; Выражение должно соответствовать типу возвращаемого значения. Значение

указанного выражения возвращается в точку вызова функции в качестве результата.

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

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

Область действия переменных и время жизни Программа на языке Си обычно оперирует с множеством внешних объек-

тов: переменных и функций. Глобальные переменные объявляются вне функций и доступны для лю-

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

только текущим модулем. В этом случае переменная определяется как статическая с помощью модификатора static.

Локальные (автоматические) переменные определяются внутри функций. Эти переменные действительны только в ней, создаются в момент входа в функцию и уничтожаются при выходе из нее. Рассмотрим следующую таблицу:Переменные Область действия

(видимости)

Время жизни

Глобальные Программа Программа

Статические Модуль (отдельно откомпилированный файл)

Программа

Автоматические Функция Функция

 

Указатели

Указатели

Указатель – это переменная, содержащая адрес другой переменной.

Синтаксис определения указателя:

 

спецификатор_типа *имя переменной;

 

Символ «*» означает "указатель на". Спецификатор_типа задает тип пере-

менной, на которую указывает указатель.

 

Пример определения и инициализации указателя.

 

int c;

int *p; /* Определение указателя*/

p=&c; /* Инициализация указателя */

 

Результатом выполнения операции «&» является адрес объекта, так что в опе-

раторе

 

p=&c; 15

 

переменной p присваивается адрес ячейки с (говорят, что p указывает на c или

p ссылается на c). Операция «&» применяется только к объектам, расположен-

ным в памяти: к переменным и элементам массивов. Ее операндом не может

быть ни выражение, ни константа.

Символ «*» перед именем переменной имеет разное значение в опреде-

лении и в использовании. При определении он означает, что переменная явля-

ется указателем, а при использовании – это получение значения переменной, на

которую указывает указатель.

 

Пример с использованием указателя в операторах.

 

int x, y;

int *ip; /* ip – указатель на тип int */

ip=&x; /* Переменной ip присваивается адрес переменной x */

y=*ip; /* Значению y присваивается значение x */

*ip=0; /* Значению x присваивается значение 0 */

 

Допускаются следующие операции с указателями: присваивание значе-

ния указателя другому указателю того же типа, сложение и вычитание указате-

ля и целого, вычитание и сравнение двух указателей, ссылающихся на элемен-

ты одного и того же массива, а также присваивание указателю нуля и сравне-

ние указателя с нулем.

Нельзя складывать два указателя, перемножать их, делить, сдвигать, вы-

делять разряды; указатель нельзя складывать со значением типа float или

double; указателю одного типа нельзя присвоить указатель другого типа.


Дата добавления: 2015-12-08; просмотров: 63 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.017 сек.)