c语言:程序改错

下列程序在主程序中初始化一个矩形并将每个单元元素输出,然后调用子函数,分别计算每一行元素之和,将和直接存放在每行的第一个元素中,返回主函数之后输出各行元素的和。#incl... 下列程序在主程序中初始化一个矩形并将每个单元元素输出,然后调用子函数,分别计算每一行元素之和,将和直接存放在每行的第一个元素中,返回主函数之后输出各行元素的和。
#include<stdio.h>
void rowsum(int a[][4],int nrow)
{
for(int i=0;i<nrow;i++)
{for(int j=1;j<4;j++)
a[i][0]+=a[i][j];
}
}
void main()
{int table[3][]={{1,2,3,4},{2,3,4,5},{3,4,5,6}};错
for(int i=0;i<3;i++)
{for(int j=0;j<=4;j++)
printf("%d ",table[i][j]);
printf("\n");
}
rowsum(table[3][4],3);错
for(i=0;i<3;i++)
printf("sum of row%d is %d \n",i,table[i][0]);
getch();
}
谢谢
展开
 我来答
laohu2862
推荐于2017-10-06 · TA获得超过1246个赞
知道小有建树答主
回答量:557
采纳率:0%
帮助的人:645万
展开全部
int table[3][]={{1,2,3,4},{2,3,4,5},{3,4,5,6}};
修改为:
int table[3][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6}};

多维数组直接赋值时,不能省略数组的第二个下标的。

rowsum(table[3][4],3);
修改为
rowsum(table,3);

因为定义的时候
void rowsum(int a[][4],int nrow)
其中
int a[][4],其实指的就是二维数组,指针形式进入。
所以应该传入table这个首地址。

至于中间的
for(int j=0;j<=4;j++)
printf("%d ",table[i][j]);

这个地方,数组下标超了,应该是
for(int j=0;j<=3;j++)
printf("%d ",table[i][j]);
tmfengxin1
2013-05-21 · TA获得超过623个赞
知道小有建树答主
回答量:344
采纳率:0%
帮助的人:108万
展开全部

问题:

1,多维数组的定义,主要是分配内存的问题。

  • a[i][j]是数组的数组,意思是定义i个元素的数组,每个元素都是一个含有j个元素的数组.  注意:这里的i,j是具体的数字,不能是变量。

  • a[][4]是定义了n个含有4个元素的数组,如:a[][4]={{1,2,3,4},{5,4,3,2},{6,7,8,9}}是定义了3个"含有4个元素的数组"的数组.虽然3个自定义的,但是是确定的数字。程序可以分配内存。

  • a[3][]是定定义了3个"含有n个元素的数组"的数组.如:a[3][]={{1,2,3}{3,4}{5,6}},由于n的值是不确定的(如上有3个的,2个的),所以程序无法为这个数组分配内存空间.


2,对于数组下标的使用,对于一个指定下标为4的数组,他的下标是0,1,2,3,这4个,而没有4.


3,rowsum(int table[][],int nrow)

table[3][4]是一个值,你的子函数需要获得一个数组,你却传一个值,显然编译器不会答应。

在参数中直接写,table就可以将数组传入。


#include<stdio.h>
void rowsum(int a[][4],int nrow)
{
    for(int i=0;i<nrow;i++)
    {
        for(int j=1;j<4;j++)
            a[i][0]+=a[i][j];
    }
}
void main()
{
    int table[3][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6}};//多维数组的定义需要多多注意,具体看问题1
        for(int i=0;i<3;i++)
        {
            for(int j=0;j<4;j++)
                printf("%d ",table[i][j]);
            printf("\n");
        }
        rowsum(table,3);//此处直接用table,即表示该数组
            for(i=0;i<3;i++)
                printf("sum of row%d is %d \n",i,table[i][0]);
        //  getch();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
龍__鳳
2013-05-21 · TA获得超过2346个赞
知道小有建树答主
回答量:948
采纳率:0%
帮助的人:1395万
展开全部
#include<stdio.h>
void rowsum(int a[][4],int nrow)
{
for(int i=0;i<nrow;i++)
{for(int j=1;j<4;j++)
a[i][0]+=a[i][j];
}
}
void main()
{int table[][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6}};//这里table[][4];
for(int i=0;i<3;i++)
{for(int j=0;j<4;j++)//这里j<4
printf("%d ",table[i][j]);
printf("\n");
}
rowsum(table,3);//这里table
for(i=0;i<3;i++)
printf("sum of row%d is %d \n",i,table[i][0]);
getch();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
落木叶潇潇
2013-05-21 · TA获得超过466个赞
知道小有建树答主
回答量:220
采纳率:100%
帮助的人:117万
展开全部
我看了下 错误应该是
1.二维数组的 行下标可以缺省 但是列下标不能缺
int table[3][]={{1,2,3,4},{2,3,4,5},{3,4,5,6}};错 改为
int table[][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6}};对
2.你的 数组下标超界了 数组的下标调用和定义有点区别
就像 int table[3][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6}};定义的是3行4列的数组table 但是他的下标 最大才是table[2][3]因为 他每个下标都是从0开始的 不是1
所以rowsum(table[3][4],3);错 改为
rowsum(table[2][3],3);对
应该就是 这些吧
=========================以上 个人手打 长时间没接触 只做参考 希望可以帮助到你!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
还说你不知道
2013-05-21
知道答主
回答量:60
采纳率:0%
帮助的人:16.1万
展开全部
数组是按行存放的所以定义数组时要知道每行要多长,这就必须定义列的长度,行的长度可以不确定。
在用数组作为函数参数(传递的是所有元素的情况)的时候,传递的是数组首地址,不能像那样写
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式