鱼C论坛

 找回密码
 立即注册
查看: 26|回复: 3

求助

[复制链接]
发表于 昨天 20:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:求一个3*3矩阵对角线元素之和

程序如下:
#include <stdio.h>

void main()
{
        int i,j,sum=0,a[3][3];
        for(i=0;i<3;i++)
        {
                for(j=0;j<3;j++)
                {
                        scanf("%d",&a[i][j]);
                }
        }
        for(i=0;i<3;i++)
        {
                sum+=a[i][i];
        }
        printf("%d\n",sum);
}

我运行没出错,但是就是按照scanf输入数字回车没反应,程序是哪里不对吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 20:56 | 显示全部楼层
鱼油你好!你贴出的程序不完整,我来帮你补充完整并解释一下思路。

题目通常指求3x3矩阵的主对角线(从左上到右下)元素之和。主对角线的元素下标满足 i == j

完整程序如下:


  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int a[3][3];
  5.     int i, j, sum = 0;
  6.    
  7.     // 输入矩阵
  8.     printf("请输入9个整数:\n");
  9.     for(i = 0; i < 3; i++)
  10.         for(j = 0; j < 3; j++)
  11.             scanf("%d", &a[i][j]);
  12.    
  13.     // 计算主对角线之和
  14.     for(i = 0; i < 3; i++)
  15.         sum += a[i][i];
  16.    
  17.     printf("主对角线元素之和为:%d\n", sum);
  18.    
  19.     return 0;
  20. }
复制代码


如果要计算两条对角线(主对角线和副对角线)的总和,需要注意中心元素不要重复计算:


  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int a[3][3];
  5.     int i, j, sum = 0;
  6.    
  7.     printf("请输入9个整数:\n");
  8.     for(i = 0; i < 3; i++)
  9.         for(j = 0; j < 3; j++)
  10.             scanf("%d", &a[i][j]);
  11.    
  12.     // 分别计算两条对角线
  13.     for(i = 0; i < 3; i++)
  14.     {
  15.         sum += a[i][i];         // 主对角线
  16.         sum += a[i][2 - i];     // 副对角线
  17.     }
  18.    
  19.     // 减去重复的中间元素
  20.     sum -= a[1][1];
  21.    
  22.     printf("两条对角线元素之和为:%d\n", sum);
  23.    
  24.     return 0;
  25. }
复制代码


说明:
1. 程序中使用 int main() 而不是 void main(),这是标准写法。
2. 第一个程序只计算主对角线,第二个程序计算两条对角线总和。
3. 副对角线元素下标满足 i + j == 2

选择你需要的版本使用即可。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 21:47 | 显示全部楼层
“输入数字回车没反应”,通常不是程序坏了,而是因为:

scanf("%d",&a[i][j]); 一共要读 9个整数,所以你只输入一次回车,程序还会继续等,直到9个数都输完。

就是:少输入了,程序还在等后面的8个或若干个数字。

例如这样输入都可以:

  1. 1 2 3
  2. 4 5 6
  3. 7 8 9
复制代码

或者一行输完:

  1. 1 2 3 4 5 6 7 8 9
复制代码

最后才会输出结果。

你的代码逻辑是对的,功能就是求主对角线:

  1. a[0][0] + a[1][1] + a[2][2]
复制代码


完整可写成:

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int i, j, sum = 0, a[3][3];
  5.     for(i = 0; i < 3; i++)
  6.     {
  7.         for(j = 0; j < 3; j++)
  8.         {
  9.             scanf("%d", &a[i][j]);
  10.         }
  11.     }

  12.     for(i = 0; i < 3; i++)
  13.     {
  14.         sum += a[i][i];
  15.     }

  16.     printf("%d\n", sum);
  17.     return 0;
  18. }
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 22:10 | 显示全部楼层
不二如是 发表于 2026-3-11 21:47
“输入数字回车没反应”,通常不是程序坏了,而是因为:

我想再问一下,你举的两个输入的例子都可以运行成功,那第二个一行输完的不也是只按了一次回车吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-12 00:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表