2012年计算机等级考试二级C语言模拟练习3_第2页

考试站(www.examzz.com)   【考试站:中国教育考试第一门户】   2012年11月12日
  (43)若有以下定义和语句:
   int s[4][5],(*ps)[5];
   ps=s;
   则对s数组元数的正确引用形式是
   A)ps+1
   B)*(ps+3)
   C)ps[0][2]
   D)*(ps+1)+3
   【答案】C
   【解析】本题首先定义了一个4行5列的数组s,又定义了一个指向由5个元素组成的一维数组的指针变量ps,通过赋值让ps指向了数组s的首地址。此时数组元素s[i][j]的地址为“*(ps+i)+j”,数组元素s[i][j]可表示为*(*(ps+i)+j)。选项B表示的是数组元素a[3][0]的地址;选项D表示的是数组元素s[1][3]的地址;选项A中“ps+1”为指向下一行(第二行)的地址;选项C中ps[0][2]无条件等价于“*(ps[0]+2)”又无条件等价于“*(*(ps+0)+2)”,即是数组元素s[0][2]。

   (44)以下程序的输出结果是
   main()
   { int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;
   for (i=0;i<3;i++)
   for(j=i;j<=i;j++)t=t+b[i][b[j][j]];
   printf("%d\n",t);
   }
   A)3
   B)4
   C)1
   D)9
   【答案】B
   【解析】本题中定义了一个二维数组b并初始化,定义了一个变量t并赋初值1。接着通过一个二重循环将若干个元素的值加到变量t中。循环的执行步骤是:外层循环变量i=0时,内层循环变量j=i执行语句“t=t+b[i][b[j][j]]”,相当于t=t+b[0][b[0][0]],由于b[0][0]的值为0,得到t的值为1;依次类推,循环共执行了3次,最后输出t的值为4。

   (45)以下程序的输出结果是
   #include <stdio.h>
   #include <string.h>
   main()
   { char b1[8]="abcdefg",b2[8],*pb=b1+3;
   while(--pb>=b1)strcpy(b2,pb);
   printf("%d\n",strlen(b2));
   }
   A)8
   B)3
   C)1
   D)7
   【答案】D
   【解析】strcpy()函数的作用是把第二个参数代表的字符串,复制到第一个参数指向数组中。首先定义了两个字符数组b1和b2,并用一个字符串给b1赋初值,然后定义了一个字符型指针变量pb,通过赋初值使它指向b1[3]。接着执行while循环,该循环执行了3次:第一次判断条件“--pb>=b1”,使pb的值为“b1+2”,执行“strcpy(b2,pb);”后,b2中的内容为“cdefg”;第二次判断条件“--pb>=b1”,使pb的值为“b1+1”,执行“strcpy(b2,pb);”后b2的内容为“bcdefg”第三次判断条件“--pb>=b1”使pb的值为“b1”,执行“strcpy(b2,pb);”后b2的内容为“abcdefg”。最后输出b2数组中存放的字符串长度,显然是7。(这里还有一个关键点:就是每当执行一次while循环判断条件,就执行一次“--pb”,使得指针pb自减1,即前移一位)。

   (46)在说明语句:int *f();中,标识符f代表的是
   A)一个用于指向整型数据的指针变量
   B)一个用于指向一维数组的行指针
   C)一个用于指向函数的指针变量
   D)一个返回值为指针型的函数名
   【答案】D
   【解析】定义指向整型元素的指针变量形式为:int*指针变量名。定义指向整型一维数组的行指针形式为:int(*指针变量名[长度],定义指向返回值为整型的函数的指针变量的形式为:int(*函数名)(),定义返回值为指向整型的指针型函数的形式为:int *函数名()。本题定义的是一个返回值为指针型的函数f()。

   (47)不合法的main函数命令行参数表示形式是
   A)main(int a,char *c[])
   B)main(int arc,char **arv)
   C)main(int argc,char *argv)
   D)main(int argv,char *argc[])
   【答案】C
   【解析】main()函数可以带有参数,并且参数只能有两个,第一个参数类型为整型,用来记下命令行的参数个数;第二个参数为一个字符型指针数组,或字符型二级指针变量(指向一个数组,数组元素又是一个一级字符指针),其各个元素用来记下从命令行各参数字符串的首地址。故本题只有C选项不符合要求。

   (48)以下程序的输出结果是
   int x=3;
   main()
   { int i;
   for(i=1;i<x;i++)incre();
   }
   incre()
   { static int x=1;
   x*=x+1;
   printf("%d",x);
   }
   A)3 3
   B)2 2
   C)2 6
   D)2 5
   【答案】C
   【解析】本题首先定义一个全局变量x并赋初值为3,主函数中使用这个全局变量控制循环次数,循环执行了2次,调用两次incre()函数。第一次调用incre(),定义一个静态变量x并赋初值1,然后执行“x*=x+1”,使x的值变为2;第二次调用incre()函数时,静态变量将保留上一次退出时的值即2,执行语句“x*=x+1”后,x的值变成6,输出x的值为6。

相关文章