下列给定程序中,函数fun()的功能是:根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示的数据,由 main()函数输出。 例如,若输入2,则输出1 2 2 4 输入4,则输出1 2 3 4

admin2013-06-12  33

问题 下列给定程序中,函数fun()的功能是:根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示的数据,由 main()函数输出。
   例如,若输入2,则输出1  2
   2  4
   输入4,则输出1  2   3   4
                2  4   6   8
                3  6   9  12
                4  8  12  16
   请改正程序中的错误,使它能得出正确的结果。
   注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.
   试题程序:
   #include <conio.h>
   #include  <stdio. h>
   #define M 10
   int aiM] [MI={0};
   /***************found*******************/
     fun( int **a,  int m)
     {int j,k;
      for (j=0; j<m; j++)
             for (k=0; k<m; k++)
   /***************found*******************/
                a[j] [k]=k*j;
   }
   main ( )
   {int i, j, n;
    clrscr ();
    printf ("Enter n\n"); scanf ("%d", &n);
    fun (a, n);
    for (i=0; i<n; i++)
          { for (j=0;j<n;j++)
            printf ("%4d ",a [j]);
            printf ("\n ");
          }
   }

选项

答案(1)错误:fun(int**a, int m) 正确:void fun(int(*a)[M],int m) (2)错误:a[j][k]=k*j; 正确:a[j][k]=(k+1)*(j+1);

解析 对于二维数组,应该理解成为是由几个一维数组作元素组成的一维数组,或者说,二维数组实际是一个一维数组,只不过它的每个数组元素又都是一个一维数组。我们先来看看指针数组的表示形式:
   (1)p+i和a+i均表示a的地址,或者讲,它们均指向数组第i号元素,即指向a
   (2)*(p+i)和*(a+i)都表示p+i和a+i所指对象的内容,即为a
   (3)指向数组元素的指针,也可以表示成数组的形式,也就是说,它允许指针变量带下标,如p与*(p+i)等价。因此,二维数组元素a[j]可表示成*(a+j)或*(*(a+i)+j),它们都与a[j]等价,或者还可写成(*(a+i))[j]。了解了以上这些内容后本题就好解决了。
转载请注明原文地址:https://jikaoti.com/ti/lVn0FFFM
0

最新回复(0)