Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы программирования. 5 Массивы.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
44.47 Кб
Скачать

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

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

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

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

Задан одномерный массив из 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;

}