Сделай Сам Свою Работу на 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 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.