C primer plus 第六版 第九章 第九题 编程练习答案

版权声明:转载请注明来源~ https://blog.csdn.net/Lth_1571138383/article/details/80536267

Github 地址:这里这里φ(>ω<*)

/*

    本程序应 习题-9 建立。
  题目要求: 使用递归函数重写编程练习8。
*/


#include<stdio.h>


double power(double x, int y, const double first_x);


int main(void)
{
double value = 0;
double f = 0;
int m = 0;


double first_x = 0;      // 保存求幂运算指数,为求幂运算而建立。


printf("Enter a number and to positive integer power to which.\n");
printf("The number will be raised. Enter q to quit.\n");
printf("Now, please enter number :");


while (scanf_s("%lf%d", &value, &m) == 2)
{
const double first_x = value;   // 保存求幂运算指数。并用 const 锁定。


f = power(value, m, first_x);


if (f == 0)
{
printf("Please input again :");
continue;
}
else
{
// 空语句。
;
}
printf("%.3g to the power %d is %.5g \n\n", value, m, f);
printf("Enter next pair of numbers or q to quit :");
}


printf("Bye !\n");


return 0;






return 0;
}


double power(double x, int y, const double first_x)

double one = 1;      // 计算负幂用。


int i = 1;           // 对比 幂 的次数,递归处 if表达式 使用。 


double value = 0;    // 接受递归调用函数的返回值。


if (x == 0 && y == 0)
{
// 在指数为 0 , 0 次幂的情况下。报告 0 的 0 次幂未定义,把该值处理为 1。
}
else if (x == 0)
{
// 在指数为 0 时,报告 0 的任何次幂都为 0。
printf("0 的任何次幂都为 0, 请重新输入。\n");
}
else if (y == 0)
{
// 在幂为 0 的情况下, 报告任何数的0次幂都为1。
printf("任何数的0次幂都为1, 请重新输入。\n");
}
else
{
// 空语句。
;
}


/* point !!  本题核心。
        本题要求以递归函数实现求幂运算。
递归的难处之一在于结点,即结束点。

本程序将以 求幂运算的 幂 的次数作为结点,
每递归一次该函数,则 进行一次求幂运算;相应的,幂的次数减1。
幂的次数为0 则结束递归。


*/


if (i != y)
{
// 每次递归,幂的次数 y 自减。减到0结束。
// first_x 为指数,为求幂运算而建立。
x *= first_x;
y--;
value = power(x, y, first_x);
}
else
{
value = x;
}




if ( first_x < 0 )
{
// 在指数小于0的情况下,即为负数。则进行负幂计算。 
// (负幂计算即为 x的y次幂 求其幂的倒数即可得出。 )
value = one / value;
}
else
{
// 空语句。
;
}


return value;
}

猜你喜欢

转载自blog.csdn.net/Lth_1571138383/article/details/80536267