{ int *p;
p=(int *)malloc(sizeof(int)); *p=n; return *p; } main() { int a;
a=fun(10); printf(\}
程序的运行结果是
A)0 B)10 C)20 D)出错 答案:C
详细解答:该知识点考察的是函数的调用以及引用指针存储单元,也是我们平时上课强调了的知识点。在主函数调用fun函数,实参10单向值传递给形参n,在fun定义了指针变量p并用malloc函数给p分配了存储空间,然后下一条语句把n的值赋给p所指向的存储单元,最后是返回存储单元的值到主函数。所以调用fun(10)的返回值为10,a的值也为10, 选C (32)有如下程序: #include
int t; t=a;a=b;b=t; } main()
{int c[10]={1,2,3,4,5,6,7,8,9,0},i;
for(i=0;k<10;i+=2) fun(c[i],c[i+1]);for(i=0;k<10;i++)printf(\\ }
程序的运行结果是
A)1,2,3,4,5,6,7,8,9,0, B)2,1,4,3,6,5,8,7,0,9, C)0,9,8,7,6,5,4,3,2,1, D)0,1,2,3,4,5,6,7,8,9, 答案:A
详细解答:该知识点考察的是函数实际参数与形式参数的传递过程,是我们上课强调的重点内容。该题没有涉及到指针,实参单向的值传递给形参,形参反过来不能传递给实参。在主函数中把数组元素作为实参进行传递给形参a和b,在fun中交换了形参a和b的值,但形参a和b值的改变并不影响实参。所以数组C中的元素没有改变。选A (33)有如下程序: #include
{int x,y;} data[2]={1,10,2,20};
main()
{struct st *p=data; printf(\printf(\}
程序的运行结果是
A)10,1 B)20,1 C)10,2 D)20,2 答案:C
详细解答:该知识点考察的是结构体成员的引用,是我们上课强调的重点内容。在主函数中把一维数组名data赋给了指针变量p,则p指向数组元素data[0],且每一个数组元素含有两个成员x和y,所以表达式p->y 是引用data[0]的成员y,即等于10;(++p)->x是先让指针值自增,往下移动指向了data[1],然后引用data[1]的成员x, 即等于2。选C (34)有如下程序: #include
for(i=0;i {int k[10]={1,2,3,4,5,6,7,8,9,10},i; fun(k,5); for(i=2;i<8;i++) printf(\printf(\} 程序的运行结果是 A)345678 B)876543 C)1098765 D)321678 答案:D 详细解答:该知识点考察的是一维数组名作为实参进行参数传递,是我们上课强调的重点内容。在主函数中调用了fun函数,实参为数组名k和整数5,这样对应定义fun函数首部有三种形式(教材P84),这里采用了第二种形式。这样在fun函数对a[i]操作实际上就是对主函数中的k[i]操作,即 k[0]与k[4] 、k[1]与k[3]值交换了,所以选D (35)有如下程序: #include void fun(int a[][N],int b[]) { int i; for(i=0;i { int x[][N]={{1,2,3},{4},{5,6,7,8},{9,10}},y[N],i; fun(x,y); for(i=0;i A)1,2,3,4, B)1,0,7,0, C)1,4,5,9, D)3,4,8,10, 答案:B 详细解答:该知识点考察的是二维数组名和一维数组名作为实参进行参数传递,是我们上课强调的重点内容。在主函数中调用了fun函数,实参为二维数组名x和一维数组名y,这样对应定义fun函数首部也有三种形式(教材P84、P86),这里采用了第二种形式。这样在fun函数对a[i][j]、b[i]进行操作实际上就是对主函数中的x[i][j]、y[i]进行操作,即把 x[0][0]、x[1][1]、x[2][2]和x[3][3]分别赋给y[0] 、y[1]、y[2]和y[3],所以选B (36)有如下程序: #include int fun(int (*s)[4],int n,int k) { int m,i; m=s[0][k]; for(i=0;i