![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
我C语言两个3*3的矩阵相乘为什么“乘丢了”一行,变成3*2的了?求支援!
程序目的:将二维数组中的字母转化为相应数字再和另一个3*3的矩阵相乘(这里以单位矩阵为例)得到一个新的矩阵。源程序:#include<stdio.h>voidmain()...
程序目的:将二维数组中的字母转化为相应数字再和另一个3*3的矩阵相乘(这里以单位矩阵为例)得到一个新的矩阵。
源程序:#include<stdio.h>
void main()
{
char source[3][3];
int i;
int j;
printf("Please input words.\n");
for(i=0;i<3;i=i+1)
scanf("%s",source[i]);
for(i=0;i<3;i=i+1)
{
for(j=0;j<3;j=j+1)
{
if(source[i][j]=='A'||source[i][j]=='a')
{
(int)source[i][j];
source[i][j]=1;
}
else if(source[i][j]=='B'||source[i][j]=='b')
{
(int)source[i][j];
source[i][j]=2;
(此处以下省略将C(c)~Y(y)转化为3~25的代码)
else if(source[i][j]=='Z'||source[i][j]=='z')
{
(int)source[i][j];
source[i][j]=26;
}
else
{
printf("Error!\n");
getchar();
}
}
}
int code[3][3]={{1,0,0},{0,1,0},{0,0,1}};
int m,n,final[3][3];
for(m=0;m<3;m=m+1)
{
for(n=0;n<3;n=n+1)
{
final[m][n]=source[m][0]*code[0][n]+source[m][1]*code[1][n]+source[m][2]*code[2][n];
printf("%d",final[m][n]);
}
printf("\n");
getchar();
}
}
运行时输入:
abc
def
ghi
预期结果为:
123
456
789
但实际运行结果为:
123
456
请问矩阵第三行哪去了啊!!!求解!!! 展开
源程序:#include<stdio.h>
void main()
{
char source[3][3];
int i;
int j;
printf("Please input words.\n");
for(i=0;i<3;i=i+1)
scanf("%s",source[i]);
for(i=0;i<3;i=i+1)
{
for(j=0;j<3;j=j+1)
{
if(source[i][j]=='A'||source[i][j]=='a')
{
(int)source[i][j];
source[i][j]=1;
}
else if(source[i][j]=='B'||source[i][j]=='b')
{
(int)source[i][j];
source[i][j]=2;
(此处以下省略将C(c)~Y(y)转化为3~25的代码)
else if(source[i][j]=='Z'||source[i][j]=='z')
{
(int)source[i][j];
source[i][j]=26;
}
else
{
printf("Error!\n");
getchar();
}
}
}
int code[3][3]={{1,0,0},{0,1,0},{0,0,1}};
int m,n,final[3][3];
for(m=0;m<3;m=m+1)
{
for(n=0;n<3;n=n+1)
{
final[m][n]=source[m][0]*code[0][n]+source[m][1]*code[1][n]+source[m][2]*code[2][n];
printf("%d",final[m][n]);
}
printf("\n");
getchar();
}
}
运行时输入:
abc
def
ghi
预期结果为:
123
456
789
但实际运行结果为:
123
456
请问矩阵第三行哪去了啊!!!求解!!! 展开
2015-12-05
展开全部
for(i=0;i<3;i=i+1)
{
for(j=0;j<3;j=j+1)
{
if(source[i][j]=='A'||source[i][j]=='a')
{
(int)source[i][j];//这并没有什么卵用,(int)根本转不了它实际的类型
source[i][j]=1;
}
//...写26个这太坑爹了吧...用ASCII减去就行了吧
/*
if(source[i][j]<='Z'&&source[i][j]>='A')
source[i][j]-=64;
else if(source[i][j]<='z'&&source[i][j]>='a')
source[i][j]-=96;
*/
}
}
///////////////////////////////////////////////////////////////////////
//你这样写,不可能会少了一行,因为你算的就是3*3=9个数字。
int code[3][3]={{1,0,0},{0,1,0},{0,0,1}};
int m,n,i,final[3][3]={0};
for(m=0;m<3;m++)
{
for(n=0;n<3;n++)
{
for(i=0;i<3;i++)
{
final[m][n]+=source[m][i]*code[i][n];
printf("%d",final[m][n]);
}
}
printf("\n");
}
追问
何止坑爹。。。
不过强制类型转换还是有那么一点点卵用地,没加这句前输出的是
979899
101102103
(不错。。。还是ASCII)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-12-05
展开全部
被倒数第三行的getchar();给吃掉了,把它删除了就能打出三行来。
更多追问追答
追问
按你说的圆满解决,漂亮!
但为什么getchar()能把矩阵第三行吃了???
追答
不清楚,我这里只能显示一行,但是回车后会显示第二行,再回车会显示第三行。把getchar()删除掉就全能显示出来了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询