一.題目條件
·題目
編寫程序,計算
\(e^x\)=\(1+x+\)\((x^2)/(2!)\)+\((x^3)/(3!)+(x^4)/(4!)+...+(x^n)/n!\)
·要求
輸入輸出格式要求:
1. 輸入格式:x n回車
2. ex, x, n均用double類型存儲。
3. 要求輸出小數點后6位。
4. 只輸出運算結果,請不要輸出其他字符。遇到異常情況(如n為負數),輸出error
·測試
輸入:3 10回車
輸出:20.079665
輸入:5.24 11回車
輸出:187.210665
輸入:5 -10
輸出:error
二.題目分析
- 題目的意思(大概)是輸入x和n的值,然后計算並輸出多項式的值。
- 要使用兩次循環:第一次是計算階乘;第二次是累加。
- 精度控制:printf函數里面給%lf添加修飾符。
三.代碼實現
#include <stdio.h>
#include <math.h>
int main() {
//sum為階乘,初始值為1(0!=1)
//sum2為多項式之和
double x, n,sum=1,sum2=0;
int i,j; //i,j為兩次循環的控制變量
scanf_s("%lf%lf", &x, &n);
//計算多項式累加求和
for (i = 0; i <= n; i++) {
//計算i的階乘
for (j=1; j <= i; j++)
sum = sum * j;
sum2 += pow(x, i) / sum;
}
printf("%.6lf", sum2);
return 0;
}
這里的代碼運行下來始終都不對勁,當時我頭都想大了(哭)。最后用萬能的調試解決了問題。大家也不妨來找找錯誤。
四.修正
- 糾正了上面的錯誤。(每次循環的時候都要將sum初始化)
- if語句判斷n的正負。
源碼如下
#include <stdio.h>
#include <math.h>
int main() {
//sum為階乘,初始值為1(0!=1)
//sum2為多項式之和
double x, n,sum=1,sum2=0;
int i,j; //i,j為兩次循環的控制變量
scanf_s("%lf%lf", &x, &n);
if (n < 0) printf("error");
else {
//計算多項式累加求和
for (i = 0; i <= n; i++) {
//計算i的階乘
sum = 1;
for (j = 1; j <= i; j++) {
sum = sum * j;
}
sum2 += (pow(x, i) / sum);
}
printf("%lf", sum2);
}
return 0;
}
拿下100分妥妥的。
