多項式求值,是數學中非常常見的一項,給定一個多項式,給定一個未知數,來求值。
那這道題目呢,就是要求實現一個函數,計算階數為n,系數為a[0]...a[n]的多項式
f(x)=(a[i]*x^i)求和,然後求出在x點的值。
題目也給定了函數接口定義,以及對n、a[]、x的各個說明。
n是多項式的階數,a[]中存儲系數,x是給定點,函數須返回多項式f(x)的值。
梳理邏輯
看到這麼複雜的測試程序樣例,我一開始還真有些無從下手,反而浪費了不少時間。
我們先來看一下這道題目給的裁判測試程序樣例,可以發現。
這個-43.1是把數組中的每個元素按照多項式的形式進行求和所得到的。
并且最終保留一位小數。
具體實現過程如下圖所示:
那如何來寫這個子函數呢。
1、要求數組a的元素很好求,就是寫一個for循環遍曆即可。
2、x的幂次方怎麼寫,我們可以調用C語言當中的庫函數#include <math.h>,用裡面的pow函數求x的幂次方,比方說x的三次方,那就是pow(x,3)。
3、求和的話,就是定義一個變量sum=0,然後sum=sum 多項式,每次存儲一個多項式相加。
double f(int n, double a[], double x){
float sum=0;
for(int i=0;i<=n;i ){
sum = sum a[i]*pow(x,i);
}
return sum;
}
//多項式求值
#include <stdio.h>
#include <math.h>
#define MAXN 10
double f( int n, double a[], double x );
int main()
{
int n, i;
double a[MAXN], x;
scanf("%d %lf", &n, &x);
for ( i=0; i<=n; i )
scanf("%lf", &a[i]);
printf("%.1f\n", f(n, a, x));
return 0;
}
//這就是關鍵部分代碼,函數代碼
double f(int n, double a[], double x){
float sum=0;
for(int i=0;i<=n;i ){
sum = sum a[i]*pow(x,i);
}
return sum;
}
總結
總的來說,這類函數題難度并不大,但關鍵是讀懂題目,像我最開始做這道題的時候,就有些沒看懂這道題目在講些什麼,主要是對數學式子多項式不是很清楚,但後來按照它給的測試樣例代入進行測試後,然後反推邏輯,就知道了整個程序的要求,再來完成這道題目也就快了許多。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!