原题链接:[编程入门]矩阵对角线求和
题目:求三阶矩阵的主副对角线之和,并分别输出。
主要步骤:
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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复