65.设有定义语句“int x[]={1,3,5,7,9,11,13},*p=x;”,则不能正确引用组x的合法元素的表达式是( )
A.*(p--)
B.*(--p)
C.*(p++)
D.*(++p)
【解析】分析备选答案A:由于*(p--)中的“--”是后缀运算符,所以“*(p--)”相当于“*p”,然后再对p减1,由于p指向的数组元素是x[0],所以这个表达式正确引用了数组x的合法元素。分析备选答案B:由于*(--p)中的“--”是前缀运算符,所以要先对P进行减1操作,由于P指向的数组元素是x[0],所以p减1后指向的数组元素是x[-1],这个元素不是数组x的合法元素,因此,这个表达式是错误的,本题答案应选B。至于备选答案C:分析方法和备选答案A完全相同,该表达式相当于数组元素X[0]。备选答案D:由于“++”是前缀,需要先对p进行加1,使得p指向数组元素x[1],这个元素也是数组x的合法元素。
【参考答案】B
66.下列程序段的输出是( )
char x=012,y=013;
printf("%d,%d,%d", x&y, x??y, x&&y);
A.1,0,1
B.1,0,0
C.10,1,1
D.1,1,l
【解析】首先要注意字符型变量x的初值是八进制整数,对应的二进制整数是00001010,对应的十进制整数是10;字符型变量y的初值也是八进制整数,对应的二进制整数是00001011,对应的十进制整数是11。再来计算输出语句中的三个输出表达式的值:自右向左,先计算“x&&y”,由于运算符是逻辑运算符,所以按照逻辑值的规则,x和y均为非0,运算结果是逻辑真,其值为"1”;再计算“x??y”,同样道理,x和y均为非0,运算结果是逻辑真,其值为“1”;最后计算“x&y”,注意运算符是位与,由于x值为“00001010”,而y值为。“00001011”,按照位与的运算规则,结果为"00001010",对应的十进制整数是“10”,所以输出的结果是“10,1,1”,本题答案应选C.
【参考答案】C
67.对于输入语句scanf("%f,%f",&a,&b);要使变量a、b上的值分别为 1.78和2.48,则正确的输入是( )
A. 1.78,2.48后跟回车
B. 1.78 2.48后跟回车
C. 1.782.48后跟回车
D. 1.78;2.48后跟回车
【解析】按照scanf()函数的语法要求,第1个形参是一个字符串常量,是由格式控制符和非格式控制符组成的,其中的非格式控制符必须原样输入。显然本题中的非格式控制符是在两个实数之间的“逗号”。从4个备选答案中可以看出,只有备选答案A中是用逗号分隔两个实数的,所以本题答案应选A
【参考答案】 A
68.执行下列程序段后的输出结果是( )
x=9;
while( x>7)
{ printf("*");x--;}
A.****
B.***
C.**
D.*
【解析】注意执行while循环前,变量x的初值为9.第1次执行while循环,控制循环的条件为“x>7”,这时x为9,条件成立,执行循环体:输出单个“*”,x再减1,x为8。继续循环,控制循环的条件是“x>7',现在x为8,条件成立,输出“*”后x减1,现在x为7。继续循环时,控制循环的条件不满足,退出循环。所以本段程序执行后,输出结果为两个“*”,本题答案应选C。
【参考答案】C
69.关于带参数的主函数,下列说法中错误的是( )
A.带参数的主函数中,形式参数名称是系统规定的,用户不能自己选择
B.带参数的主函数中,第1个形式参数是int型的
C.带参数的主函数中,第2个形式参数是字符型数组
D.带参数的主函数中,实际参数值只能在执行程序的命令行中获得
【解析】带参数的主函数定义格式是系统规定的,具体如下:
main(argc,argv);
int argc;
char *argv[];
{...
}
由此看出,第2个形式参数argv是指向字符型数据的指针型数组,不是字符型数组所以备选答案