二维数组的应用

    技术2022-06-23  70

    1.  矩阵加和矩阵减

     设A、B、C为矩阵,则矩阵加为C=A+B,矩阵减为C=A-B。矩阵加减运算的条件是两矩阵的行数和列数相等。

     例1:矩阵加运算。

     

     

    #include<stdio.h>

    #define M 3

    #define N 2

    main(){

    int i,j;

    int a[M][N],b[M][N],c[M][N];

    printf("请输入矩阵a的元素:/n");

    for(i=0;i<M;i++)

    for(j=0;j<N;j++)

    scanf("%d",&a[i][j]);

    printf("请输入矩阵b的元素:/n");

    for(i=0;i<M;i++)

    for(j=0;j<N;j++)

    scanf("%d",&b[i][j]);

    printf("您所输入的矩阵a的元素为:/n");

    for(i=0;i<M;i++){

    for(j=0;j<N;j++)

    printf("%-5d",a[i][j]);

    printf("/n");

    }

    printf("您所输入的矩阵a的元素为:/n");

    for(i=0;i<M;i++){

    for(j=0;j<N;j++)

    printf("%-5d",b[i][j]);

    printf("/n");

    }

    for(i=0;i<M;i++)

    for(j=0;j<N;j++)

    c[i][j]=a[i][j]+b[i][j];

    printf("矩阵相加的结果为:/n");

    for(i=0;i<M;i++){

    for(j=0;j<N;j++)

    printf("%-5d",c[i][j]);

    printf("/n");

    }

    }

    2.  矩阵乘C=A*B

     设有矩阵A[M][L]、B[L][N],则A与B相乘所得结果矩阵C[M][N]。矩阵乘运算的条件是A矩阵的列数必须等于B矩阵的行数。运算规则:C矩阵的元素是A矩阵的一行元素与B矩阵的一列元素一一对应相乘后再相加的结果值。

    例3:矩阵乘C=A*B

     

    #include<stdio.h>

    #define M 3

    #define L 2

    #define N 4

    main(){

    int i,j,k;

    int a[M][L],b[L][N],c[M][N];

    printf("请输入矩阵a的元素:/n");

    for(i=0;i<M;i++)

    for(j=0;j<L;j++)

    scanf("%d",&a[i][j]);

    printf("请输入矩阵b的元素:/n");

    for(i=0;i<L;i++)

    for(j=0;j<N;j++)

    scanf("%d",&b[i][j]);

     

    printf("您所输入的矩阵a的元素为:/n");

    for(i=0;i<M;i++){

    for(j=0;j<L;j++)

    printf("%-5d",a[i][j]);

    printf("/n");

    }

    printf("您所输入的矩阵a的元素为:/n");

    for(i=0;i<L;i++){

    for(j=0;j<N;j++)

    printf("%-5d",b[i][j]);

    printf("/n");

    }

    for(i=0;i<M;i++)//矩阵乘运算

    for(j=0;j<N;j++){

    c[i][j]=0;

    for(k=0;k<L;k++)

    c[i][j]+=a[i][k]*b[k][j];

    }

    printf("矩阵相乘的结果为:/n");

    for(i=0;i<M;i++){

    for(j=0;j<N;j++)

    printf("%-5d",c[i][j]);

    printf("/n");

    }

    }

    3.  转置矩阵A T 矩阵转置运算的条件是A矩阵必须是方阵(行数等于列数)。运算规则是以主对角线为基准,A[i][j]与A[j][i]对换。 例3:求矩阵的置换运算

     

     

     

    #include<stdio.h>

    #define M 3

    main(){

    int i,j,temp;

    int a[M][M];

    printf("请输入矩阵的元素:/n");

    for(i=0;i<M;i++)

    for(j=0;j<M;j++)

    scanf("%d",&a[i][j]);

     

    printf("您所输入的矩阵的元素为:/n");

    for(i=0;i<M;i++){

    for(j=0;j<M;j++)

    printf("%-5d",a[i][j]);

    printf("/n");

    }

    for(i=0;i<M;i++)//矩阵置换运算

    for(j=i+1;j<M;j++){

    if(i!=j)

    {

    temp=a[i][j];

    a[i][j]=a[j][i];

    a[j][i]=temp;

    }

    }

    printf("矩阵置换的结果为:/n");

    for(i=0;i<M;i++){

    for(j=0;j<M;j++)

    printf("%-5d",a[i][j]);

    printf("/n");

    }

    }

    4.  排序   二维数组的排序和一位数组的排序基本相同,所不同的是:二维数组的排序只能按某列来排,而在某列的两个数据需进行交换时,不能像一维数组那样只是两个数据的交换,而需要交换着两个数据所在的行对应的全部数据,一般处理方法是使用循环来实现。 例4:对于一个二维数组,按照用户需求按某列数据进行排序,并输出排序后的数据结果。 #include<stdio.h> #define M 3 #define N 4 main(){ int a[M][N]={9,7,8,5,3,11,4,6,4,1,10,2},i,j,k,temp,n; printf("运行结果为:/n"); printf("数组a[%d][%d](排序前):/n",M,N); for(i=0;i<M;i++){ for(j=0;j<N;j++) printf("=  ",a[i][j]); printf("/n"); } printf("请输入排序的列号:/n"); scanf("%d",&n); for(i=0;i<M-1;i++)//控制每次的比较和交换 for(j=i+1;j<M;j++)//比较 { if(a[i][n-1]<a[j][n-1]) for(k=0;k<N;k++) { temp=a[i][k]; a[i][k]=a[j][k]; a[j][k]=temp; } } printf("/n数组a[%d][%d](排序后):/n",M,N); for(i=0;i<M;i++){ for(j=0;j<N;j++) printf("=  ",a[i][j]); printf("/n"); } } 例5:在一个二维数组中求最大值所在的行、列值。 #include<stdio.h> #define M 3 #define N 4 main(){ int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12}; int i,j,max; int row,col; printf("运行结果为:/n"); for(i=0;i<M;i++){ for(j=0;j<N;j++) printf("]",a[i][j]); printf("/n"); } max=a[0][0]; for(i=0;i<M;i++) for(j=0;j<N;j++) if(max<a[i][j]){ max=a[i][j]; row=i; col=j; } printf("矩阵中的最大值为:%d,其位于%d行,%d列/n",max,row,col); } 例6:在二维数组中a中选出各行最大的元素组成一个一维数组b。 #include<stdio.h> #define M 3 #define N 4 main(){ int b[M]; int a[M][N]={3,16,87,65,4,32,11,108,10,25,12,27}; int i,j; printf("运行结果为:/n"); printf("矩阵a为:/n"); for(i=0;i<M;i++){ for(j=0;j<N;j++) printf("%-5d",a[i][j]); printf("/n"); } for(i=0;i<M;i++){ b[i]=0; for(j=0;j<N;j++) if(b[i]<a[i][j]) b[i]=a[i][j]; } printf("矩阵b为:/n"); for(j=0;j<M;j++) printf("%-5d",b[j]); printf("/n"); }

     


    最新回复(0)