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


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 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 (* – операция разадресации).

Date: 2015-10-19; view: 300; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию