русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Массивы и функции


Дата добавления: 2013-12-23; просмотров: 1212; Нарушение авторских прав


Ссылочные переменные

Как мы видели в примере 5.3, при передаче в функцию указателей в теле функции необходимо использовать явно операцию разадресации (* адрес объекта). Это усложняет синтаксис. Чтобы исключить этот недостаток в языке Си были введены ссылки. Ccылка – это другое имя переменной (объекта). Синтаксис объявления ссылочной переменной имеет следующий вид:

Тип &имя ссылки=имя объекта;

Например:

int x = 20;

float y;

int &n = x;

float &m =y;

После таких объявлений ссылочные переменные n и m будут определять местоположение в памяти переменных x и y, т.е., если ссылке присваивается значение, то и переменная получит тоже значение.

Из примеров видно, что при объявлении ссылочной переменной она обязательно должна быть проинициализирована, так как в противном случае неясно на какой объект будет производиться ссылка.. При обращении к ссылочным переменным нет необходимости в операции снятия ссылки, т. е. переменные n и m будут обрабатываться как “нормальные” переменные типов int и float.

Запишем теперь программу, изменяющую значения переменных с использованием ссылочных переменных:

Пример: 5.4

# include<stdio.h>

void obmen(int &, int &);

void main (void)

{

int x = 5, y = 20;

printf(“x = %d y = %d \n”, x, y);

obmen(x, y);

printf(“x = %d y= %d \n”, x, y);

void obmen(int &a, int &b);

{

int temp;

temp = a;

a = b;

b = temp;

}

Из примера 5.4 видно, что синтаксис при использовании ссылок более удобен.

 

5. 5. Рекурсивные вызовы функций

Любая функция может быть вызвана рекурсивно, т. е. она может вызвать саму себя. Классический пример рекурсии – это вычисление факториала числа n! =1*2*3…*n. Пример рекурсивной функции, вычисляющей значение факториала для n> 0:



fact (int n) // Название функции

{

int a;

if (n= = 1) return 1;

a = fact (n – 1)*n;

return a;

}

 

 

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

int func(int mas[] [N], int n, int m);

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

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

var = func(mas, n, m);

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

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

Пример:5.5 /* Программа работы с матрицей */

#include<stdio.h>

#include<conio.h>

#define N 5 // Задание размера матрицы в виде макроса

void input (int mas[] [N], int, int); /* функция ввода матрицы */

int making (int mas[] [N], int, int); /* функция определения максимального элемента */

void main (void)

{

int m, n ;

int a[N][N] ;

int max ;

clrscr() ;

printf (" Введите размер исходной матрицы \n ");

printf (" Число строк = ");

scanf("%d", &m);

printf (" Число столбцов = ");

scanf ("%d", &n);

input(a, m, n); // Выэов функции

max = making(a, m, n);

printf("Значение максимального элемента матрицы равно %d \n", max);

getch();

}

/* Функция осуществляет ввод матрицы

заданного размера */

void input (int a[] [N], int m, int n)

{

int i, j;

for (i = 0;i < m; i++)

for (j = 0; j <n; j++)

{

printf (" Введите A(%d,%d) элемент матрицы : '', i+1, j+1);

scanf ("%d", &a[i] [j]);

}

}

/* Функция вычисляет максимальный элемент матрицы заданного размера */

int making (int a[] [N], int m, int n)

{

int max = a[0] [0] ;

int i, j ;

for (i=0 ; i<m; i++)

for (j=0 ; j<n ; j++)

if (max <a[i] [j] )

max = a[i] [j] ;

return max ;

}

В случае использования одномерного массива заголовки функций будут иметь следующий вид:

void input (int mas[N] , int) ;

int making(int mas[N] , int) ;

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

 



<== предыдущая лекция | следующая лекция ==>
Передача параметров в функцию | Структура в языке Си


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.