2012门考试提出了以下问题。 1.以下C程序段的输出是什么?
C
char inchar = 'A' ; switch (inchar) { case 'A' : printf ( "choice A " ) ; case 'B' : printf ( "choice B " ) ; case 'C' : case 'D' : case 'E' : default : printf ( "No Choice" ) ; } |
(A) 别无选择 (B) 选择A (C) 选择A 选择B别无选择 (D) 程序没有输出,因为它是错误的 答复(C) 在“A”的情况下没有break语句。如果执行了一个case,但它不包含break,那么所有后续的case都将执行,直到找到break语句为止。这就是为什么开关内部的所有内容都会打印出来。 尝试以下程序作为练习。
C
int main() { char inchar = 'A' ; switch (inchar) { case 'A' : printf ( "choice A " ) ; case 'B' : { printf ( "choice B" ) ; break ; } case 'C' : case 'D' : case 'E' : default : printf ( "No Choice" ) ; } } |
2、考虑下面的C程序
C
int a, b, c = 0; void prtFun ( void ); int main () { static int a = 1; /* line 1 */ prtFun(); a += 1; prtFun(); printf ( " %d %d " , a, b) ; } void prtFun ( void ) { static int a = 2; /* line 2 */ int b = 1; a += ++b; printf ( " %d %d " , a, b); } |
给定的代码段将生成什么输出? (A) 3.1 4 1 4 2 (B) 4.2 6 1 6 1 (C) 4.2 6 2 2 0 (D) 3.1 5 2 5 2 答复(C) “a”和“b”是全局变量。prtFun()还将“a”和“b”作为局部变量。局部变量隐藏全局变量(请参见 C语言中的作用域规则 ).第一次调用prtFun()时,本地“b”变为2,本地“a”变为4。 第二次调用prtFun()时,会使用本地静态“a”的同一个实例,并创建一个新的“b”实例,因为“a”是静态的,“b”是非静态的。所以“b”又变成了2,“a”变成了6。 main()还有自己的名为“a”的局部静态变量,它在main中隐藏全局“a”。main()中的printf()语句访问本地“a”并打印其值。同一printf()语句访问全局“b”,因为main中没有名为“b”的局部变量。此外,静态和全局int变量的默认值为0。这就是main()中的printf语句将0打印为b值的原因。 3.如果出现以下情况,给定代码段将生成什么输出: 第1行替换为“自动积分a=1 第2行替换为“寄存器int a=2 (A) 3.1 4 1 4 2 (B) 4.2 6 1 6 1 (C) 4.2 6 2 2 0 (D) 4.2 4 2 2 0 答复(D) 如果我们用“auto int a=1第2行中的“寄存器int a=2;”,然后在prtFun()中“a”变为非静态。第一个prtFun()的输出保持不变。但是,第二个prtFun()调用的输出会随着在第二个调用中创建“a”的新实例而更改。所以“42”又被打印出来了。最后,main中的printf()将打印“20”。将“a”设为寄存器变量不会改变输出中的任何内容。 请看 门角 所有上一年的论文/解决方案/解释、教学大纲、重要日期、笔记等。 如果您发现任何答案/解释不正确,或者您想分享有关上述主题的更多信息,请发表评论。