29-使用函数返回值的循环示例
6.12 使用函数返回值的循环示例
本章最后一个程序示例要用一个函数计算数的整数次幂( math.h 库提供了一个更强大幂函数 pow() ,可以使用浮点指数)。该示例有3个主要任务:设计算法、在函数中表示算法并返回计算结果、提供一个测试函数的便利方法。
首先分析算法。为简化函数,我们规定该函数只处理正整数的幂。这样,把 n 与 n 相乘 p 次便可计算 n 的 p 次幂。这里自然会用到循环。先把变量 pow 设置为 1 ,然后将其反复乘以 n :
for(i = 1; i <= p; i++)
pow *= n;
回忆一下,* = 运算符把左侧的项乘以右侧的项,再把乘积赋给左侧的项。第1次循环后, pow 的值是 1 乘以 n ,即 n ;第2次循环后, pow 的值是上一次的值( n )乘以 n ,即 n 的平方;以此类推。这种情况使用 for 循环很合适,因为在执行循环之前已预先知道了迭代的次数(已知 p )。
现在算法已确定,接下来要决定使用何种数据类型。指数 p 是整数,其类型应该是 int 。为了扩大 n 及其幂的范围, n 和 pow 的类型都是 double 。
接下来,考虑如何把以上内容用函数来实现。要使用两个参数(分别是 double 类型和 int 类型)才能把所需的信息传递给函数,并指定求哪个数的多少次幂。而且,函数要返回一个值。如何把函数的返回值返回给主调函数?编写一个有返回值的函数,要完成以下内容:
1.定义函数时,确定函数的返回类型;
2.使用关键字return表明待返回的值。
例如,可以这样写:
double power(double n, int p) // 返回一个double类型的值
{
double pow = 1;
int i;
for (i = 1; i <= p; i++)
pow *= n;
return pow; // 返回pow的值
}
要声明函数的返回类型,在函数名前写出类型即可,就像声明一个变量那样。关键字 return 表明该函数将把它后面的值返回给主调函数。根据上面的代码,函数返回一个变量的值。返回值也可以是表达式的值,如下所示:
return 2 * x + b;
函数将计算表达式的值,并返回该值。在主调函数中,可以把返回值赋给另一个变量、作为表达式中的值、作为另一个函数的参数(如, printf("%f", power(6.28, 3) ),或者忽略它。
现在,我们在一个程序中使用这个函数。要测试一个函数很简单,只需给它提供几个值,看它是如何响应的。这种情况下可以创建一个输入循环,选择 while 循环很合适。可以使用 scanf() 函数一次读取两个值。如果成功读取两个值, scanf() 则返回2,所以可以把 scanf() 的返回值与2作比较来控制循环。还要注意,必须先声明 power() 函数(即写出函数原型)才能在程序中使用它,就像先声明变量再使用一样。程序清单6.20演示了这个程序。
程序清单6.20 power.c 程序
// power.c -- 计算数的整数幂
#include <stdio.h>
double power(double n, int p); // ANSI函数原型
int main(void)
{
double x, xpow;
int exp;
printf("Enter a number and the positive integer power");
printf(" to which\nthe number will be raised. Enter q");
printf(" to quit.\n");
while (scanf("%lf%d", &x, &exp) == 2)
{
xpow = power(x, exp); // 函数调用
printf("%.3g to the power %d is %.5g\n", x, exp, xpow);
printf("Enter next pair of numbers or q to quit.\n");
}
printf("Hope you enjoyed this power trip -- bye!\n");
return 0;
}
double power(double n, int p) // 函数定义
{
double pow = 1;
int i;
for (i = 1; i <= p; i++)
pow *= n;
return pow; // 返回pow的值
}
运行该程序后,输出示例如下:
Enter a number and the positive integer power to which
the number will be raised. Enter q to quit.
1.2 12
1.2 to the power 12 is 8.9161
Enter next pair of numbers or q to quit.
2
16
2 to the power 16 is 65536
Enter next pair of numbers or q to quit.
q
Hope you enjoyed this power trip -- bye!