|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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>
复制代码
|
|