矩阵操作

来源:互联网 发布:网络布线桥架 编辑:程序博客网 时间:2024/05/17 21:28

#include<stdio.h>
int m1,n1,m2,n2;
int Plus(int a[][101],int b[][101])//矩阵加法函数
{
    int i,j;
    for(i=0; i<m1; i++)
    {
        for(j=0; j<n1; j++)
        {
            a[i][j]=a[i][j]+b[i][j];
        }
    }
    printf("矩阵a和b相加得:\n");
    for(i=0; i<m1; i++)
    {
        for(j=0; j<n1; j++)
        {
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
}
int Sub(int a[][101],int b[][101])//矩阵减法函数
{
    int i,j,c[101][101];
    for(i=0; i<m1; i++)
    {
        for(j=0; j<n1; j++)
        {
            a[i][j]=a[i][j]-b[i][j];
        }
    }
    printf("矩阵a和b相减得:\n");
    for(i=0; i<m1; i++)
    {
        for(j=0; j<n1; j++)
        {
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
}
int Multi(int a[][101],int b[][101])//矩阵相乘函数
{
    int i,j,k,c[101][101];
    for(i=0; i<m1; i++)
    {
        for(j=0; j<n2; j++)
        {
            c[i][j]=0;
            for(k=0; k<m2; k++)
            {
                c[i][j]=c[i][j]+a[i][k]*b[k][j];
            }
        }
    }
    printf("矩阵a和b相乘得:\n");
    for(i=0; i<m1; i++)
    {
        for(j=0; j<n2; j++)
        {
            printf("%d ",c[i][j]);
        }
        printf("\n");
    }
}
void Swap(int p[][101],int a,int b)//矩阵转置函数
{
    int i,j,t;
    for(i=0; i<a; i++)
    {
        if(a<b||a==b)
            for(j=i+1; j<b; j++)
            {
                t=p[i][j];
                p[i][j]=p[j][i];
                p[j][i]=t;
            }
        else
            for(j=0; j<i; j++)
            {
                t=p[i][j];
                p[i][j]=p[j][i];
                p[j][i]=t;
            }
    }
    for(i=0; i<b; i++)
    {
        for(j=0; j<a; j++)
        {
            printf("%d ",p[i][j]);
        }
        printf("\n");

    }
}
Fix(int a[][101],int b[][101])
{
    int i,j,s,x,y;
    {
            printf("请输入要更改的矩阵:");
            getchar();
            char q=getchar();
            if(q=='a')
            {
                printf("请输入要更改的元素下标:");
                scanf("%d%d",&x,&y);
                printf("请输入要更改成的值:");
                scanf("%d",&a[x][y]);
                printf("更改成功!\n");
                for(i=0; i<m1; i++)
                {
                    for(j=0; j<n1; j++)
                    {
                        printf("%d ",a[i][j]);
                    }
                    printf("\n");

                }
            }
            else if(q=='b')
            {
                printf("请输入要更改的元素下标:");
                scanf("%d%d",&x,&y);
                printf("请输入要更改成的值:");
                scanf("%d",&b[x][y]);
                printf("更改成功!\n");
                for(i=0; i<m1; i++)
                {
                    for(j=0; j<n1; j++)
                    {
                        printf("%d ",b[i][j]);
                    }
                    printf("\n");

                }
            }

            else printf("输入错误!\n");
        }
}
int main()
{
    int a[101][101],b[101][101];
    int i,j,s,x,y;
    printf("请输入矩阵a的行数和列数m1 n1\n");
    scanf("%d%d",&m1,&n1);
    printf("请输入%d*%d矩阵a(每行以回车结束):\n",m1,n1);
    for(i=0; i<m1; i++)
    {
        for(j=0; j<n1; j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    printf("请输入矩阵b的行数和列数m2 n2:\n");
    scanf("%d%d",&m2,&n2);
    printf("请输入%d*%d矩阵b(每行以回车结束):\n",m2,n2);
    for(i=0; i<m2; i++)
    {
        for(j=0; j<n2; j++)
        {
            scanf("%d",&b[i][j]);
        }
    }
    while(1)
    {
        printf("1、对指定元素赋值更改\n");
        printf("2、输出两矩阵的加、减、乘、转置运算\n0、退出\n");
        scanf("%d",&s);
        if(s==1)
        Fix(a,b);
        else if(s==2)
        {
            if(m1==m2&&n1==n2)
            {
                Plus(a,b);
                Sub(a,b);
            }
            else
                printf("这两个矩阵无法进行加减\n");
            if(n1==m2)
                Multi(a,b);
            else printf("这两个矩阵无法相乘\n");
            printf("矩阵a转置后结果为:\n");
            Swap(a,m1,n1);
            printf("矩阵b转置后结果为:\n");
            Swap(b,m2,n2);
        }
        else if(s==0)break;
        else
            printf("您输入的序号不合法!");
    }
    return 0;
}

原创粉丝点击