码迷,mamicode.com
首页 > 其他好文 > 详细

谭浩强C程序设计习题6-3思考

时间:2020-05-19 22:30:54      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:scanf   术语   int   专业   二维数组   print   求和   相等   养成   

  题目:求一个3×3的整数矩阵对角线元素总和。

  首先要考虑的是二维数组的对角线特征,从二维矩阵不难看出,一般二维矩阵会有两条对角线,一条从左上往右下,这里我称之为正对角线;另一条从左下往右上,这里我称之为反对角线(可能专业术语不是这样叫,下文的各种名词也不保证其专业性)。然后这里假定要求的二维矩阵都是正矩阵,即行列数量都是相等的矩阵。观察矩阵,可以看出,正对角线的元素行列位置都是相等的,即i==j;反对角线行列位置相加和为N-1。对于奇数矩阵,正反对角线在中心位置有一个元素重合,求和时要减去该元素,偶数矩阵则不需要。下面是代码:

 1 #include<stdio.h>
 2 #define N 3
 3 int main()
 4 {
 5     int i, j, sum1 = 0, sum2 = 0,sum = 0;
 6     int num[N][N] = { {1,2,3},{4,5,6},{7,8,9} };          //初始化二维数组
 7     /*求正对角线的和*/
 8     for(i = 0; i<N; i++)
 9         for (j = 0; j < N; j++)
10         {
11             if (i == j)                                  //正对角线的数二维下标相等
12                 sum1 += num[i][j];
13         }
14     /*求反对角线的和*/
15     for(i = 0; i<N; i++)
16         for (j = 0; j < N; j++)
17         {
18             if (j == N - i - 1)                          //反对角线的数二维下标和为N-1
19                 sum2 += num[i][j];
20         }
21     if (N % 2 == 1)
22         sum = sum1 + sum2 - num[N / 2][N / 2];           //如果行列个数为奇数,则总和多加了一个最中间的数,需要减去
23     else                                                 //如果行列个数为偶数,则总对角线的和是正反对角线的和相加 
24         sum = sum1 + sum2;
25     printf("二维数组:");
26     /*输出二维数组*/
27     for (i = 0; i < N; i++)
28     {
29         printf("\n");
30         for (j = 0; j < N; j++)
31             printf("%d\t", num[i][j]);
32     }
33     printf("\n");
34     /*输出对角线总和*/
35     printf("的对角线和为:%d\n", sum);
36     return 0;
37 }

  代码宏定义#define N 3是为了修改时方便把3×3矩阵拓展到其他矩阵来,虽然题目没作要求,但需要养成一个这样的良好习惯。

  下面来学习一下配套学习指导的做法:

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int a[3][3], sum = 0;
 5     int i, j;
 6     printf("enter data:\n");
 7     for(i = 0; i<3; i++)
 8         for(j = 0; j<3; j++)
 9             scanf("%3d",&a[i][j];
10     for(i = 0; i<3; i++)
11         sum = sum + a[i][i];
12     printf("sum = %6d\n",sum);
13     return 0;
14 }

  看完答案发现还是我想太多了。不过sum+=a[i][i]一重循环就行了,我怎么还要搞个二重循环出来,难受。

谭浩强C程序设计习题6-3思考

标签:scanf   术语   int   专业   二维数组   print   求和   相等   养成   

原文地址:https://www.cnblogs.com/teamcolt/p/12919910.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!