先飞的笨鸟1 2016-06-26 09:41 采纳率: 0%
浏览 1208

求大神看看这个程序哪里出问题了

#include
#define M 20
#define N 20
double A[M][N],B[M][N],C[M][N];
int i,j,m,n,p,q,k;
int main()
{
printf("******************************************************************\n");
printf("###########欢迎您使用矩阵函数系统.##########\n");
printf("##########系统功能:##########\n");
while(1)
{
printf("#####请选择您需要的运算,按回车结束.#####\n");
printf("***1. 矩阵相加\n");
printf("***2. 矩阵相减\n");
printf("***3. 矩阵相乘\n");
printf("***4. 单矩阵转置\n");
printf("***5. 退出\n");
printf("******************************************************************\n");
int a;
scanf("%d",&a);
if(a==5) break;
switch(a)
{
case 1:
{
printf("请输入矩阵A的行数和列数(用逗号隔开):");
scanf("%d,%d",&i,&j);
printf("请输入矩阵B的行数和列数(用逗号隔开):");
scanf("%d,%d",&m,&n);
if(i!=m||j!=n)
{
printf("***对不起,您输入两个矩阵不能相加,请重试.***\n");
printf ("请重新输入矩阵B的行数和列数(用逗号隔开):\n");
scanf("%d,%d",&m,&n);
}
printf("请输入矩阵A:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
scanf("%lf",&A[p][q]);
}
printf("输出矩阵A:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
{

printf("%10.2lf",A[p][q]);
if((q+1)%j==0)
printf("\n");

}
}
printf("请输入矩阵B:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
scanf("%lf",&B[p][q]);
}
printf("输出矩阵B:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
{
printf("%10.2lf",B[p][q]);
if((q+1)%j==0)
{
printf("\n");
}

            } 
        }
        printf("矩阵A+矩阵B为:\n");
        for(p=0;p<i;p++)
        {
        for(q=0;q<j;q++) 
        C[p][q]=A[p][q]+B[p][q];
        }
        for(p=0;p<i;p++)
        {
        for(q=0;q<j;q++) 
            { 
            printf("%10.2lf",C[p][q]); 
            if((q+1)%j==0) 
            {
            printf("\n"); 
            }
        }
        }
        };break;  
    case 2:
        {
        printf("请输入矩阵A的行数和列数(用逗号隔开):");
        scanf("%d,%d",&i,&j);
        printf("请输入矩阵B的行数和列数(用逗号隔开):");
        scanf("%d,%d",&m,&n);
        if(i!=m||j!=n)
            {
            printf("***对不起,您输入两个矩阵不能相加,请重试.***\n");
            printf ("请重新输入矩阵B的行数和列数(用逗号隔开):\n");
            scanf("%d,%d",&m,&n);
            }
        printf("请输入矩阵A:\n");
        for(p=0;p<i;p++)
        {
        for(q=0;q<j;q++)
        scanf("%lf",&A[p][q]);
        }
        printf("输出矩阵A:\n");
        for(p=0;p<i;p++)
        {
        for(q=0;q<j;q++)
            {
            printf("%10.2lf",A[p][q]);
            if((q+1)%j==0)
            {
            printf("\n");
            }
        }
        }
        printf("请输入矩阵B:\n");
        for(p=0;p<i;p++)
        {
        for(q=0;q<j;q++)
        scanf("%lf",&B[p][q]);
        }
        printf("输出矩阵B:\n");
        for(p=0;p<i;p++)
        {
        for(q=0;q<j;q++)
            {
            printf("%10.2lf",B[p][q]);
            if((q+1)%j==0)
            {
            printf("\n");
            }
        }
        }
        printf("矩阵A-矩阵B为:\n");
        for(p=0;p<i;p++)
        {
        for(q=0;q<j;q++)
        C[p][q]=A[p][q]-B[p][q];
        }
        for(p=0;p<i;p++)
        {
        for(q=0;q<j;q++)
            {
            printf("%10.2lf",C[p][q]); 
            if((q+1)%j==0)
            {
            printf("\n");
            }
        }
        }
        };break;
    case 3:
        {
        printf("请输入矩阵A的行数和列数(用逗号隔开):");
        scanf("%d,%d",&i,&j);
        printf("请输入矩阵B的行数和列数(用逗号隔开):");
        scanf("%d,%d",&m,&n);
        if( j != m)
            {
            printf("***对不起,您输入两个矩阵不能相乘,请重试.***\n");
            printf ("请重新输入矩阵B的行数和列数(用逗号隔开):\n");
            scanf("%d,%d",&m,&n); 
            }
        printf("请输入矩阵A:\n");
        for(p=0;p<i;p++)
        {
        for(q=0;q<j;q++)
            scanf("%lf",&A[p][q]);
        }
            printf("输出矩阵A:\n");
            for(p=0;p<i;p++)
        {
        for(q=0;q<j;q++)
                {
                printf("%10.2lf",A[p][q]);
             if((q+1)%j==0)
                {
                printf("\n");
                }
            }
        }
            printf("请输入矩阵B:\n"); 
        for(p=0;p<i;p++) 
        {
        for(q=0;q<j;q++) 
        scanf("%lf",&B[p][q]); 
        }
        printf("输出矩阵B:\n"); 
        for(p=0;p<i;p++) 
        {
        for(q=0;q<j;q++) 
            {
                printf("%10.2lf",B[p][q]);
            if ((q+1)%j==0)
                {
                printf("\n");
                }
            }
        } 
            printf("矩阵A*矩阵B为:\n");
            for(p=0;p<i;p++)
            { 
            for(q=0;q<n;q++)
                {
                C[p][q]=0;
                for(k=0;k<j;k++)
                {
                C[p][q]+=A[p][k]*B[k][q]; 
                }   
            }
            }
            for(p=0;p<i;p++)
                {
                for(q=0;q<n;q++)
                {
                printf("%10.2lf",C[p][q]);
                if((q+1)%n==0)
             {
                printf("\n");
                } 
                }
            }
            } ;break;
            case 4:
            {
            printf("请输入矩阵A的行数和列数(用逗号隔开):"); 
            scanf("%d,%d",&i,&j); 
            printf("请输入矩阵A:\n");
            for(p=0;p<i;p++)
            { 
            for(q=0;q<j;q++)
            scanf("%lf",&A[p][q]);
            } 
            printf("输出矩阵A:\n");
            for(p=0;p<i;p++)
            { 
            for(q=0;q<j;q++)
                {
                printf("%10.2lf",A[p][q]);
                if((q+1)%j==0)
                {
                printf("\n");
                } 
                }
            } 
            for(p=0;p<i;p++)
            { 
            for(q=0;q<j;q++)
            B[q][p]=A[p][q];
            } 
            printf("输出矩阵A的转置矩阵:\n");
            for(p=0;p<j;p++)
            { 
            for(q=0;q<i;q++) 
                {
                printf("%10.2lf",B[p][q]);
                if((q+1)%i==0)
                {
                printf("\n");
                }
            }
            } 
            };break;
        case 5:
            ;break;
        default:
            printf("\n********您选择错误,请重试.********\n"); 
            break;      
        } 
}
printf("#########再次感谢您使用本系统,合作愉快!############"); 
printf("\n"); 
printf("******************************************************************\n");   
return 0;

}图片说明

  • 写回答

1条回答 默认 最新

  • yue1123 2016-06-26 10:27
    关注

    printf("请输入矩阵B:\n");
    for(p=0;p<i;p++)
    {
    for(q=0;q<j;q++)
    scanf("%lf",&B[p][q]);
    }
    你这里输入B矩阵时,for循环里面要用m和n变量。i和j是矩阵A的变量。
    另外,矩阵A跟矩阵B相乘要求A的行数等于B的列数。你在前面
    if( j != m)
    {
    printf("***对不起,您输入两个矩阵不能相乘,请重试.***\n");
    printf ("请重新输入矩阵B的行数和列数(用逗号隔开):\n");
    scanf("%d,%d",&m,&n);
    }
    这里也用错变量了。
    http://baike.baidu.com/view/2455255.htm

    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大