鱼C论坛

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

[已解决]求各位帮我看一下矩阵代码有什么问题

[复制链接]
发表于 2023-11-3 22:56:56 | 显示全部楼层 |阅读模式

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

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

x
题目是输入一个n(1<=n<=6),再输入一个n阶方阵,要求算除副对角线,最后一行和最后一列的和
我这个写的输入矩阵之后没有输出
#include<stdio.h>
#define MAX 6
int main()
{
        int n,i,j,a[MAX][MAX],sum;
        scanf("%d",&n);
        if(n<=6)
        for(i=0;i<n;i++)
        {
                for(j=0;j<n;j++)
                {
                        scanf("%d",a[i][j]);
                        if((i!=n-1)&&(j!=n-1)&&(j!=n-1-i));
                        sum=sum+a[i][j];
                }
        }
        printf("%d",sum);
        return 0;
}
最佳答案
2023-11-3 22:57:06
代码存在以下问题:

1. 在 scanf 函数中,应该使用 &a[ i][j] 而不是 a[ i][j],因为需要将输入的值存储到 a[ i][j] 中。
2. 变量 sum 没有初始化,应该将其初始化为 0。
3. 在 if 语句中,应该使用大括号将语句块括起来,否则只有第一条语句会被 if 语句控制。
4. 在 if 语句中,判断条件应该为 i+j==n-1 或者 i==n-1 或者 j==n-1,而不是 (i!=n-1)&&(j!=n-1)&&(j!=n-1-i)。

修改后的代码如下:
#include<stdio.h>
#define MAX 6
int main()
{
    int n,i,j,a[MAX][MAX],sum=0;
    scanf("%d",&n);
    if(n<=6)
    {
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                scanf("%d",&a[ i][j]);
                if(i+j==n-1 || i==n-1 || j==n-1)
                {
                    sum=sum+a[ i][j];
                }
            }
        }
    }
    printf("%d",sum);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-3 22:57:06 | 显示全部楼层    本楼为最佳答案   
代码存在以下问题:

1. 在 scanf 函数中,应该使用 &a[ i][j] 而不是 a[ i][j],因为需要将输入的值存储到 a[ i][j] 中。
2. 变量 sum 没有初始化,应该将其初始化为 0。
3. 在 if 语句中,应该使用大括号将语句块括起来,否则只有第一条语句会被 if 语句控制。
4. 在 if 语句中,判断条件应该为 i+j==n-1 或者 i==n-1 或者 j==n-1,而不是 (i!=n-1)&&(j!=n-1)&&(j!=n-1-i)。

修改后的代码如下:
#include<stdio.h>
#define MAX 6
int main()
{
    int n,i,j,a[MAX][MAX],sum=0;
    scanf("%d",&n);
    if(n<=6)
    {
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                scanf("%d",&a[ i][j]);
                if(i+j==n-1 || i==n-1 || j==n-1)
                {
                    sum=sum+a[ i][j];
                }
            }
        }
    }
    printf("%d",sum);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-3 22:57:43 | 显示全部楼层
顺便问一下这个提问怎么上传代码啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-3 22:58:38 | 显示全部楼层
根据您提供的代码,我发现了几个问题:

1. 在 scanf 函数中,传递矩阵元素的地址时,应该使用 & 运算符来获取地址,修改为 scanf("%d", &a[i][j]);

2. 在累加求和的过程中,需要对变量 sum 进行初始化,可以在声明时将其初始化为0,即 int sum = 0;

3. 在 if 语句条件判断中,添加了一个分号“;”,这会导致 sum 的累加部分无法执行。请将 if 语句修改为正常的代码块结构,即去掉分号:
if ((i != n - 1) && (j != n - 1) && (j != n - 1 - i)){    sum = sum + a[i][j];}
4. 为了确保输入的 n 值不超出范围,您可以添加一个 else 分支,在超出范围时给出提示或进行其他处理。

修正后的代码如下:
#include <stdio.h>#define MAX 6int main(){    int n, i, j, a[MAX][MAX], sum = 0;    scanf("%d", &n);    if (n <= 6)    {        for (i = 0; i < n; i++)        {            for (j = 0; j < n; j++)            {                scanf("%d", &a[i][j]);                if ((i != n - 1) && (j != n - 1) && (j != n - 1 - i))                {                    sum = sum + a[i][j];                }            }        }        printf("%d", sum);    }    else    {        printf("Input value of n is out of range.");    }    return 0;}
请注意,以上修改是基于您提供的代码进行的。希望对您有所帮助!如果您还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-5 15:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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