关于求矩阵的乘的程序改错问题
#include <stdio.h>#define M 3
#define N 3
#define K 2
void main()
{
int i,j,s; //i,j为矩阵相应位置的行、列数,s控制循环
double a[M][N];
double b[N][K];
double c[M][K];
printf("请为a矩阵输入数:\n");
for(i=0;i<=M-1;i++)
{
for(j=0;j<=N-1;j++)
{
scanf("%ld",&a[i][j]);
printf(" \n");
}
printf("\n");
}
printf("请为b矩阵输入数:\n");
for(i=0;i<=M-1;i++)
{
for(j=0;j<=K-1;j++)
{
scanf("%ld",&b[i][j]);
printf(" ");
}
printf("\n");
}
for(i=0;i<=M-1;i++) //计算C矩阵
{
for(j=0;j<=K-1;j++)
{
for(s=0;s<=N-1;s++)
{
c[i][j]+=a[i][s]*b[s][j];
}
}
}
for(i=0;i<=M-1;i++) //输出C矩阵
{
for(j=0;j<=K-1;j++)
{
printf("%ld",c[i][j]);
printf(" \n");
}
printf("\n");
}
}
程序的立意是可以通过对定义量的改变来求任意阶矩阵的乘,且稍加改动后可以作为子函数模块方便以后求任意个矩阵相乘及求矩阵的逆。
问题:
1:在为b矩阵输入数时,只在输入第一个数后会有退格,而按照循环结构的话应该在循环内输出的每一个数后都会有退格的,何解?(原来为a矩阵输入数时也有这种情况,我疑心是我的循环设置不对,所以将代码修改成如上形式,发现循环还是按规定执行了的,那么为什么就不能完成退格?)
2:在构思时之所以加上退格的设计是希望能够使输入的数凑成个矩阵的样子,但后来调试时无奈的发现每次敲完回车送数据时都会自动垂直下降一行,有没有办法让程序执行到这时再自动上升一行?(在发问前有在网上搜索别人的这类程序,然后发现可以在后面再加个printf语句输出成形的矩阵,但还是想知道有没有办法在输入时就使其成形。另,本来在设计时还打算加上边框,但考虑到复杂性,就暂时没加了,有没有除了使用printf语句外的其他能让初学者理解的好方法?)
3:在敲完数据时,命令框急速的闪过一些数据后便自动关掉了,这是这么回事?我都还来不及检验输出结果是否正确;
4:输出的数据类型格式,如何给双精度类型限定?如我想要一个3位整数,两位小数的浮点型数据我可以使用 %3.2f,如果是对双精度类型应如何进行此类操作?
5:我上面所写代码还有哪些可优化之处?
烦请各位指点,拜谢!