跪求!高手进!关于c语言编程问题急急急在线等

#include<stdio.h>main(){intn,j,k,i;printf("printthesize\n");scanf("%d\n",&n);intA[n][... #include <stdio.h>
main()
{
int n,j,k,i;

printf("print the size\n");
scanf("%d\n",&n);
int A[n][n];
int B[n][n];
int C[n][n];
for(j=0;j<n;j++)
for(k=0;k<n;k++)
{printf("A\n");
scanf("%d",&A[j][k]);
printf("B\n");
scanf("%d",&B[j][k]);}

for(i=0;i<n;i++)
{for(j=0;j<n;j++)
{ for(k=0;k<n;k++){
C[i][j]+=A[i][k]*B[k][j];}}}
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
{printf("%d",C[i][j]);
printf(" ");}
printf("\n");}
}
砸错了??
我运行不知道为啥错了
谢谢
展开
 我来答
风波示
2008-12-06 · TA获得超过300个赞
知道小有建树答主
回答量:137
采纳率:0%
帮助的人:108万
展开全部
数组这么定义没有问题
之所以会出错是因为你的C[i][j]没有初始化,
看了半天才看出来你是在做矩阵乘,下次建议你说明下,这么乱的程序让我们很难过。。。
你用到C[i][j]+=A[i][k]*B[k][j],所以C[i][j]必须要初始化,否则很容易越界。
修改的地方是在做加的第三层循环之前先对C[i][j]=0
改后的程序如下:
#include <stdio.h>
main()
{
int n,j,k,i;

printf("print the size\n");
scanf("%d",&n);
int A[n][n];
int B[n][n];
int C[n][n];
for(j=0;j<n;j++)
for(k=0;k<n;k++)
{
printf("A[%d][%d]=",j,k);
scanf("%d",&A[j][k]);
printf("B[%d][%d]=",j,k);
scanf("%d",&B[j][k]);
}

for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
C[i][j]=0;
for(k=0;k<n;k++)
{
C[i][j]+=A[i][k]*B[k][j];
printf("c[%d][%d]=%d\n",i,j,C[i][j]);
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("c[%d][%d]=%d",i,j,C[i][j]);
printf(" ");
}
printf("\n");
}
getch();
}
匿名用户
2008-12-06
展开全部
printf("print the size\n");
scanf("%d\n",&n);
int A[n][n];
int B[n][n];
int C[n][n];

C语言中不允许这样定义数组,如果需要在运行阶段才确定大小的数组,需要先定义指针,然后再用malloc()等函数分配空间,例如:

#include <stdlib.h>

int **A,**B,**C,n,i;
scanf("%d",&n);
A=(int **)malloc(sizeof(int *)*n);
B=(int **)malloc(sizeof(int *)*n);
C=(int **)malloc(sizeof(int *)*n);
for (i=0;i<n;++i)
{
A[i]=(int *)malloc(sizeof(int)*n);
B[i]=(int *)malloc(sizeof(int)*n);
C[i]=(int *)malloc(sizeof(int)*n);
}

/*之后可以按照操作表态数组的方法来操作这三个数组*/

for (i=0;i<n;++i)/*释放空间*/
{
free(A[i]);
free(B[i]);
free(C[i]);
}

free(A);
free(B);
free(C);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lytttttt
2008-12-06 · TA获得超过384个赞
知道小有建树答主
回答量:286
采纳率:0%
帮助的人:299万
展开全部
C语言中数组定义时,其下标不能是变量(既使是已赋值的变量),只能是常量。
就是说A[n][n],B[n][n],C[n][n]这样的定义是错的,n换成常数就行了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
星星有信心
2008-12-06 · TA获得超过647个赞
知道小有建树答主
回答量:516
采纳率:0%
帮助的人:572万
展开全部
楼上说的都不对,这样定义数组是可以,的。在谭浩强的树上专门有说到
int n;
scanf("%d"&n);
int a[n]
是 允许的,不违背先定义 后使用
问题是出在后边的循环上。我下午要考试,现在看书去了。晚上再帮你仔细看看的~^*^
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liuwen8513834
2008-12-06
知道答主
回答量:17
采纳率:0%
帮助的人:0
展开全部
一楼和二楼的回答是正确的。是可以像inta[n][n],但是你后面要循环的输进数组,for(i=0;i<n;i++)这样就不对了,要像这样输进数组的话你前面的int[n][n]就要写成一个具体的数字了。。像int[5][5];下面的用循环for(i=0;i<5;i++)输进数组的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式