下列给定程序中,函数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[i] [j]);
printf ("\n ");
参考答案:错误:fun(int**a, int m) 正确:void fun(int(*a)[M],int m)
(B)错误:a[j][k]=k*j; 正确:a[j][k]=(k+A)*(j+A);
解析: 对于二维数组,应该理解成为是由几个一维数组作元素组成的一维数组,或者说,二维数组实际是一个一维数组,只不过它的每个数组元素又都是一个一维数组。我们先来看看指针数组的表示形式:
(1)p+i和a+i均表示a[i]的地址,或者讲,它们均指向数组第i号元素,即指向a[i]。
(2)*(p+i)和*(a+i)都表示p+i和a+i所指对象的内容,即为a[i]。
(3)指向数组元素的指针,也可以表示成数组的形式,也就是说,它允许指针变量带下标,如p[i]与*(p+i)等价。因此,二维数组元素a[i][j]可表示成*(a[i]+j)或*(*(a+i)+j),它们都与a[i][j]等价,或者还可写成(*(a+i))[j]。了解了以上这些内容后本题就好解决了。