题目:求三阶矩阵的主副对角线之和,并分别输出。
主要步骤:
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分
12 人评分
这个为什么显示答案错误啊 #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); }
我看了下上面写的“数组不能作为参数传递”这是错的啊!错的错的!!应该是“数组不能作为返回值”只是不能被return传递,做形参是Ok的~~不好意思不好意思,最近练习练习着才记起来有个地方写错了,但是不知道是哪个题目了,感谢楼上~
b = &a[0][0];//将二维数组a的首地址赋值给指针b ----------- 这一步有点不懂,为什么要这样做
菜蛙 2022-08-21 10:03:37 |
我这里形参用的指针类型(想练习下数组、指针在函数间传递数据的使用),让指针b指向二维数组的首地址,将b作为实参传给两个函数,进入函数体后就可以像处理指针那样处理数据了。二维数组也可以直接做形参,不过要注意第二维的维数一定要写上就好啦。
简单编码 (C++代码)浏览:730 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:502 |
C语言程序设计教程(第三版)课后习题5.7 (C++代码)浏览:879 |
字符串比较 (C语言代码)答案错误????浏览:641 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:699 |
C语言训练-求PI* (C语言代码)浏览:637 |
【蟠桃记】 (C语言代码)浏览:1084 |
出圈】指针malloc版浏览:377 |
幸运数 (C++代码)浏览:2982 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1213 |