C Primer Plus 第6章 C控制语句:循环 6.11 使用函数返回值的循环的例子

原创
2016/06/04 06:25
阅读数 152

程序清单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 number or q to quit .
q 
Hope you enjoyed this power trip --bye!
*/
        

6.12.1程序讨论

main()程序是一个驱动程序的例子,驱动程序是用来测试一个函数的短小的程序。

现在我们来看一下函数相关的一些事情。power()函数在这个程序中出现了三次,第一次出现是这样的:

double power (doube n,int p);

这个语句声明程序将使用一个power()的函数。开始的关键字double表明power()函数会返回一个类型为double 的值。编译器需要知道power()的返回值类型,这样它才能知道 需要多少字节的数据以及如何解释它们,这也是您必须声明函数的原因。括号中的double n,int p说明power()接受两个参数和什么类型的参数。

第二次出现是这样的:

xpow=power(x,exp);

程序在这时辰 调用 了这个函数,并传递给它两个值。函数计算x的exp次幂,然后把结果返回给调用,接着返回值又被赋给变量xpow。

第三次出现是在函数定义的开始:

double power (double n ,int p ) //函数定义

在这里power()接受由变量n和p表示的两个参数。请注意在函数定义时,power()后面没有分号,而在函数声明时是有分号的。在函数头之后就是完成power()所做的事情的代码。

回忆一下,函数使用for循环来计算n的p次幂并把它赋值给pow。下面这行使pow成为函数的返回值 。

return pow

6.12.2 使用具有返回值的函数

声明函数、调用函数、定义函数、使用return关键字,这些就是在定义并使用具有返回值的函数时的基本要素。

为什么除了在定义中说明 power()的类型为double之外,还必须单独的声明这个函数?

编译器在程序中第一次遇到 power()时,它需要知道power()是什么类型。而此时编译器还没有遇到power()的定义,所以它并不知道定义中说明 了返回类型为double。为了帮助编译器,要通过使用一个前向声明来预先说明它是什么类型。这个声明通知编译器power()在其他地方定义而且它的返回值类型为double。如果您把power()的定义放在main()之前,就可以省略前向声明,因为编译器在到达main()之前已经知道了关于power()的所有信息。这是这不是标准c的风格。因为main()通常提供一个程序 的整体框架,所以最好是首先给出main()函数。此外函数经常放在单独的文件中,所以前向声明是必不可少的。

展开阅读全文
打赏
0
2 收藏
分享
加载中
更多评论
打赏
0 评论
2 收藏
0
分享
返回顶部
顶部