Передача одномерного массива в функцию
Цель работы:приобрести практические навыки по обработке одномерных массивов с использованием функций.
Краткие теоретические сведения
Массив – это переменная, которая может содержать множество значений одного и того же типа. Как и все другие переменные, массивы могут использоваться как параметры функций.
тип_результата имя_функции(тип_данных *, int);
При вызове функции параметры необходимо передавать следующим образом:
- первый параметр – это имя массива;
- второй параметр – это размер массива.
Примерпрограммы, в которой используется функция, выводящаяэлементы массива на экран, и функция для поиска минимального элемента..
#include <stdio.h>
#include <conio.h>
void show_array (int v[], int b)
{
int i;
for (i=0; i<b; i++)
printf (“%d\n”, v[i]);
}
int Min (int v[], int b)
{
int i, m=v[0];
for (i=1; i<b; i++)
if (v[i]<m) m=v[i];
return m;
}
void main()
{ const n=10;
int i, min, a[n] ;
puts( “Введите массив “);
for (i=0; i<n; i++)
scanf (“%d”, &a[i]);
show_array(a, n); // Вызов 1-ой функции
min = Min (a, n); // Вызов 2-ой функции
printf (“min= %d\n”, min );
getch();
}
Порядок выполнения работы
1. Изучить теоретические сведения.
2. Выполнить задание.
Задания для выполнения
Выполнить задания из лабораторной работы № 13 часть 2, используя функции для обработки массивов.
ЛАБОРАТОРНАЯ РАБОТА № 25
ПЕРЕДАЧА МНОГОМЕРНОГО МАССИВА В ФУНКЦИЮ
Цель работы:приобрести практические навыки по обработке двумерных массивов с использованием функций
Краткие теоретические сведения
Если размеры известны на этапе компиляции, то
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 (* – операция разадресации).
Порядок выполнения работы
1. Изучить теоретические сведения.
2. Выполнить задание.
Задания для выполнения
Массив в памяти разместить динамически, ввод исходных данных и вывод полученных результатов выполнить в основной функции, а решение задачи оформить в виде отдельной функции пользователя. Не использовать глобальных переменных.
1. Найти сумму элементов, расположенных на главной диагонали.
2. Найти произведение элементов, расположенных на главной диагонали.
3. Найти максимальный элемент и поменять его с первым элементом.
4. Найти минимальный элемент и поменять его с первым элементом.
5. Найти максимальный элемент и поменять его с последним элементом.
6. Найти минимальный элемент и поменять его с последним элементом.
7. Найти количество отрицательных и положительных элементов массива.
8. Найти количество 0-й и 1-ц в массиве, а также сумму единиц.
9. Найти число элементов массива, больших T (вводится с клавиатуры) и просуммировать эти элементы.
10. Найти число элементов массива > T и их произведение.
11. Найти число элементов массива < T и их сумму.
12. Найти число элементов массива < T и перемножить эти элементы.
13. Найти число элементов массива = T и сложить эти элементы.
14. Найти число элементов массива = T и перемножить эти элементы.
15. Найти максимальный элемент среди лежащих ниже главной диагонали.
ЛАБОРАТОРНАЯ РАБОТА № 26