|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 顶级太阳 于 2022-9-27 08:18 编辑
这个矩阵输出考虑了一段时间了,最终还是抄袭了小甲鱼的在s1e20的输出方式,结果怎么改也不能按照要求的格式输出。求助我错在哪里。
#include<stdio.h>
int main()
{
int m,n,p,q;
int i,j,k,x,row;
printf("请输入第一个矩阵的尺寸(M*P);");
scanf("%d",&m);
getchar();
scanf("%d",&p);
printf("请输入第二个矩阵的尺寸(P*N);");
scanf("%d",&q);
getchar();
scanf("%d",&n);
if(p!=q)printf("矩阵尺寸不能计算");
int array1[m][p];
printf("请输入第一个矩阵的值:\n");
for(i=0;i<m;i++)
{
for(j=0;j<p;j++)
{
scanf("%d",&array1[i][j]);
}
getchar();
}
//临时检查用输出
//输出第一个矩阵值
//printf("第一个矩阵值\n");
//for(i=0;i<m;i++)
//{
// for(j=0;j<p;j++)
// {
// printf("%d ", array1[i][j]);
// }
// printf("\n");
//}
printf("请输入第二个矩阵的值:\n");
int array2[p][n];
for(i=0;i<p;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&array2[i][j]);
}
getchar();
}
//临时检查输入用,输出第二个矩阵值
//printf("第二个矩阵值\n");
//for(i=0;i<p;i++)
//{
// for(j=0;j<n;j++)
// {
// printf("%d ",array2[i][j]);
// }
// printf("\n");
//}
//计算矩阵值
int array3[m][n];
for(i=0;i<m;i++) //矩阵赋初值为0
{
for(j=0;j<n;j++)
{
array3[i][j]=0;
}
}
for(i=0;i<m;i++) //矩阵相乘计算
{
for(j=0;j<n;j++)
{
for(k=0;k<p;k++)
{
array3[i][j]+=array1[i][k]*array2[k][j];
}
}
}
//检查输出运算结果矩阵值
//printf("第三个矩阵计算结果\n");
//for(i=0;i<m;i++)
//{
// for(j=0;j<n;j++)
// {
// printf("%d ",array3[i][j]);
// }
// printf("\n");
//}
//输出
row=m>p?m:p;
for(i=0;i<row;i++)
{
//打印第一个矩阵行
printf("| ");
for(j=0;j<p;j++)
{
if(i<m)
{
printf("\b%d ",array1[i][j]);
printf("|");
}
else
{
printf("\b\b ");
for(k=0;k<p;k++)printf("\b ");
}
}
//打印*号
if(i==row/2)
{
printf(" * ");
}
else
{
printf(" " );
}
//打印第二个矩阵行
printf("| ");
for(j=0;j<n;j++)
{
if(i<p)
{
printf("\b%d ",array2[i][j]);
printf("|");
}
else
{
printf("\b\b ");
for(k=0;k<j;k++)printf(" ");
}
}
//打印=号
if(i==row/2)
{
printf(" = ");
}
else
{
printf(" ");
}
//打印第三个矩阵行
printf("| ");
for(j=0;j<n;j++)
{
if(i<m)
{
printf("\b%d ",array3[i][j]);
printf("|");
}
else
{
printf("\b\b\b ");
}
}
printf("\n");
}
return 0;
}
代码前面就不说了,只看最后的结果输出怎么处理,谢谢。
上面是要求的矩阵输出格式,下面的截屏是我的结果,第二个矩阵输出一直对不正,我怀疑是第一个矩阵输出出了问题,但是找不到呀。求教了。
本帖最后由 jackz007 于 2022-9-27 15:47 编辑
把输出部分做了修改,自己对号入座吧 //输出
row = m > p ? m : p ;
for(i = 0 ; i < row ; i ++) {
//打印第一个矩阵行
printf("| ") ;
for(j = 0 ; j < p ; j ++) {
if(i < m) printf("\b%d |" , array1[i][j]) ;
else printf("\b\b\b ") ;
}
//打印*号
if(i == row / 2) printf(" * ") ;
else printf(" ") ;
//打印第二个矩阵行
printf("| ") ;
for(j = 0 ; j < n ; j ++) {
if(i < p) printf("\b%d |" , array2[i][j]) ;
else printf("\b\b\b ") ;
}
//打印=号
if(i == row / 2) printf(" = ") ;
else printf(" ") ;
//打印第三个矩阵行
printf("| ") ;
for(j = 0 ; j < n ; j ++) {
if(i < m) printf("\b%2d |" , array3[i][j]) ;
else printf("\b\b\b ") ;
}
printf("\n") ;
}
return 0 ;
}
【另一个版本】- 不使用 '\b',容易把人绕晕。
完整代码如下 #include <stdio.h>
int main(void)
{
int m , n , p , q ;
int i , j , k , x , row ;
printf("请输入第一个矩阵的尺寸(M*P) : ") ;
scanf("%d*%d" , & m , & p) ;
printf("请输入第二个矩阵的尺寸(P*N) : ") ;
scanf("%d*%d" , & q , & n) ;
if(p != q) printf("矩阵尺寸不能计算") ;
int array1[m][p] , array2[p][n] , array3[m][n] ;
printf("请输入第一个矩阵的值:\n") ;
for(i = 0 ; i < m ; i ++) for(j = 0 ; j < p ; j ++) scanf("%d" , & array1[i][j]) ;
printf("请输入第二个矩阵的值:\n") ;
for(i = 0 ; i < p ; i ++) for(j = 0 ; j < n ; j ++) scanf("%d" , & array2[i][j]) ;
//计算矩阵值
for(i = 0 ; i < m ; i ++) for(j = 0 ; j < n ; j ++) array3[i][j] = 0 ;
//矩阵相乘计算
for(i = 0 ; i < m ; i ++) {
for(j = 0 ; j < n ; j ++) {
for(k = 0 ; k < p ; k ++) {
array3[i][j] += array1[i][k] * array2[k][j] ;
}
}
}
//输出 - 【重写】- 由此向下完全重写
row = m > p ? m : p ;
for(i = 0 ; i < row ; i ++) {
//打印第一个矩阵行
if(i < m) printf("| %d" , array1[i][0]) ;
else printf(" ") ;
for(j = 1 ; j < p ; j ++) {
if(i < m) printf(" %d" , array1[i][j]) ;
else printf(" ") ;
}
if(i < m) printf(" |") ;
else printf(" ") ;
//打印*号
if(i == row / 2) printf(" * ") ;
else printf(" " ) ;
//打印第二个矩阵行
if(i < p) printf("| %d" , array2[i][0]) ;
else printf(" ") ;
for(j = 1 ; j < n ; j ++) {
if(i < p) printf(" %d" , array2[i][j]) ;
else printf(" ") ;
}
if(i < p) printf(" |") ;
else printf(" ") ;
//打印=号
if(i == row / 2) printf(" = ") ;
else printf(" ") ;
//打印第三个矩阵行
if(i < m) printf("| %2d" , array3[i][0]) ;
else printf(" ") ;
for(j = 0 ; j < n ; j ++) {
if(i < m) printf(" %2d" , array3[i][j]) ;
else printf(" ") ;
}
if(i < m) printf(" |") ;
else printf(" ") ;
printf("\n") ;
}
}
编译、运行实况: D:\[00.Exerciese.2022]\C>g++ -o x x.c
D:\[00.Exerciese.2022]\C>x
请输入第一个矩阵的尺寸(M*P) : 4*5
请输入第二个矩阵的尺寸(P*N) : 5*8
请输入第一个矩阵的值:
1 2 3 4 5
2 2 2 2 2
3 3 3 3 3
5 4 3 2 1
请输入第二个矩阵的值:
8 7 6 5 4 3 2 1
1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3
1 2 3 4 5 6 7 8
| 1 2 3 4 5 | | 8 7 6 5 4 3 2 1 | | 33 33 37 41 45 49 53 57 61 |
| 2 2 2 2 2 | | 1 1 1 1 1 1 1 1 | | 30 30 30 30 30 30 30 30 30 |
| 3 3 3 3 3 | * | 2 2 2 2 2 2 2 2 | = | 45 45 45 45 45 45 45 45 45 |
| 5 4 3 2 1 | | 3 3 3 3 3 3 3 3 | | 57 57 53 49 45 41 37 33 29 |
| 1 2 3 4 5 6 7 8 |
D:\[00.Exerciese.2022]\C>
|
|