Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Передача одномерного массива в функцию




Цель работы: приобрести практические навыки по обработке одномерных массивов с использованием функций.

 

Краткие теоретические сведения

Массив – это переменная, которая может содержать множество значений одного и того же типа. Как и все другие переменные, массивы могут использоваться как параметры функций.

тип_результата имя_функции(тип_данных *, 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





Поделиться с друзьями:


Дата добавления: 2016-10-27; Мы поможем в написании ваших работ!; просмотров: 419 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Настоящая ответственность бывает только личной. © Фазиль Искандер
==> читать все изречения...

2374 - | 2099 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.