第17题  整除问题2

试编写函数fun,通过形参n接收一个自然数,求出能被5和11同时整除且小于n的全部自然数之和的平方根,并返回调用者。

例如:若n接收2000,则fun返回191.389655。

注意:部分源程序在PROG1.C中,请勿改动已给定的任何内容,只在函数fun的指定位置填入你编写的若干语句。

PROG1.C:

PROG17-01

参考答案:

PROG17-02

运行结果:

PROG17-03

程序解析:

double变量s用作累加器,初值为0.0。为节省存储开销,将形参n用作for循环控制变量,依次取小于n的自然数n−1,n−2,…,1。在这一循环过程中,语句:

if  (n%5 == 0 && n%11 == 0)
­     s += n;

判别n若能被5和11同时整除,则把n累加于s之中。当for循环终止后, s的当前值即为满足条件的全部自然数之和,随后,语句return sqrt(s); 计算s的平方根并返回调用者。

知识点:

① 浮点累加器的应用。通常预设初值0.0。

② &&操作符的意义。当n%5 == 0和n%11 == 0同时为真时,n%5 == 0 && n%11 == 0才为真,即表示n能被5和11同时整除。

③ %操作符的意义。两整数相除取余数,若n%5 == 0则表示n能被5整除。

④ 库函数double  sqrt(double  x)返回x(x≥0)的平方根,要求#include <math.h>

⑤ 充分利用形参节约存储开销的编程思想。

练习题:

试改变代码行 if  (n%5 == 0 && n%11 == 0)­,为自己命新题,举一反三。

返回