原题链接:[编程入门]矩阵对角线求和
题目:求三阶矩阵的主副对角线之和,并分别输出。
主要步骤:
1.输入三阶矩阵
2.对主对角线元素求和
3.对副对角线元素求和
4.分别输出
思路分析:
在主函数中输入矩阵,调用主对角线求和函数和副对角线求和函数求和并输出。
以主对角线求和函数MainDiagonal为例,由于要用到主函数中存储矩阵的二维数组,而数组是不能作为参数传递的,但指针却可以。
因此我们要在主函数中,用一个指针来指向数组的首地址,然后将这个指针作为求和函数的参数,实现矩阵数据的传递。
因此求和函数的形参,应设置为指针类型。
虽然一维数组和二维数组的书写方式不同,但它们在内存中都是线性存储的,如本题目中a[1][3]和a[2][1]的位置是相邻的,即b[2]指向a[1][3]的话,b[3]就指向a[2][1]。
所以在MainDiagonal求和函数内部进行求和时,需要按照一维函数的下标规则进行书写,最后将和返回到主函数即可。
参考代码:
#include<stdio.h>
//主对角线求和函数
int MainDiagonal(int* a){
int sum;
/*
本函数的参数为指针
相当于已经将二维数组一维化
对一维数组进行对应求和即可
*/
sum = a[0]+a[4]+a[8];
return sum;
}
//副对角线求和函数
int CounterDiagonal(int *a){
int sum;
sum = a[2]+a[4]+a[6];
return sum;
}
int main(void){
int i,j;
int a[3][3];
int* b;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
scanf("%d",&a[i][j]);
//printf("%d ",a[i][j]);
}
//printf("\n");
}
b = &a[0][0];//将二维数组a的首地址赋值给指针b
printf("%d ",MainDiagonal(b));
printf("%d",CounterDiagonal(b));
return 0;
}0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
这个为什么显示答案错误啊 #include<stdio.h> main() { int s[3][3]; int sum1 = 0, sum2 = 0, j = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { scanf("%2d", &s[i][j]); } } for (int i = 0; i < 3; i++) { sum1 = s[i][i] + sum1; } for (int k = 2; k > -1; k--) { sum2 = s[j][k] + sum2; j++; } printf("%d %d", sum1, sum2); }