问题 单项选择题

以下程序运行后的输出结果是
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;
f(m,&r);
printf("%d\n",r);

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

答案

参考答案:A

解析: 参数r的传递是地址传递,函数调用会改变其值。函数f的功能是:判断n是否为3或5的倍数,如果是,则将指针r所指的内存空间赋值为n除以3或5的商;否则n递减,直到它可以被3或5整除。初始时调用函数f(7,&r);n=7,执行else子句,调用f(6,&r1);后n=6,执行语句if(n%3==0) r1=n/3;,此后执行语句*r=r1;。所以r=6/3=2。

单项选择题 A3/A4型题
问答题 简答题