![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Массивы и функции
Использование указателей в качестве формальных параметров функции дает возможность передавать из вызывающей подпрограммы в функцию не само значение или массив значений, а адрес переменной (адреса фактических аргументов). В частности, при работе с массивами не требуется использовать в качестве формальных аргументов массив. Это может быть указатель того же типа, что и тип элемента массива. В подпрограмму в этом случае можно передавать адрес начального элемента массива. Пример программы Задан одномерный массив из 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 Рассмотрим передачу двумерного массива в функцию. В качестве параметров функции передается адрес начала массива и количество элементов в строке массива, соответствующее объявлению массива в вызывающей функции (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; }
|