首页 > 文章列表 > C语言程序设计中常用的矩阵运算

C语言程序设计中常用的矩阵运算

矩阵运算c函数库
137 2024-01-29

矩阵常用运算 c语言程序设计

矩阵常用运算 c语言程序设计

#include

#define N 3

void main()

{

int i,j, sum = 0; int a[N][N], b[N][N];

int max , min,row_max = 0, col_max = 0, row_min = 0,col_min = 0;

printf("请输入矩阵的元素:");

for( i = 0; i < N; i++ )

for( j = 0; j < N; j++ ) scanf("%d",&a[i][j]);

printf("原始矩阵为:n");

for( i = 0; i < N; i++ )

{

for( j = 0; j < N; j++ )

printf("%5d",a[i][j]);

printf("n");

}

for( i =0; i < N; i++ )

sum += a[i][i];

printf(" 主对角线元素之和为: %dn",sum);

max = a[0][0], min = a[0][0];

for( i = 0; i < N; i++ )

for( j = 0; j < N; j++ )

{

if( a[i][j] < min ) {min = a[i][j]; row_min = i; col_min = j; }

if( a[i][j] > max ){ max= a[i][j]; row_max = i; col_max = j;}

}

printf(" 最大元素为:%d,其所在行数为:%d,所在列数为:%dn",max,row_max+1,col_max+1);

printf(" 最小元素为:%d,其所在行数为:%d,所在列数为:%dn",min,row_min+1,col_min+1);

for( i = 0; i < N; i++ )

for( j = 0; j < N; j++ )

b[i][j] = a[j][i];

printf("矩阵a的转置矩阵为:n");

for( i = 0; i < N; i++ )

{

for( j = 0; j < N; j++ )

printf("%5d",b[i][j]);

printf("n");

}

}

C语言编写矩阵关系运算

语句本身没多大问题,关键是算法是否正确,比如下述代码

for(i = 0;i < M;i++) {

for(j = 0;j < N;j++) {

for(a1 = 0,b1 = 0;b1 < N;b1++,a1++){

flag = a[i][a1] & b[b1][j];

sign = flag||sign;

}

c[i][j] = sign;

sign = flag = 0; // 需要否?

}

}a1和b1具有相同初值,且是同步变化的,作为数组下标,完全可以用a1来替换b1,也就是说,b1是多于余的。我对两个矩阵的“combine relation” 关系不太理解,所以建议你以文字方式给出算法。

用c语言编写一函数用来某矩阵的最小值和最大值以及它所在行和

代码一:

#include

int MAX,MIN;

int maxi,maxj,mini,minj;

void main()

{

void result(int x[][5],int m,int n);

int a[5][5],max,min,i,j;

for(i=0;i<5;i++)

for(j=0;j<5;j++)

scanf("%d",&a[i][j]);

MAX=MIN=a[0][0];

maxi=maxj=mini=minj=0;

result(a,5,5);

printf("MAX=%d,maxi=%d,maxj=%dn",MAX,maxi,maxj);

printf("MIN=%d,mini=%d,minj=%dn",MIN,mini,minj);

}

void result(int x[][5],int m,int n)

{

int i,j;

for(i=0;i

for(j=0;j

{

if(x[i][j]>MAX)

{

MAX=x[i][j];

maxi=i;

maxj=j;

}

if(x[i][j]

{

MIN=x[i][j];

mini=i;

minj=j;

}

}

}

但代码一有个缺点,那就是如果有多个最值,只能输出最后一个。下面的代码是经过改进的。

代码二:

#include

int MAX,MIN;

int maxi,maxj,mini,minj;

void main()

{

void result(int x[][5],int m,int n);

int a[5][5],max,min,i,j;

for(i=0;i<5;i++)

for(j=0;j<5;j++)

scanf("%d",&a[i][j]);

MAX=MIN=a[0][0];

maxi=maxj=mini=minj=0;

result(a,5,5);

}

void result(int x[][5],int m,int n)

{

int i,j;

for(i=0;i

for(j=0;j

{

if(x[i][j]>MAX)

MAX=x[i][j];

if(x[i][j]

MIN=x[i][j];

}

for(i=0;i

for(j=0;j

{

if(x[i][j]==MAX)

{

MAX=x[i][j];

maxi=i;

maxj=j;

printf("MAX=%d,maxi=%d,maxj=%dn",MAX,maxi,maxj);

}

if(x[i][j]==MIN)

{

MIN=x[i][j];

mini=i;

minj=j;

printf("MIN=%d,mini=%d,minj=%dn",MIN,mini,minj);

}

}

}