第13题  设有下面程序

c_choice13-01

则程序执行后的输出结果是

­      A    4∗3∗2∗1∗0∗

­      B    0∗1∗2∗3∗4∗

­      C    0∗1∗2∗3∗4∗5∗

­      D    1∗2∗3∗4∗5∗

答案  B

解析

考查自定义函数的循环调用。如果理解或记住了下面的知识点,就不难选择。

知识点

① for语句的格式:

­          for (表达式1;表达式2;表达式3)    循环体语句

② for语句的执行规则:

­      计算表达式1的值(仅1次),为循环做准备。计算表达式2的值,若表达式2的值不为0,则执行循环体语句,然后计算表达式3的值。再次计算表达式2的值,如此重复,直到表达式2的值变为0时循环结束。若第1次计算测试表达式2的值就为0,则根本不会进入循环(既不会执行循环体,也不会计算表达式3)。

若省略表达式1或表达式3,则不计算、无动作。

若省略表达式2,则视为非0常量、引起无限循环。这种无限循环一般通过语句break、return等手段来打破。

③ 自定义函数

­          int fun(int m, int n)
­          {
­               return m + n − 6;
­          }

通过形参m、n接收两个整型值,计算二者之和再减6,并作为函数值返回。

④ for循环语句

­          for (i = 0; i < 5; i++)
­               printf(″%d∗″, fun(i, 6));

执行期间,变量i依次取值0、1、2、3、4,当i取5时,循环因i < 5不成立而结束。当i取0时,执行循环体语句printf,以0,6为实参调用fun,经参数传递将0,6分别赋于m,n,fun计算0+6−6,将结果0返回,printf将fun的返回值0输出,并紧随其后输出∗,即输出0∗;同理,当i取1时,以1,6调用fun,fun计算1+6−6,将结果1返回,printf输出1∗;如此反复……,当i取4时,以4,6调用fun,fun计算4+6−6,将结果4返回,printf输出4∗;至此循环结束,这样,程序输出结果就是 0∗1∗2∗3∗4∗

练习题

试为自己设计一道孪生题,举一反三。

孪生题  设有下面程序

c_choice13-02

则程序执行后的输出结果是

­      A    5∗4∗3∗2∗1∗

­      B    1∗2∗3∗4∗5∗

­      C    0∗1∗2∗3∗4∗5∗

­      D    5∗4∗3∗2∗1∗0∗

答案  A

分析:

for循环语句

­          for (i = 5; i > 0; i−−)
­               printf(″%d∗″, fun(i, 6));

执行期间,变量i依次取值5、4、3、2、1,当i取0时,循环因i > 0不成立而结束。当i取5时,printf输出5∗,当i取4时,printf输出4∗,如此反复……,当i取1时,printf输出1∗,至此循环结束,这样,程序输出结果就是 5∗4∗3∗2∗1∗

返回