博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C Primer Plus 第6章 C控制语句:循环 6.11 使用函数返回值的循环的例子
阅读量:6843 次
发布时间:2019-06-26

本文共 2113 字,大约阅读时间需要 7 分钟。

hot3.png

程序清单6.20 power.c程序

//power.c --计算数值的整数次幂#include 
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 121.2 to the power 12 is 8.9161Enter next pair of numbers or q to quit .2162 to the power 16 is 65536Enter 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

你可能感兴趣的文章
GBin1分享的8个图片360度旋转展示的jQuery插件
查看>>
分享11个超棒的移动应用(mobile apps)开发解决方案
查看>>
【Spring】依赖注入三种方式
查看>>
【安全牛学习笔记】 本地提权
查看>>
VS2017 创建NET Core 1.1 Web项目,发布后找不到引用的js文件
查看>>
Linux_Mail_Server
查看>>
网络相关排查总结
查看>>
C++错误收集(2)
查看>>
博客园的老虞要搬家罗
查看>>
Data Pump需要用到steam pool
查看>>
异步7月上市新书,送出一本你爱的
查看>>
如何查看、管理npm模块--react-native为例
查看>>
归档及压缩
查看>>
Redis基础及与spring的整合总结
查看>>
小型公司局域网故障排查(思科)
查看>>
搭建Mysql数据库
查看>>
构建Squid传统代理及透明代理
查看>>
Ejecta (HTML5 Canvas加速引擎)
查看>>
数据备份与恢复
查看>>
【比原链】比原链合约入门
查看>>