Студопедия

Главная страница Случайная страница

Разделы сайта

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






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






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

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

Пример программы

Задан одномерный массив из N элементов. Найти значение максимального элемента массива.

Поиск максимума оформить в виде функции max:

# include < stdio.h>

# define N 3

int max(int k, int* b) //b – указательна целое,

//k – количество элементов в массиве

{

int i, m1;

m1=*b; //*b – значение 1-го эл-та массива (с индексом 0)

for(i=1; i< k; i++)

{

b++; //Переход к следующему элементу массива

if (m1< *b)m1=*b; //*b – значение текущего эл-та массива

}

return(m1);

}

int main()

{

static int A[N]={1, 7, 3};

printf(" \n max=%d", max(N, & A[0]));

return 0;

}

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

int main()

{

static int B[3][4]={3, 5, 1, 6, 8, 3, 7, 3, 2, 6, 9, 3};

printf(" \n 1 row: max=%d", max(4, B[0]));

printf(" \n 2 row: max=%d", max(4, B[1]));

printf(" \n 3 row: max=%d", max(4, B[2]));

return 0;

}

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

Результат работы программы:

1 row: max=6
2 row: max=8
3 row: max=9.

Рассмотрим передачу двумерного массива в функцию. В качестве параметров функции передается адрес начала массива и количество элементов в строке массива, соответствующее объявлению массива в вызывающей функции (int A2[][N]), а также два целых числа m и n, имеющие смысл фактического количества строк и столбцов, используемых в массиве. Они не должны превышать значения количества строк и столбцов соответственно, заданные при объявлении массива.

В примере используются следующие функции: ввод двумерного массива input_mas(), вывод на экран двумерного массива в виде таблицы output_mas(), вычисление суммы элементов массива, имеющих одинаковые номера столбцов и строк int diagonal():

#include < stdio.h>

#define N 4

#define M 3

void input_mas(int A2[][N], int m, int n);

void output_mas(int A2[][N], int m, int n);

int diagonal(int A2[][N], int m, int n);

void main()

{

int mas[M][N];

input_mas(mas, M, N);

output_mas(mas, M, N);

printf(" Summa elementov diagonali = %d\n", diagonal(mas, M, N));

return 0;

}

void input_mas(int A2[][N], int m, int n)

{

int i, j;

printf(" Wwedite chisla-> ");

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

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

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

}

void output_mas(int A2[][N], int m, int n)

{

int i, j;

printf(" Wwedeno: \n");

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

{

for(j=0; j< N; j++) printf(" %7d", A2[i][j]);

printf(" \n");

}

}

int diagonal(int A2[][N], int m, int n)

{

int i, j, summa=0;

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

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

if (i==j) summa+=A2[i][j];

return summa;

}






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.