鱼C论坛

 找回密码
 立即注册
查看: 3212|回复: 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;
}
小甲鱼最新课程 -> https://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代码没有完成题目的要求,我给一个简单粗暴的参考写法:
  1. #include <stdio.h>

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

  6.         printf("Before calculated, the array is :\n");
  7.         for (i = 0; i < 3; i++)
  8.         {
  9.                 for (j = 0; j < 3; j++)
  10.                 {
  11.                         printf("%d\t",a[i][j]);
  12.                 }

  13.                 printf("\n");
  14.         }

  15.         
  16.         for (i = 0; i < 2; i++)//循环遍历前两行
  17.         {
  18.                 for (j = 0; j < 2; j++)
  19.                 {
  20.                         a[i][2] += a[i][j];
  21.                 }
  22.                 a[2][2] += a[i][2];
  23.         }
  24.         for (i = 0; i < 2; i++)//循环遍历前两列
  25.         {
  26.                 for (j = 0; j < 2; j++)
  27.                 {
  28.                         a[2][i] += a[j][i];
  29.                 }
  30.                 a[2][2] += a[2][i];
  31.         }

  32.         printf("After calculated, the array is :\n");
  33.         for (i = 0; i < 3; i++)
  34.         {
  35.                 for (j = 0; j < 3; j++)
  36.                 {
  37.                         printf("%d\t",a[i][j]);
  38.                 }

  39.                 printf("\n");
  40.         }

  41.         getchar();
  42.         return 0;
  43. }
复制代码
小甲鱼最新课程 -> https://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],显然已经越 ...

怎么会越界呢?我不太懂,我想知道我哪里错了
小甲鱼最新课程 -> https://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,所以越界了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-29 05:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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