文档章节

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

idreamo
 idreamo
发布于 2016/06/04 06:25
字数 1027
阅读 100
收藏 2

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

© 著作权归作者所有

idreamo
粉丝 18
博文 139
码字总数 224743
作品 0
青岛
产品经理
私信 提问
C Primer Plus 第6章 C控制语句:循环 6.1 再探while循环

程序清单6.1 summing.c 6.11 程序注释 这个循环的判断表达式是:status==1;==运算符是C的相等运算符。当status的值不为1时终止循环。 要使程序正确运行,在每次循环中应该为num获取一个新值,...

idreamo
2016/05/26
58
0
C Primer Plus 第6章 C控制语句:循环 6.5 for循环

for 循环把所有这三种动作(初始化、测试、更新)都放在一起。通过使用for循环,您可以用程序清单6.11中的程序来代替前一个程序 。 程序清单6.11 sweetie2.c 在关键字for之后的圆括号中包含了...

idreamo
2016/05/31
23
0
C Primer Plus 第9章 函数 9.3 递归

9.3.1 递归的使用 为了具体说明,请看下面的例子。程序清单9.6中函数main()调用了函数upanddown()。我们把这次调用称为“第一级递归”。然后upanddown()调用其本身,这次调用叫做“第二级递...

idreamo
2016/07/12
81
0
C Primer Plus 第6章 C控制语句:循环 6.11 数组

float debts[20]; 声明debts是一个具有20个元素的数组,其中每一个元素都是一个float类型的值。这个数组的每一个元素称为debts[0],第二个元素称为debts[1],这样直到debts[9]。注意元素编号...

idreamo
2016/06/02
68
0
C Primer Plus 第9章 函数 9.11 编程练习答案

1、设计函数min(x,y)返回两个double数值中较小的数值,同时用一个驱动程序测试该函数。 2、 设计函数chline(ch,i,j),实现指定字符在i列到j列的输出,同时用一个驱动程序测试该函数。 3、编写...

idreamo
2016/07/19
344
0

没有更多内容

加载失败,请刷新页面

加载更多

作为一个(IT)程序员!聊天没有话题?试试这十二种技巧

首先呢?我是一名程序员,经常性和同事没话题。 因为每天都会有自己的任务要做,程序员对于其他行业来说;是相对来说比较忙的。你会经常看到程序员在发呆、调试密密麻麻代码、红色报错发呆;...

小英子wep
今天
15
0
【SpringBoot】产生背景及简介

一、SpringBoot介绍 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程,该框架使用了特定的方式来进行配置,从而使开发人员不再需要...

zw965
今天
5
0
简述并发编程分为三个核心问题:分工、同步、互斥。

总的来说,并发编程可以总结为三个核心问题:分工、同步、互斥。 所谓分工指的是如何高效地拆解任务并分配给线程,而同步指的是线程之间如何协作,互斥则是保证同一时刻只允许一个线程访问共...

dust8080
今天
6
0
OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
3.4K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部