求大家帮我详细点解析一下这几道简单的C语言填空选择题

Python014

求大家帮我详细点解析一下这几道简单的C语言填空选择题,第1张

第一题:while中的条件表达是ch=getchar()=='A',按照运算符优先级先做getchar()=='A',输入字符'A'时表达式的值为真,也就是1,再做ch=1,ch得到时值为1,同时表达式1,继续循环,继续计算条件ch=getchar()=='A',接下来应是回车键,getchar()=='A',结果为假,也就是0,ch=0,同时表达式为0,循环结束,所以最终ch的值为0,注意这题无论如何输入,循环结束后ch都为0.

第二题:

考的是转义字符,注意转义字符有三种,一种\号后跟一个字母,转义为一个其它字符,一种是\后跟0再跟1到3位的八进制数,转义为此八进制数ASCII码所代表的字符,一种是\后跟x再跟1到2位的十六进制数,转义为此十六进制数ASCII码所代表的字符,D选项应属于第二种情况,但0后跟的应是八进制数,但28是非法的八进制数(所用的数码应是0——7)。

第三题:此题的while条件表达式为(c=getchar())!='\n',括号优先级高,先执行c=getchar()(将输入的字符赋给c),再判断c的值是不是!='\n',不等于'\n'继续,否则结束循环,(注意用getchar()输入的是字符)第一个输入'2',执行循环体内语句,switch('2'-'2'),从case

0入口,putchar('2'+4)(输出字符6),putchar('2'+4)(输出字符6),break结束switch语句,继续执行下一次循环。以后具体执行情况不再分析了,请自己分析。

B

B

C

B

B(原则上A也可以)

填空:

y= y/(x+a)

至少执行一次

逐行存储

void rewind(FILE *stream)

5,4

B、C两项是错误的,选B和C。

B、*(X+i)[j]——由于[]的优先级高于*,所以*(X+i)[j]被解释为*((X+i)[j]),又因X的类型是(*)[T](T是数组列数),所以X+i就是第i行(0行起算)的地址,(X+i)[j]就是第i+j行的地址,那么*((X+i)[j])就是第i+j行的下标为0的元素的值。可是这个数组的第i+j行在i和j可取的范围内会有很多机会比定义的行要大得多,所以越界了。

C、*(X+i+j)——这显然是第i+j行的行地址而不是元素值。