问题 单项选择题

有以下程序:
#include <stdio.h>
void f(int n, int *r)
int r1=0;
if (n%3==0) r1=n/3;
else if (n%5==0) r1=n/5;
else f(--n, &r1);
*r=r1;

main()
int m=7, r;
fm, &r); printf("%d\n", r);

程序运行后的输出结果是( )。

A) 2
B) 1
C) 3
D) 0

答案

参考答案:A

解析: 本题主要考查了函数参数的传递方式和递归函数。参数的传递方式有两种:传值和传地址。它们的区别主要在于:在函数体内对形参的改变,会不会同时也改变实参。本题的f()函数,第1个参数是传值(不会改变实参);第2个参数传递的是指针,即传地址(会改变实参)。主函数中调用f()时m为7,由于7既不能被3整除,也不能被5整除,所以执行最后一条else子句再次调用f()函数,此时n被减1,传入的第1个参数值为6,6能被3整除,故r1=6/3=2。函数返回,并使第2个参数所指内容为2,故本题输出的结果是2,应该选择A)。

选择题
问答题 简答题