C语言实现“多项式求值”,基础编程由此开始(函数篇第二节)
多项式求值,是数学中非常常见的一项,给定一个多项式,给定一个未知数,来求值。
那这道题目呢,就是要求实现一个函数,计算阶数为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;
}
结果测试
总结
总的来说,这类函数题难度并不大,但关键是读懂题目,像我最开始做这道题的时候,就有些没看懂这道题目在讲些什么,主要是对数学式子多项式不是很清楚,但后来按照它给的测试样例代入进行测试后,然后反推逻辑,就知道了整个程序的要求,再来完成这道题目也就快了许多。