Сделай Сам Свою Работу на 5

ПЕРЕДАЧА ОДНОМЕРНОГО МАССИВА В ФУНКЦИЮ

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

 

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

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

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

УКАЗАТЕЛЬ КАК ПАРАМЕТР ФУНКЦИИ

Цель работы:закрепить практические навыки работы с указателями.

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

Рассматривая ранее правила использования функций, мы обращали внимание, что в языке Си возможна только односторонняя передача значений фактических параметров из вызывающей программы к формальным параметрам вызываемой функции. Возвращаемое значение несет сама функция, используемая в качестве операнда в выражении. Отсюда, казалось бы, следует неукоснительное правило: в процессе выполнения функции не могут изменяться значения переменных в вызывающей программе. Однако это правило можно обойти, если в качестве параметров функции использовать указатели.

В примере функция swap() производит обмен значениями двух переменных величин, заданных своими указателями в аргументах.

void swap(int *a, int *b)

{ int c;

c=*a; *a=*b; *b=c;

}

Если в основной программе имеется следующий фрагмент:

int x=1, y=2;

swap(&x, &y);

printf(“x=%d y=%d”, x, y);

то на экран будет выведено:

x=2 y=1

т.е. переменные x и y поменялись значениями.

После обращения к функции указатель a получил адрес переменной x, указатель b – адрес переменной y.после этого переменная x в основной программе и разадресованный указатель *a в функции оказываются связанными с одной ячейкой памяти; так же – y и *b.

Порядок выполнения работы

1. Изучить теоретические сведения.

2. Выполнить задание.

Задания для выполнения

Выполнить задания № 3 и № 5 из лабораторной работы № 25, используя две функции: одну для поиска минимального (максимального) элемента и его индексов, вторую для перестановки указанных элементов.

ЛАБОРАТОРНАЯ РАБОТА № 27

АРГУМЕНТЫ КОМАНДНОЙ СТРОКИ

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

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

После запуска программы управление передается функции main(). Она может возвращать значение в вызвавшую систему и принимать параметры из внешнего окружения. Возвращаемое значение должно быть целого типа. Стандарт предусматривает два формата функции:

тип main() {/*…*/}

или

тип main(int argc, char *argv[]) {/*…*/}

Функция main() имеет два параметра. Имена параметров в программе могут быть любыми, но принято использовать argc и argv.

– argc определяет количество параметров, передаваемых функции, включая имя самой программы;

– argv является массивом указателей на строки, каждая из которых содержит одно слово из командной строки. Если слово должно содержать символ пробел, то при записи его в командную строку оно должно быть заключено в кавычки.

Первый элемент массива argv[0] ссылается на полное имя запускаемого на выполнение файла. Следующий argv[1] указывает на первый параметр; argv[2] – на второй и т.д. Параметр argv[argc] должен быть равен 0.

Если функция main() ничего не возвращает, вызвавшая система получит значение, означающее успешное завершение. Ненулевое значение означает аварийное завершение. Оператор возврата из main() можно опускать.



©2015- 2019 stydopedia.ru Все материалы защищены законодательством РФ.