Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прилож В2 Описание языка С ч 2.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
382.46 Кб
Скачать

Void main()

{

float f[8], g[12], h[15], sf, sg, sh;

int kf, kg, kh;

clrscr();

printf(“Массив F из 8 элементов\n”);

fmas(f, 8, 1.7, 2.5, &sf, &kf);

printf(“sf=%.3f kf=%d\n”,sf,kf);

printf(“Массив G из 12 элементов\n”);

fmas(g, 12, 2.9, 3.1, &sg, &kg);

printf(“sg=%.3f kg=%d\n”,sg,kg);

printf(“Массив H из 15 элементов\n”);

fmas(h, 15, 3.5, 5.4, &sh, &kh);

printf(“sh=%.3f kh=%d\n”,sh,kh);

}

4. Аргументом функции является двухмерный массив (матрица)

Описание функции. Такой аргумент можно описать 3-мя способами:

1) как массив с заданным количеством строк и столбцов

void fun(float c[5][10],…)

Внутри функции элементы массива обозначаются: c[i][j]

Недостаток этого способа – функция может работать только с матрицами 5*10

2) как массив с неопределенным количеством строк и заданным количеством столбцов

void fun(float c[][10], int m,…)

где m – количество строк

Внутри функции элементы массива обозначаются: c[i][j]

Достоинство – функция может работать с матрицами, имеющими разное количество строк: A[5][10], B[8][10], C[20][10].

Недостаток – длина строки (2-й параметр) фиксирована – 10.

3) как указатель на начало массива:

void fun(float *ptc, int m, int n,…)

где m – количество строк

n – количество столбцов

Элементы массива: *(ptc+i*n+j)  c[i][j]

Этот способ является универсальным, так как функция может работать с массивами любых размеров.

Вызов функции. При вызове функции первым аргументом указывают имя массива для 1-3 способов, а далее – другие аргументы в зависимости от способа:

1) float d[5][10], v[5][10];

fun (d,…); fun(v,…);

2) float a[7][10], b[12][10];

fun(a, 7,…); fun(b, 12,…);

3) float s[4][6], u[9][7];

fun(s, 4, 6,…); fun(u, 9, 7,…);

Пример для 4-го варианта. Заданы три матрицы A[3,4], B[5,6], C[4,7], элементы которых вычисляются по формулам:

a[i,j]=1.9ij2-3.7i2j

b[k,l]=2.5kl2-4.1k2l

c[i,j]=5.3ij2+3.1i2j

Для каждой из матриц определить сумму элементов строки и произведение элементов столбца, на пересечении которых находится максимальный элемент.

Решение задачи. Необходимо использовать функцию, которая будет выполнять следующие действия:

1) формировать матрицу X[M,N] по формуле:

X[i,j]=fij2+gi2j

2) определять Хmax и его индексы imax, jmax

3) a) вычислять сумму элементов строки imax

б) вычислять произведение элементов столбца jmax

Программа примера для 4-го варианта:

#include<stdio.h>

#include<conio.h>

/* Описание функции fmatr */

void fmatr(float *ptx, int m, int n, float f, float g, float *pt_sx, float *pt_px, char name)

{

int i,j,imax,jmax;

float xmax,sx,px;

printf(“Матрица %c размером %dx%d\n”,name,m,n);

for(i=0;i<=m-1;i++)

{

for(j=0;j<=n-1;j++)

{

*(ptx+i*n+j)=f*i*j*j+g*i*i*j;

printf(“%.1f “, *(ptx+i*n+j));

}

printf(“\n”);

}

imax=jmax=0;

xmax=*ptx;

for(i=0;i<=m-1;i++)

for(j=0;j<=n-1;j++)

if(*(ptx+i*n+j)>xmax)

{

xmax=*(ptx+i*n+j);

imax=i;

jmax=j;

}

printf(“%cmax=%.1f imax=%d jmax=%d\m”, name, xmax, imax, jmax);

sx=0;

for(j=0;j<=n-1;j++)

sx+=*(ptx+imax*n+j);

px=1;

for(i=0;i<=m-1;i++)

p*=*(ptx+i*n+jmax);

*pt_sx=sx;

*pt_px=px;

}

/* Главная функция */