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;
}
结果测试
总结
总的来说,这类函数题难度并不大,但关键是读懂题目,像我最开始做这道题的时候,就有些没看懂这道题目在讲些什么,主要是对数学式子多项式不是很清楚,但后来按照它给的测试样例代入进行测试后,然后反推逻辑,就知道了整个程序的要求,再来完成这道题目也就快了许多。
相关文章
- Linux服务器硬件信息查询与日常运维命令总结
- Linux服务器带宽跑不满?用ethtool调优网卡参数,性能提升30%
- 如何在 Rocky Linux 中查看网卡流量?跟着小编学习iftop安装和使用
- Linux查看网卡速率_linux查看网卡当前速率
- 五一我要看七天小说!免费开源的轻量化书库talebook搭建流程。
- 我是如何用这3个小工具,助力小姐姐提升100%开发效率的
- html5和css3的常用参考网_基于html5和css3的网页制作
- 超详细的网络抓包神器 tcpdump 使用指南
- Vue 技术栈(全家桶)_vue全栈项目教程
- 学习ES6- 入门Vue(大量源代码及笔记,带你起飞)