数组

作者: Micason | 来源:发表于2016-06-30 21:23 被阅读110次

    1.请编写函数fun,该函数的功能是:将M行N列的二维数组中的数据,按列的顺序依次放到一维数组中。一维数 组中数据的个数存放在形参n所指的存储单元中。
    例如,若二维数组中的数据为
    33 33 33 33
    44 44 44 44
    55 55 55 55
    则一维数组中的内容应是:
    33 44 55 33 44 55 33 44 55 33 44 55

    void fun(int (*s)[10],int *b,int *n,int mm,int nn)
    {
        int i,j;
        for(j=0;j<nn;j++)    /*将二维数组中的数据按列的顺序依次放入一维数组中*/
        for(i=0;i<mm;i++)
         {
           b[*n]=*(*(s+i)+j);
           *n=*n+1;          /*通过指针返回元素个数*/
         }
    }
    

    题目要求实现将二维数组元素存入一维数组,需使用for循环语句来控制二维数组元素的下标,同时使用指针变量配合操作。
    可以用两个循环来处理问题,由于是按列的顺序取出,所以第1个循环用于控制列下标,第2个循环用于控制行下标。
    2.请编一个函数void fun(int tt[M][N], int pp[N]), tt指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。

    void fun(int  tt[M][N],int  pp[N])
    {
     int i,j,max;
    for(j=0;j<N;j++)
    {
     max=tt[0][j];       /*假设各列中的第一个元素最大*/
      for(i=0;i<M;i++)
       if(tt[i][j]>max)  /*如果各列中的元素比最大值大,则将这个更大的元素看作当前该列中最大元素*/
           max=tt[i][j];
         pp[j]=max;      /*将各列的最大值依次放入pp数组中*/
    }
    }
    
    

    本题中函数的功能是求出二维数组中每列的最大元素。首先,假设各列中的第一个元素最大,然后利用行标值的移动来依次取得各列中其他元素的值,并与假设的最大值进行比较,如果遇到更大的,则把这个更大的元素看做当前该列中最大的元素,继续与该列中其他元素进行比较。
    3

    
    void fun (int a[][N])
    {
       int i,j;
       for(i=0;i<N;i++)
         for(j=0;j<=i;j++)
            a[i][j]=0;  /*将数组左下半三角元素中的值全部置成0*/
    }
    

    对于N×N二维数组,如何表示其左下半三角元素,可以通过以下语句实现。
    for(i=0;i<n;i++)
    for(j=0;j<=i;j++)
    外层循环用来控制矩阵的行下标,内层循环控制矩阵的列下标。注意列下标的取值范围,因为要表示下三角元素,所以j的范围是0~i。
    4.下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[ ][N],int m),该函数的功能是使数组右上半三角元素中的值乘以m。
    例如,若m的值为2,a数组中的值为:

    则返回主程序后a数组中的值应为:

    void fun(int a[][N], int m)
    {
       int i,j;
       for(j=0;j<N;j++)
         for(i=0;i<=j;i++)
           a[i][j]=a[i][j]*m;    /*右上半三角元素中的值乘以m*/
    }
    

    本程序实现将矩阵中右上半三角元素中的值乘以m,使用循环语句遍历数组元素,第1个循环用于控制行坐标,第2个循环用于控制列下标。

    相关文章

      网友评论

          本文标题:数组

          本文链接:https://www.haomeiwen.com/subject/lvrfjttx.html