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

本文介绍了一个使用C语言编写的简单程序,该程序通过一个名为power的函数计算一个数的整数次幂。文章详细解释了函数声明、调用及定义的过程,并探讨了为何需要在函数定义前进行类型声明。

程序清单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()函数。此外函数经常放在单独的文件中,所以前向声明是必不可少的。

转载于:https://my.oschina.net/idreamo/blog/686901

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值