有没有人用c语言帮我写一下这个17题,有偿

img


这个17题,用c语言解答,尽量简洁直观一点,便于操作.并且源程序要有适当的注释,使程序容易阅读。

img


#include<stdio.h>
void input(int n,int m,int t[][m])
{
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            scanf("%d",&t[i][j]);
        }
    }
}
void put(int n,int m,int t[][m])
{
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            printf("%d ",t[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}

void trans(int n,int m,int t1[][m],int t2[][n])
{
    for(int i=0; i<m; i++)
    {
        for(int j=0; j<n; j++)
        {
            t2[i][j]=t1[j][i];
        }
    }

}
void add(int n,int m,int t1[][m],int t2[][m])
{
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            t1[i][j]+=t2[i][j];
        }
    }
}
void sub(int n,int m,int t1[][m],int t2[][m])
{
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            t1[i][j]-=t2[i][j];
        }
    }
}
void mul(int n,int m,int q,int t1[][m],int t2[][q],int t3[][q])
{
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<q; j++)
        {
            t3[i][j]=0;
        }
    }
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<q; j++)
        {
            for(int k = 0; k < m; k++){
                    t3[i][j] += t1[i][k] * t2[k][j];

                }
        }
    }
}
int main()
{
    int n,m;
    while(1){
    printf("1,转置\n");
    printf("2,加法\n");
    printf("3,减法\n");
    printf("4,乘法\n");
    printf("按任意键退出\n");
    int option;scanf("%d",&option);

        if(option==1)
    {
        printf("输入矩阵1行数:");
        scanf("%d",&n);
        printf("输入矩阵1列数:");
        scanf("%d",&m);
        printf("输入矩阵:\n");
        int t1[n][m];
        int t2[m][n];
        input(n,m,t1);
        trans(n,m,t1,t2);
        put(m,n,t2);
    }
    else if(option==2)
    {
        printf("输入矩阵1行数:");
        scanf("%d",&n);
        printf("输入矩阵1列数:");
        scanf("%d",&m);
        printf("输入矩阵:\n");
        int t1[n][m];
        input(n,m,t1);
        printf("输入矩阵2行数:");
        scanf("%d",&n);
        printf("输入矩阵2列数:");
        scanf("%d",&m);
        printf("输入矩阵:\n");
        int t2[n][m];
input(n,m,t2);
        add(n,m,t1,t2);
        printf("--------\n");
        put(n,m,t1);
    }
    else if(option==3)
    {
        printf("输入矩阵1行数:");
        scanf("%d",&n);
        printf("输入矩阵1列数:");
        scanf("%d",&m);
        printf("输入矩阵:\n");
        int t1[n][m];
        input(n,m,t1);
        printf("输入矩阵2行数:");
        scanf("%d",&n);
        printf("输入矩阵2列数:");
        scanf("%d",&m);
        printf("输入矩阵:\n");
        int t2[n][m];
input(n,m,t2);
        sub(n,m,t1,t2);
        printf("--------\n");
        put(n,m,t1);
    }
    else if(option==4)
    {
        int x1,x2,x3,p,q;
        printf("输入矩阵1行数:");
        scanf("%d",&n);
        printf("输入矩阵1列数:");
        scanf("%d",&m);
        printf("输入矩阵:\n");
        int t1[n][m];
        input(n,m,t1);
        printf("输入矩阵2行数:");
        scanf("%d",&p);
        printf("输入矩阵2列数:");
        scanf("%d",&q);
        printf("输入矩阵:\n");
        int t2[p][q];
        int t3[n][q];
        input(p,q,t2);
        mul(n,m,q,t1,t2,t3);
        printf("--------\n");
        put(n,q,t3);
    }
    else
    {
        return 0;
    }
    }


}

用二维数组保存矩阵,用双重循环输入输出和计算矩阵即可,参考

#include<stdio.h>
#include<stdlib.h>

void input_mat(int *n,int *m,int **p)
{
    printf("输入矩阵行数 列数:");
    scanf("%d%d",n,m);
    printf("输入矩阵:\n");
    *p = (int *)malloc(sizeof(int)*(*n)*(*m));
    for(int i=0; i<*n; i++)
    {
        for(int j=0; j<*m; j++)
        {
            scanf("%d",(*p)+i*(*m)+j);
        }
    }
}

void output_mat(int n,int m,int p[n][m])
{
    printf("输出\n");
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            printf("%d ",p[i][j]);
        }
        printf("\n");
    }
}

void trans(int n,int m,int p[n][m],int q[m][n])
{
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            q[j][i] = p[i][j];
        }
    }
}
void add(int n,int m,int a[n][m],int b[n][m],int c[n][m])
{
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            c[i][j] = a[i][j] + b[i][j];
        }
    }
}

void sub(int n,int m,int a[n][m],int b[n][m],int c[n][m])
{
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            c[i][j] = a[i][j] - b[i][j];
        }
    }
}

void mul(int n,int m,int a[n][m],int b[n][m],int c[n][m])
{
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            c[i][j] = a[i][j] * b[i][j];
        }
    }
}


int main()
{
    int n,m,*a,*b;

    do {
        printf("========菜单=======\n");
        printf("  1.矩阵转置\n");
        printf("  2.矩阵加法\n");
        printf("  3.矩阵减法\n");
        printf("  4.矩阵乘法\n");
        printf("  5.退出\n");
        printf("选择1-5:");
        scanf("%d", &n);
        if (n==1)
        {
            input_mat(&n,&m,&a);
            output_mat(n,m,a);
            int c[n][m];
            trans(n,m,a,c);
            output_mat(m,n,c);
        }
        else if (n==2)
        {
            input_mat(&n,&m,&a);
            input_mat(&n,&m,&b);
            int c[n][m];
            add(n,m,a,b,c);
            output_mat(n,m,c);
        }
        else if (n==3)
        {
            input_mat(&n,&m,&a);
            input_mat(&n,&m,&b);
            int c[n][m];
            sub(n,m,a,b,c);
            output_mat(n,m,c);
        }
        else if (n==4)
        {
            input_mat(&n,&m,&a);
            input_mat(&n,&m,&b);
            int d[n][m];
            mul(n,m,a,b,d);
            output_mat(n,m,d);
        }
    } while (n!=5);
    printf("结束\n");
}