C primer plus 第六版 第九章 第九題 程式設計練習答案

Aeron-A發表於2018-06-01

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;
}

相關文章