Программирование на языке Си. Практикум
.pdf
void pech_m(int *x, int n, int m) //определение функц. pech_m
{
int i, j;
for (i=0; i<n; i++)
{
for (j=0; j<m; j++) printf(“%3d”, x[i*m+j]);
printf(“\n”);
}
}
void main(void) // функция main с 2 вызовами функции pech_m
{
int a[10][5], b[15][5];
pech_m(&a[0][0], 10, 5); // передача массива a в функцию pech_m(&b[0][0], 15, 5); // передача массива b в функцию
}
Лабораторная работа №9 Создание функций по обработке массивов
Задача 1.
Задание: Написать программу с использованием функций в соответствии с вариантом. До выполнения задачи внести изменения в n-ую строку или n-ый столбец массива. Число n и новые значения в массив ввести с клавиатуры с помощью функции scanf(). Распечатать массивы до и после изменения.
№ |
Вариант задания |
1Вычислить и напечатать произведение и количество положительных чисел среди нечетных элементов двумерного массива вещественных чисел размером 6 х 5. Массив инициализировать по формуле
aij cos(i 2) 0.5
Изменения ввести в n-ую строку.
2Вычислить и напечатать произведение и количество отрицательных чисел среди четных элементов двумерного массива вещественных чисел размером 5 х 6.
41
Массив инициализировать по формуле aij sin(i j) 0.1
Изменения ввести в n-ую строку.
3 Вычислить и напечатать сумму и количество положительных элементов среди четных элементов двумерного массива вещественных чисел размером 6 х 7. Массив инициализировать по формуле
aij i * j cos(i)
Изменения ввести в n-ый столбец.
4 Вычислить и напечатать сумму и количество отрицательных элементов среди четных элементов двумерного массива вещественных чисел размером 5 х 6. Массив инициализировать по формуле
aij cos(i 2) 0.5
Изменения ввести в n-ый столбец.
5Вычислить и напечатать произведение и количество положительных элементов среди элементов четных строк двумерного массива вещественных чисел размером 6 х 5. Массив инициализировать по формуле
aij sin(i j) 0.1
Изменения ввести в n-ый столбец.
6 Вычислить и напечатать сумму и количество отрицательных чисел среди элементов нечетных строк двумерного массива вещественных чисел размером 5 х 6. Массив инициализировать по формуле
aij cos(i j) 0.5
Изменения ввести в n-ый столбец.
7 Вычислить и напечатать сумму и количество положительных элементов среди элементов двумерного массива вещественных чисел размером 6 х 6.
Массив инициализировать по формуле aij i cos( j) Изменения ввести в элементы главной диагонали.
42
8 Вычислить и напечатать сумму и количество отрицательных элементов среди элементов двумерного массива вещественных чисел размером 6 х 6.
Массив инициализировать по формуле aij sin(i j) 0.1
Внести изменения в элементы побочной диагонали.
9Вычислить и напечатать произведение отрицательных элементов главной и побочной диагоналей массива D7х7. Сравнить и напечатать, какое произведение больше по абсолютной величине.
Массив инициализировать по формуле
aij sin( j) cos(i)
Изменения ввести в n-ый столбец.
10 Вычислить и напечатать сумму положительных элементов k-ого и m-ого столбца массива D7х7. Сравнить и напечатать, какая сумма больше.
Массив инициализировать по формуле aij cos(i) sin( j)
Изменения ввести в n-ый столбец.
11Вычислить и напечатать произведение и количество отрицательных элементов среди нечетных элементов двумерного массива вещественных чисел размером 7 х 5. Массив инициализировать по формуле
aij cos(i) sin( j)
Изменения ввести в n-ую строку.
12Вычислить и напечатать произведение и количество положительных элементов среди четных элементов двумерного массива вещественных чисел, размером 6 х 6. Массив инициализировать по формуле
aij cos(i j) 0.5
Внести изменения в n-ую строку.
13Вычислить и напечатать произведение и количество отрицательных элементов среди элементов четных строк двумерного массива вещественных чисел размером 5 х 7.
43
Массив инициализировать по формуле aij cos(i j) 0.5
Внести изменения в n-ый столбец.
14 Вычислить и напечатать сумму и количество положительных элементов среди элементов четных строк двумерного массива вещественных чисел размером 7 х 6. Массив инициализировать по формуле
aij cos(i 2 * j) 0.2
Внести изменения в n-ый столбец.
15Вычислить и напечатать сумму положительных и сумму отрицательных элементов двумерного массива вещественных чисел размером 6 х 5.
Массив инициализировать по формуле aij i cos( j) Внести изменения в n-ый столбец.
16Вычислить и напечатать произведение положительных и сумму отрицательных элементов двумерного массива вещественных чисел размером 6 х 5.
Массив инициализировать по формуле aij cos(i) j Внести изменения в n-ый столбец.
17Вычислить и напечатать произведение и количество положительных чисел среди нечетных элементов двумерного массива вещественных чисел размером 6 х 5. Массив инициализировать по формуле
aij cos(i 2) 0.5
Внести изменения в n-ую строку.
18Вычислить и напечатать произведения и количество отрицательных чисел среди четных элементов двумерного массива вещественных чисел размером 5 х 6. Массив инициализировать по формуле
aij cos(i) sin( j)
Внести изменения в n-ую строку.
19 Вычислить и напечатать сумму и количество положительных элементов среди четных элементов двумерного массива вещественных чисел размером 6 х 7.
44
Массив инициализировать по формуле aij cos(i j) 0.5
Внести изменения в n-ый столбец.
20 Вычислить и напечатать сумму и количество отрицательных элементов среди четных элементов двумерного массива вещественных чисел размером 5 х 6. Массив инициализировать по формуле
aij cos(i 2) 0.5
Внести изменения в n-ый столбец.
21Вычислить и напечатать произведение и количество положительных элементов среди элементов четных строк двумерного массива вещественных чисел размером 6 х 5. Массив инициализировать по формуле
aij cos(i j) 0.5
Внести изменения в n-ый столбец.
22 Вычислить и напечатать сумму и количество отрицательных чисел среди элементов нечетных строк двумерного массива вещественных чисел размером 5 х 6. Массив инициализировать по формуле
aij cos(i j) 0.5
Внести изменения в n-ый столбец.
23 Вычислить и напечатать сумму и количество положительных элементов среди элементов двумерного массива вещественных чисел размером 6 х 6.
Массив инициализировать по формуле aij i cos( j) Внести изменения в элементы главной диагонали.
24 Вычислить и напечатать сумму и количество отрицательных элементов среди элементов двумерного массива вещественных чисел размером 6 х 6.
Массив инициализировать по формуле aij sin(i j) 0.1
Внести изменения в элементы побочной диагонали.
45
25Вычислить и напечатать сумму отрицательных элементов главной и побочной диагоналей массива D7х7. Сравнить и напечатать, какая сумма больше.
Массив инициализировать по формуле
aij sin( j) cos(i)
Внести изменения в n-ый столбец.
26Вычислить и напечатать сумму отрицательных элементов k-ого и m-ого столбца массива D7х7. Сравнить и напечатать, какая сумма больше по абсолютной величине. Массив инициализировать по формуле
aij cos(i) sin( j)
Внести изменения в n-ый столбец.
27Вычислить и напечатать произведение и количество отрицательных элементов среди нечетных элементов двумерного массива вещественных чисел размером 7 х 5. Массив инициализировать по формуле
aij sin(i j) 0.1
Внести изменения в n-ую строку.
28Вычислить и напечатать произведение и количество положительных элементов среди четных элементов двумерного массива вещественных чисел размером 6 х 6. Массив инициализировать по формуле
aij cos(i 2 * j) 0.2
Внести изменения в n-ую строку.
29Вычислить и напечатать произведение и количество отрицательных элементов среди элементов четных строк двумерного массива вещественных чисел размером 5 х 7. Массив инициализировать по формуле
aij cos(i 2) 0.5
Внести изменения в n-ый столбец.
30Вычислить печати сумму и количество положительных элементов среди элементов четных строк двумерного массива вещественных чисел размером 7 х 6.
46
Массив инициализировать по формуле aij cos(i 2 * j) 0.2
Внести изменения в n-ый столбец.
Задача 2.
Задание: Написать программу с использованием функций в соответствии с вариантом. Дан двумерный массив размером n x n. Число n ввести с клавиатуры с помощью функции scanf(). Значения элементов задать согласно формуле из Задачи 1. Распечатать исходный и полученный массивы.
№ |
Вариант задания |
|
|
1 |
Найти среднее арифметическое элементов каждой строки. |
|
Результат разместить в одномерный массив. Напечатать, в |
|
какой строке среднее арифметическое больше. |
|
|
2 |
Найти mах элемент среди элементов каждой строки. |
|
Результат разместить в одномерный массив. |
3 |
Найти сумму элементов каждой строки. Результат |
|
разместить в одномерный массив. Напечатать, в какой |
|
строке сумма больше. |
4 |
Найти сумму элементов каждого столбца. Результат |
|
разместить в одномерный массив. Напечатать, в каком |
|
столбце сумма больше. |
5 |
Найти произведение элементов каждой строки. Результат |
|
разместить в одномерный массив. |
6 |
Найти произведение элементов каждого столбца. |
|
Результат разместить в одномерный массив. Напечатать, в |
|
каком столбце произведение меньше. |
7 |
Найти среднее арифметическое элементов каждого |
|
столбца. Результат разместить в одномерный массив. |
|
Напечатать, в каком столбце среднее арифметическое |
|
больше. |
8Найти mах элемент среди элементов каждого столбца. Результат разместить в одномерный массив.
47
9 |
Найти |
среднее |
арифметическое |
соответствующих |
|
элементов k-ой и m-ой строки. Результат разместить в |
|||
|
одномерный массив. Числа k и m ввести с клавиатуры с |
|||
|
помощью функции scanf(). |
|
||
10 |
Найти сумму соответствующих элементов k-ой и m-ой |
|||
|
строк. Результат разместить в одномерный массив. Числа |
|||
|
k и m ввести с клавиатуры с помощью функции scanf(). |
|||
11 |
Найти |
среднее |
арифметическое |
соответствующих |
|
элементов k-ого и m-ого столбцов. Результат разместить в |
|||
|
одномерный массив. Числа k и m ввести с клавиатуры с |
|||
|
помощью функции scanf(). |
|
||
12 |
Найти сумму соответствующих элементов k-ого и m-ого |
|||
|
столбцов. Результат разместить в одномерный массив. |
|||
|
Числа k и m ввести с клавиатуры с помощью функции |
|||
|
scanf(). |
|
|
|
13 |
Найти сумму соответствующих элементов первой строки |
|||
|
и последнего столбца. Результат разместить в |
|||
|
одномерный массив. |
|
||
14 |
Найти сумму соответствующих элементов первого |
|||
|
столбца и последней строки. Результат разместить в |
|||
|
одномерный массив. |
|
||
15 |
Найти mах элемент данного массива и сумму элементов |
|||
|
той строки, в которой mах элемент расположен. |
|||
16 |
Найти min элемент данного массива и сумму элементов |
|||
|
того столбца, в котором min элемент расположен |
|||
17 |
Найти mах элемент данного массива и произведение |
|||
|
элементов той строки, в которой mах элемент |
|||
|
расположен. |
|
|
|
18 |
Найти mах элемент в k-ой строке данного массива и |
|||
|
произведение элементов того столбца, в котором mах |
|||
|
элемент расположен. |
|
||
19 |
Найти mах элемент среди элементов главной диагонали |
|||
|
данного массива и сумму элементов той строки, в которой |
|||
|
mах элемент расположен. |
|
||
20Найти min элемент среди элементов побочной диагонали данного массива и сумму элементов той строки, в которой min элемент расположен.
48
21Найти max элемент среди элементов k-ого столбца массива сумму элементов той строки, в которой мах элемент расположен.
22Найти max и min элементы среди элементов массива и их среднее арифметическое. Элементы брать по абсолютной величине.
23Найти min элемент среди элементов двух строк массива. Номера строк ввести с клавиатуры с помощью scanf().
24Найти min элемент среди элементов двух столбцов массива. Номера столбцов ввести с клавиатуры с помощью функции scanf().
25Найти среднее арифметическое max и min элементов массива. Номера строк и столбцов, в которых найдены max и min элементы, распечатать.
26Найти среднее геометрическое max и min элементов массива. Номера строк и столбцов, в которых найдены max и min элементы, распечатать.
27Найти max элемент в перыой строке и min элемент в последнем столбце массива. Найти их произведение.
28Найти max элемент в последней строке и min элемент во втором столбце массива. Найти их сумму.
29Найти max элемент по абсолютной величине среди элементов массива. Номера строки и столбца, в которых найден max, распечатать.
30Найти max элемент по абсолютной величине среди элементов главной диагонали массива. Номера строки и столбца, в которых найден max, распечатать.
Лабораторная работа № 10 Функции, выполняющие матричные операции
Задание: Написать программу вычисления матричного выражения (по варианту из работы №4). Каждую матричную операцию оформить в виде отдельной функции. Результат каждой операции выводить на экран с использованием функции печати матрицы. Функция main() должна содержать заполнение исходных матриц и последовательный вызов функций.
49
2.2. Указатели на функции
Идентификатор с открывающейся скобкой трактуется как имя функции. Имя же функции без скобки дает нам адрес этой функции (адрес точки входа в нее). С таким адресом можно работать как с обычным объектом ссылочного типа.
Можно объявить указатель и, присваивая ему адрес разных функций, обращаться к разным функциям из одного места программы:
// Объявление указателя на функцию с двумя параметрами int (*fptr) (int, int);
Можно определить массивы указателей на функции, которые удобно использовать при реализации управления с помощью меню. Каждому пункту меню ставится в соответствие функция, указатель на которую помещается в массив. При выборе из меню нужного действия, необходимая функция вызывается по соответствующему индексу из массива указателей.
// Объявление массива указателей на функции без параметров void (*masfun[3]) (void);
Адрес функции можно передать в качестве фактического параметра в другую функцию. Рассмотрим пример прототипа функции integral для вычисления определенного интеграла, одним из ее параметров будет адрес функции f для расчета подынтегрального выражения.
double f (double);
double integral(double, double, double(*)(double), int);
Лабораторная работа № 11 Использование указателей на функции
Задание: Создать программы для вычисления определенного интеграла одним из трех методов (прямоугольников, трапеций и Симпсона). Границы интервала, число разбиений и признак (номер) метода вводить с клавиатуры. На основе лабораторной работы № 8 написать 3 программы:
50
