C语言实现“多项式求值”,基础编程由此开始(函数篇第二节)

C语言实现“多项式求值”,基础编程由此开始(函数篇第二节)

编码文章call10242024-12-13 11:58:5153A+A-

多项式求值,是数学中非常常见的一项,给定一个多项式,给定一个未知数,来求值。

那这道题目呢,就是要求实现一个函数,计算阶数为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;
}

结果测试

总结

总的来说,这类函数题难度并不大,但关键是读懂题目,像我最开始做这道题的时候,就有些没看懂这道题目在讲些什么,主要是对数学式子多项式不是很清楚,但后来按照它给的测试样例代入进行测试后,然后反推逻辑,就知道了整个程序的要求,再来完成这道题目也就快了许多。

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4