鱼C论坛

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

求大佬帮我看看我的程序哪里出错了

[复制链接]
发表于 2017-10-26 16:47:24 | 显示全部楼层 |阅读模式

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

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

x
有两道题,但是我的程序都有问题,实在想不出哪错了也不知道怎么改,求大佬帮忙
题目是
题目描述:
设置一个n*m的二维数组,使其最后一行元素值是其所对应列的元素和,最后一列元素值是其所对应行的元素和,而表中最后一个元素是除最后一行和一列外的所有元素的总和。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[3][3]={{1,2,0},{4,5,0},{0,0,0}};
    int i,j;
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
    {

            if(i==0)
               if(j==0||j==1)
                  a[0][2]=a[0][1]+a[0][0];


            if(j==0)
                if(i==0||i==1)
                  a[2][0]=a[0][0]+a[1][0];

        if(i+j==0||i+j==1||i+j==2)
            a[2][2]=a[0][0]+a[0][1]+a[1][0]+a[1][1];

    }

        printf("%d\n",a[i][j]);

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-26 22:26:22 | 显示全部楼层
本帖最后由 BngThea 于 2017-10-26 22:27 编辑

printf("%d\n",a[j]);
上述语句在执行的时候, i 和 j 已经都等于3
所以你其实在打印a[3][3],显然已经越界,结果应该是一个随机的数

而且lz代码没有完成题目的要求,我给一个简单粗暴的参考写法:
#include <stdio.h>

int main(void)
{  
        int a[3][3]={{1,2,0},{4,5,0},{0,0,0}};
        int i,j;

        printf("Before calculated, the array is :\n");
        for (i = 0; i < 3; i++)
        {
                for (j = 0; j < 3; j++)
                {
                        printf("%d\t",a[i][j]);
                }

                printf("\n");
        }

        
        for (i = 0; i < 2; i++)//循环遍历前两行
        {
                for (j = 0; j < 2; j++)
                {
                        a[i][2] += a[i][j];
                }
                a[2][2] += a[i][2];
        }
        for (i = 0; i < 2; i++)//循环遍历前两列
        {
                for (j = 0; j < 2; j++)
                {
                        a[2][i] += a[j][i];
                }
                a[2][2] += a[2][i];
        }

        printf("After calculated, the array is :\n");
        for (i = 0; i < 3; i++)
        {
                for (j = 0; j < 3; j++)
                {
                        printf("%d\t",a[i][j]);
                }

                printf("\n");
        }

        getchar();
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-28 16:16:16 | 显示全部楼层
BngThea 发表于 2017-10-26 22:26
printf("%d\n",a[j]);
上述语句在执行的时候, i 和 j 已经都等于3
所以你其实在打印a[3][3],显然已经越 ...

怎么会越界呢?我不太懂,我想知道我哪里错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-28 16:42:01 | 显示全部楼层
小甲鱼的迷妹zbb 发表于 2017-10-28 16:16
怎么会越界呢?我不太懂,我想知道我哪里错了

你定义a[3][3]的时候是一个3X3的数组,数组下标索引都是从0开始的,所以最后一个值只能是a[2][2]
上面你的程序对 i 和 j 进行循环后都等于3,所以越界了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-28 19:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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