30-程序分析
6.12.1 程序分析
该程序示例中的 main() 是一个驱动程序(driver),即被设计用来测试函数的小程序。
该例的 while 循环是前面讨论过的一般形式。输入 1.2 12 , scanf() 成功读取两值,并返回 2 ,循环继续。因为 scanf() 跳过空白,所以可以像输出示例那样,分多行输入。但是输入 q 会使 scanf() 的返回值为 0 ,因为 q 与 scanf() 中的转换说明 %1f 不匹配。 scanf() 将返回 0 ,循环结束。类似地,输入 2.8 q 会使 scanf() 的返回值为 1 ,循环也会结束。
现在分析一下与函数相关的内容。 power() 函数在程序中出现了3次。首次出现是:
double power(double n, int p); // ANSI函数原型
这是 power() 函数的原型,它声明程序将使用一个名为 power() 的函数。开头的关键字 double 表明 power() 函数返回一个 double 类型的值。编译器要知道 power() 函数返回值的类型,才能知道有多少字节的数据,以及如何解释它们。这就是为什么必须声明函数的原因。圆括号中的 double n, int p 表示 power() 函数的两个参数。第1个参数应该是 double 类型的值,第2个参数应该是 int 类型的值。
第2次出现是:
xpow = power(x,exp); // 函数调用
程序调用 power() ,把两个值传递给它。该函数计算 x 的 exp 次幂,并把计算结果返回给主调函数。在主调函数中,返回值将被赋给变量 xpow 。
第3次出现是:
double power(double n, int p) // 函数定义
这里, power() 有两个形参,一个是 double 类型,一个是 int 类型,分别由变量 n 和变量 p 表示。注意,函数定义的末尾没有分号,而函数原型的末尾有分号。在函数头后面花括号中的内容,就是 power() 完成任务的代码。
power() 函数用 for 循环计算 n 的 p 次幂,并把计算结果赋给 pow ,然后返回 pow 的值,如下所示:
return pow; //返回pow的值