C Primer Plus学习_22 函数返回值应用

/*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函数。所以这里有两个任务要完成:

  1. 定义函数时,确定函数的返回类型;
  2. 使用关键字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,都是定义和使用带返回值函数的基本要素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值