签到

05月06日
尚未签到

共有回帖数 0

    我们会发光

    等级:
    纯C语言编写矩阵函数包(矩阵的加,减,乘,转置矩阵,逆矩阵)
    #includestdio.h
    #define M 20
    #define N 20
    float  A[M][N];
    float  B[M][N];
    float  C[M][N];
    int i,j,m,n,p,q;
    float  y=1.0;
    void main()
    {
    printf("           ###########################################n");
    printf("           #####   欢迎您使用矩阵函数包系统。   ######n");
    printf("           #####   系统功能:                    ######n");
    printf("           #####      计算两个矩阵相加,相减;    ######n");
    printf("           #####      数乘矩阵;矩阵转置;求逆   ######n");
    printf("           #####      矩阵                      ######n");
    printf("           ###########################################n");
    printf("请选择您需要的运算,按回车键结束n");
    printf("******************************************************************n");
    printf("1,矩阵相加n");
    printf("2,矩阵相减n");
    printf("3,数乘矩阵n");
    printf("4,矩阵转置n");
    printf("5,逆矩阵  n");
    printf("6,退出    n");
    printf("******************************************************************n");
    int x;
    scanf("%d",&x);
    switch (x)
    {
    case 1:
    {
    printf("请输入矩阵A的行数和列数(用逗号隔开):");
    scanf("%d,%d",&i,&j);
    printf("请输入矩阵B的行数和列数(用逗号隔开):") ;
    scanf("%d,%d",&m,&n);
    if(i!=m||j!=n)
    printf("***对不起,您输入的两个矩阵不能相加,请重试.***n");
    else printf("请输入矩阵A:n");
    for(p=0;pi;p++)
    for(q=0;qj;q++)
    scanf("%f",&A[p][q]);
    printf("输出矩阵A:n");
    for(p=0;pi;p++)
    for(q=0;qj;q++)
    {  
    printf("%10.2f",A[p][q]);
    if((q+1)%j==0)
    printf("n");    
    }
    printf("请输入矩阵B:n");
    for(p=0;pi;p++)
    for(q=0;qj;q++)
    scanf("%f",&B[p][q]);

    printf("输出矩阵B:n");
    for(p=0;pi;p++)
    for(q=0;qj;q++)
    {  
    printf("%10.2f",B[p][q]);
    if((q+1)%j==0)
    printf("n");    
    }
    printf("矩阵A+矩阵B为:n");     //计算两个矩阵相加
    for(p=0;pi;p++)
    for(q=0;qj;q++)
    C[p][q]=A[p][q]+B[p][q];
    for(p=0;pi;p++)
    for(q=0;qj;q++)
    {
    printf("%10.2f",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");
    else printf("请输入矩阵A:n");
    for(p=0;pi;p++)
    for(q=0;qj;q++)
    scanf("%f",&A[p][q]);
    printf("输出矩阵A:n");
    for(p=0;pi;p++)
    for(q=0;qj;q++)
    {  
    printf("%10.2f",A[p][q]);
    if((q+1)%j==0)
    printf("n");    
    }
    printf("请输入矩阵B:n");
    for(p=0;pi;p++)
    for(q=0;qj;q++)
    scanf("%f",&B[p][q]);
    printf("输出第矩阵B:n");
    for(p=0;pi;p++)
    for(q=0;qj;q++)
    {  
    printf("%10.2f",B[p][q]);
    if((q+1)%j==0)
    printf("n");    
    }
    printf("矩阵A-矩阵B为:n");        //计算两个矩阵相减
    for(p=0;pi;p++)
    for(q=0;qj;q++)
    C[p][q]=A[p][q]-B[p][q];
    for(p=0;pi;p++)
    for(q=0;qj;q++)
    {
    printf("%10.2f",C[p][q]);
    if((q+1)%j==0)
    printf("n");
    }
    };break;  
    case 3:

    {
    float k;
    printf("请输入矩阵A的行数和列数(用逗号隔开):");
    scanf("%d,%d",&i,&j);
    printf("请输入矩阵An");
    for(p=0;pi;p++)
    for(q=0;qj;q++)
    scanf("%f",&A[p][q]);
    printf("输出矩阵An");
    for(p=0;pi;p++)
    for(q=0;qj;q++)
    {  
    printf("%10.2f",A[p][q]);
    if((q+1)%j==0)
    printf("n");    
    }  
    printf("请输入一个实数:n");
    scanf("%f",&k);
    for(p=0;pi;p++)                       //数乘矩阵

    for(q=0;qj;q++)
    B[p][q]=k*A[p][q];
    printf("输出k乘矩阵A的结果n");
    for(p=0;pi;p++)
    for(q=0;qj;q++)
    {  
    printf("%10.2f",B[p][q]);
    if((q+1)%j==0)
    printf("n");    
    }
    };break;  
    case 4:

    {
    printf("请输入矩阵A的行数和列数(用逗号隔开):");
    scanf("%d,%d",&i,&j);
    printf("请输入矩阵A:n");
    for(p=0;pi;p++)
    for(q=0;qj;q++)
    scanf("%f",&A[p][q]);
    printf("输出矩阵An");
    for(p=0;pi;p++)
    for(q=0;qj;q++)
    {  
    printf("%10.2f",A[p][q]);
    if((q+1)%j==0)
    printf("n");    
    }
    for(p=0;pi;p++)                    //转置
    for(q=0;qj;q++)
    B[q][p]=A[p][q];
    printf("输出矩阵A的转置矩阵:n");
    for(p=0;pj;p++)
    for(q=0;qi;q++)
    {  
    printf("%10.2f",B[p][q]);
    if((q+1)%i==0)
    printf("n");
    }
    }
    ;break;  
    case 5:  
    float a[M][2*M];  
    float b[N][2*N];  
    float t,x;  
    int k,T;  
    printf("输入方阵的维数:n");     //请输入方阵,即行和列相等的矩阵。
    scanf("%d",&T);
    printf("请输入矩阵:n");
    for(i=0;iT;i++)  
    for (j=0;jT;j++)  
    scanf("%f",&b[j]);  
    printf("原矩阵为:n");  
    for (i=0;iT;i++)  
    {  
    for (j=0;jT;j++)    
    printf("%10.3f",b[j]);  
    printf("n");  
    }
    for(i=0;iT;i++)  
    for(j=0;j(2*T);j++)  
    { if (jT)  
    a[j]=b[j];  
    else if (j==T+i)  
    a[j]=1.0;  
    else  
    a[j]=0.0;  
    }
    for(i=0;iT;i++)
    {
    for(k=0;kT;k++)
    {
    if(k!=i)
    {
    t=a[k]/a;
    for(j=0;j(2*T);j++)
    {
    x=a[j]*t;
    a[k][j]=a[k][j]-x;
    }
    }
    }
    }
    for(i=0;iT;i++)
    {
    t=a;
    for(j=0;j(2*T);j++)
    a[j]=a[j]/t;
    }

                   for(i=0;iT;i++)  
    y=y*a;
    if(y==0)
    printf("对不起,您输入的矩阵没有逆矩阵,请重新输入。n");
    else    
    {
    for(i=0;iT;i++)  
    for(j=0;jT;j++)
    b[j]=a[j+T];
    printf("逆矩阵为:n");  
    for (i=0;iT;i++)  
    {  
    for (j=0;jT;j++)    
    printf("%10.3f",b[j]);  
    printf("n");  
    }  
    };break;  
    case 6:;break;
       default:
    printf("n********您选择错误,请重试.********n");
    break;
    }
    printf("#########再次感谢您使用本系统,合作愉快!############");
    printf("n");
    printf("******************************************************************n");
    }

    楼主 2016-04-15 09:31 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知