/*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 to which the number will be raised.\n");
printf("Enter p 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 enjoy this power trip -- bey!\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 p to quit.
6.6 6
6.6 to the power 6 is 82654
Enter next pair of numbers or q to quit.
q
Hope you enjoy this power trip -- bey!
这是本章最后一个程序,他所描述的是使用一个函数来计算数的次幂值。
要完成这样一个程序,可以分为三个任务完成1.设计算法 2.在函数中表示算法并返回计算结果 3.提供一个测试函数的便利方法。
完成一个程序,首先需要解决的是分析算法。这里把n和n相乘p次即可得到n的p次幂。这里自然要用到循环,先把变量pow设置为1,然后将其反复乘以n:
for (i = 1; i <= p; i++){
pow *= n;
}
这部分是实现整个程序的核心计算(挺简单的)
接下来要考虑的是如何将上面的内容用函数来实现。所设计的函数必须有两个参数,正如上面所示的pow 和 n,这两个数的值将在main函数中输入。函数还要返回一个值给main函数。所以这里有两个任务要完成:
- 定义函数时,确定函数的返回类型;
- 使用关键字return表明待返回的值。
double power (double n, int p) //函数定义
{
double pow = 1;
int i;
for (i = 1; i <= p; i++){
pow *= n;
}
return pow;//返回pow的值
}
完整的函数就是这样的。要声明函数的返回值类型在函数名前写出类型即可,和声明变量差不多。return表明函数将把它后面的值返回给主函数,正如上面所示,函数返回的是一个变量pow。当然返回值也可以是表达式的值,就像这样:return 2*x+y,函数将计算这条表达式的值,并返回这个值。在主函数中,可以把返回值赋值给另一个变量、作为表达式中的值、作为另一个函数的参数、或者忽略。
以上都是为了完成程序所要做的准备工作,现在来分析这个程序。
再将程序粘贴一遍。。。。。。
/*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 to which the number will be raised.\n");
printf("Enter p 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 enjoy this power trip -- bey!\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的值 }
该程序中main()是一个驱动程序,即被设计出来用来测试函数的小程序。
程序中的while循环使用了前面讨论过的scanf()函数作为判断条件。scanf()函数的返回值是输入的数的个数,这里输入两个数,使用值就是2 。当输入q时,与scanf()函数中的格式不匹配,返回0,循环结束。
这里的重点当然是函数相关的内容,本程序中出现的power()函数一个出现过3 次。
首次出现是在程序最前面,
double power (double n, int p);//ANSI函数原型
这是power()函数的函数原型,它声明程序将使用一个叫power()的函数。开头的double 表明power()函数返回一个double类型的值。编译器要知道power()函数的返回值类型,才能知道有多少字节的数据,以及如何解释他们。圆括号中的内容表示power()函数有一个double类型的参数和int类型的参数。
第二次出现是在while循环
xpow = power (x, exp); //调用函数
程序调用power()函数,把两个值传递给它,该函数计算x的xep次幂,并将返回值返回到main()函数中,赋值给变量xpow。
第三次出现在程序最后
double power (double n, int p) //函数定义
和开头第一次出现的很相像,但是它少一个分号。这里的n和p成为形参,在main函数中的两个量x和xep,在这里会分别代入n和p中,参与函数中的计算。
power()函数用for循环计算得到n的p次幂,并赋值给pow,返回pow的值。
在这个程序中,我们可以看到,声明函数、调用函数、定义函数、使用关键字return,都是定义和使用带返回值函数的基本要素。