编程工具:Microsoft Visual C++ 2010学习版
程序获取:在最下方有完整代码。
或者关注公众号:码上言 回复:C语言矩阵即可获取工具和代码。
根据题目的意思,我们将题目中的四个功能拆分成以下四个函数来处理,最后由主函数调用。
我们的矩阵是自己从键盘输入或者自己定义好的矩阵。本文的是在主函数中写了个循环,我们自己手动输入矩阵,输入的方式是:数字+空格+回车。
N是我们定义的常量,我们是几阶的矩阵就将N设置多大。
#define N 3
第一种:矩阵的转置
int transp(int a[N][N]) { int i,j,b[N][N]; for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { b[j][i]=a[i][j]; } } for(i = 0; i < N; i++) { for(j = 0; j < N; j++){ printf("%3d ",b[i][j]); } printf("\n"); } return 0; }
第二种:矩阵的平均值
矩阵的平均值,就是矩阵的所有值相加,然后除以矩阵元素的个数。
这里的平均值函数返回值是一个double类型的。
double average(int a[N][N]) { int i,j; double avg,sum=0,count=0; for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { sum += a[i][j]; count++; } } avg = sum / count; return avg; }
第三种:矩阵的对角线元素之和
对角线有两条对角线,分两种情况,一种是N*N矩阵的N为偶数,另一种是N为奇数,在偶数的时候,两条对角线没有相重复的数值,而为奇数的时候有一个交叉的数值重复,则需要再减一个交叉的数值。
例如:4*4矩阵N为偶数的矩阵示意图:对角线没有交叉的数据
1 | 1 | ||
1 | 1 | ||
1 | 1 | ||
1 | 1 |
例如:3*3矩阵N为奇数的矩阵示意图:对角线有交叉的数据
1 | 1 | |
1 | ||
1 | 1 |
代码如下:
int diagonal_sum(int a[N][N]) { int i,j, s = 0; for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { if(i == j) { s += a[i][j]; } } s += a[i][N-i-1]; } if(N % 2 == 1) { s -= a[N/2][N/2]; } return s; }