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();
}
谢谢 展开
#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();
}
谢谢 展开
5个回答
展开全部
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]);
修改为:
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]);
展开全部
问题:
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();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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();
}
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();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我看了下 错误应该是
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);对
应该就是 这些吧
=========================以上 个人手打 长时间没接触 只做参考 希望可以帮助到你!
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);对
应该就是 这些吧
=========================以上 个人手打 长时间没接触 只做参考 希望可以帮助到你!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组是按行存放的所以定义数组时要知道每行要多长,这就必须定义列的长度,行的长度可以不确定。
在用数组作为函数参数(传递的是所有元素的情况)的时候,传递的是数组首地址,不能像那样写
在用数组作为函数参数(传递的是所有元素的情况)的时候,传递的是数组首地址,不能像那样写
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询