【发布时间】:2018-02-26 19:48:21
【问题描述】:
我试图将这两个矩阵作为键盘的输入,然后尝试使用 C 函数在屏幕上打印出它们的总和。我已经对这段代码感到麻木了好几个小时,但仍然不知道我哪里出错了。它打印了两个完美的矩阵,但并没有完美地总结它们。虽然它完美地总结了第一行,但没有正确总结其余的行。
Output is attached。在屏幕截图中,显示了实际输出以及我想要的所需输出用红色进行了 photoshop 处理。
#include <stdio.h>
#include <conio.h>
void main(void)
{
int i,j,order,a[5][5],b[5][5],sum[5][5];
clrscr();
printf("Enter the order of matrix: ");
scanf("%d",&order);
inputmatrixA(&a[0][0],order);
printmatrixA(&a[0][0],order);
inputmatrixB(&b[0][0],order);
printmatrixB(&b[0][0],order);
for (i=0;i<order;i++)
{
for(j=0;j<order;j++)
{
sum[i][j]=a[i][j]+b[i][j];
}
}
printf("Sum of A & B\n");
for (i=0;i<order;i++)
{
for(j=0;j<order;j++)
{
printf("%d\t",sum[i][j]);
}
printf("\n");
}
getch();
}
inputmatrixA(int *p,int order)
{
int i,j;
for (i=0;i<order;i++)
{
for (j=0;j<order;j++)
{
printf("Enter a[%d][%d]: ",i+1,j+1);
scanf("%d",p);
p++;
}
}
}
printmatrixA(int *p,int order)
{
int i,j;
printf("Matrix A\n");
for (i=0;i<order;i++)
{
for (j=0;j<order;j++)
{
printf("%d\t",*p);
p++;
}
printf("\n");
}
}
inputmatrixB(int *q,int order)
{
int i,j;
for (i=0;i<order;i++)
{
for (j=0;j<order;j++)
{
printf("Enter b[%d][%d]: ",i+1,j+1);
scanf("%d",q);
q++;
}
}
}
printmatrixB(int *q,int order)
{
int i,j;
printf("Matrix B\n");
for (i=0;i<order;i++)
{
for (j=0;j<order;j++)
{
printf("%d\t",*q);
q++;
}
printf("\n");
}
}
【问题讨论】:
-
您对二维数组衰减为指针类型做出了错误的假设 - 希望有人会详细回答。如果没有,谷歌“二维数组到指针的衰减”。
-
请显示示例输入、结果输出、所需输出并解释它们的问题。
-
您是否注意到您的编辑撤销了其他读者的两个有用的(抱歉这么说我的)编辑?请更加小心您的编辑。还请考虑直接在此处提供文本数据作为文本,而不是链接到文本图片...
-
关于:
printf("Enter the order of matrix: "); scanf("%d",&order);没有什么能阻止用户输入更大的值,比如 10。没有任何东西检查用户输入以确保它在 1...5 的范围内跨度> -
强烈建议使用 VLA(可变长度数组)功能,即 I.E.在用户输入“订单”之前不要声明数组的大小
标签: c function multidimensional-array