冲刺必看!名师讲解二级C真题之选择题(2)
技术与开发
看了上期的选择题,大家是不是觉得很简单?那只是试卷开头部分,接下来我们要讲的选择题就有难度了,这些试题你都能解吗?
第22题:有以下程序
#include<stdio.h>
main()
{int y=9;
for( ; y>0;y--)
if(y%3==0) printf("%d",--y);
}
程序的运行结果是
A)741 B)963
C)852 D)875421
本题难度:较难
涉及知识:--i和i--的区别
专家解析:考生失分题,考生务必明白自增/自减运算中运算符在变量前与后的区别。自增运算作表达式使用时,++/--在后,表达式的值为原值。++/--在前,表达式的值为加/减后值。for语句有三个表达式,当表达式1省略时,即y=9。(for (y=9;y>0;y--))循环体中:if(y%3==0) printf("%d",--y)输出y的减后值,并且y值-1。当y的值为9、6、3时才满足,结果则为852
第24题:有以下程序
#include<stdio.h>
main()
{int i,j,m=55;
for(i=1;i<=3;i++)
for(j=3;j<=i;j++) m=m%j;
printf("%d\n",m);
}
程序的运行结果是
A)0 B)1 C)2 D)3
本题难度:难
涉及知识:循环嵌套 取模运算
专家解析:此题考查双重循环和取模运算,很容易出错,需要考生仔细再仔细。循环嵌套类题,主要考内外层循环条件的判断。题中,内层条件“j<=i”,而j的初值为3,当i的值为1和2时,内层循环都不执行。只有当i与j都等于3时,才会执行一次。m=55%3,结果为1。
第29题:设有定义:char p[]={' 1',' 2 ',' 3' },*q=p,以下不能计算出一个char型数据所占字节数的表达式是
A)sizeof(p) B)sizeof(char)
C) sizeof(*q) D)sizeof(p[0])
本题难度:较难
涉及知识:指针常量的概念
专家解析:sizeof()函数求数据占内存的字节数,其参数必须为数据类型或者变量。p为字符类型数组,q为指向字符类型数据的指针变量。*q表示p[0]。答案A中p为数组名,是指针常量,表示数组的首地址,无法求字节数。
第30题:有以下函数
int aaa(char *s)
{char *t=s;
while(*t++);
t--;
return(t-s);
}
以下关于aaa函数的功能叙述正确的是
A)求字符串s的长度
B)比较两个串的大小
C)将串s复制到串t
D)求字符串s所占字节数
本题难度:难
涉及知识:知识点的融合
专家解析:while(*t++)等同于while(*t++ != 0),亦同于while(*t++ !='\0')。因为,条件表达式中++在t变量的后面,所以每次判断的值都是原值,故循环的结果,t指针指向字符串尾的'\0'元素的后一个元素t--,使t指向字符串尾。
第32题:有以下程序
#include<stdio.h>
void fun(char **p)
{++p; printf("%s\n",*p);}
main()
{char *a[]={"Morning","Afternoon","Evening","Night"};
fun(a);
}
程序的运行结果是
A)Afternoon B)fternoon
C)Morning D)orning
本题难度:难
涉及知识:指针
专家解析:指向指针的指针变量,知识点复合。本题中,a为指针数组,p为指向指针的指针变量。当调用fun函数时,形参p就指向a数组中的第一个指针元素,p++则指向第二个指针元素,所以*p输出a[1]所指向的字符串。指针变量指向字符串时,可以直接引用,例如char *a="China"。
第33题:若有定义语句:int a[2][3],*p[3],则以下语句中正确的是
A)p=a B)p[0]=a
C)p[0]=&a[1][2] D)p[1]=&a
本题难度:较难
涉及知识:指针
专家解析:本题中,p为指针数组,p的每个元素都是指向整型数据的指针。C语言中,指向数组的指针变量有三种。例如char*p1,char*p2[3],char(*p3)[3],其中p1为指向字符型变量的指针变量,也可以指向字符型数组的元素;p2为指向字符型数据的指针数组,长度为3;p3是指向包含3个元素一维数组的指针变量,专用于二维数组中行的操作。
第22题答案:C
第24题答案:B
第29题答案:A
第30题答案:A
第32题答案:A
第33题答案:C