Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Краткие теоретические сведения. Если размеры известны на этапе компиляции, тоЕсли размеры известны на этапе компиляции, то void f1(int m[3][4]) { int i, j; for (i = 0; i<3; i++) for (j = 0; j<4; j++) ... // Обработка массива } Двухмерный массив, как и одномерный, также передается как указатель, а указанные размеры используются просто для удобства записи. При этом первый размер массива не используется при поиске положения элемента массива в ОП, поэтому передать массив можно так: void main(void) { int mas [3][3]={{1,2,3}, {4,5,6}}; … fun (mas); … } void fun(int m[ ][3]) { … } Если же размеры двухмерного массива, например, вводятся с клавиатуры (неизвестны на этапе компиляции), то их значения следует передавать через дополнительные параметры, например: … void fun(int**, int, int); void main() { int **mas, n, m; ... fun (mas, n, m); … } void fun(int **m, int n, int m) { ... // Обработка массива }
Пример. В целочисленном двухмерном массиве (матрице) размером N ´ М найти сумму четных элементов и их количество. Ввод исходных данных и вывод результатов выполнить в основной функции. Решение поставленной задачи оформить в функции пользователя. Текст программы может иметь следующий вид: #include <stdio.h> #include <conio.h> // Описание прототипа функции int Fun_Sum_Kol(int, int, int**, int*); void main() { const n=3, m=4; int **a, i, j, sum, kol; for(i=0; i<n; i++) for(j=0; j<m; j++) { printf ("\n a[%d][%d]=”, i+1, j+1); scanf(“%d”,&a[i][j]); } puts(" Matrix A:"); for(i=0; i<n; i++) { for(j=0; j<m; j++) printf("%d\t", a[i][j]); printf(“\n”); } // Обращение к функции с указанием фактических аргументов sum = Fun_Sum_Kol(n, m, a, &kol); printf("\n Kol-vo = %d \t Summa = %d\n", kol, sum); getch(); } /* Реализация (определение) описанной выше функции, в заголовке которой указаны формальные параметры, идентификаторы которых обрабатываются в ее коде */ int Fun_Sum_Kol(int a, int b, int **x, int *k) { int i, j, s = 0; *k = 0; for(i=0; i<a;i++) for(j=0; j<b;j++) if(x[i][j] % 2 ==0){ (*k)++; // Скобки обязательны s += x[i][j]; } return s; }
Обратите внимание на то, что из функции мы должны получить два скалярных результата – посчитанные сумму и количество четных чисел. С помощью оператора return мы возвращаем первое значение (сумму), а второе значение мы передаем в точку вызова с помощью указателя (адреса): при обращении к функции в качестве четвертого параметра передаем адрес & kol, а в функции используем «значение, находящееся по указанному адресу» * k (* – операция разадресации).
|