第二题:
考的是转义字符,注意转义字符有三种,一种\号后跟一个字母,转义为一个其它字符,一种是\后跟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行的行地址而不是元素值。