【PTA—6-2多项式求值】本题要求实现一个函数,计算阶数为n,系数为a[0] ... a[n]的多项式f(x)=∑ ​i=0 ​n ​​ (a[i]×x ​i ​​ ) 在x点的值。

本题要求实现一个函数,计算阶数为n,系数为a[0] ... a[n]的多项式f(x)=∑​i=0​n​​(a[i]×x​i​​) 在x点的值。

函数接口定义:

double f( int n, double a[], double x );

其中n是多项式的阶数,a[]中存储系数,x是给定点。函数须返回多项式f(x)的值。

裁判测试程序样例:

#include <stdio.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;
}

/* 你的代码将被嵌在这里 */

输入样例:

2 1.1
1 2.5 -38.7

输出样例:

-43.1

解题如下:


首先说一下看到题目大家都能知道的解题思路:

1.遍历数组,获取每个元素

2.让每个元素乘以x的特定次幂

3.相加求和


在开始写的时候会发现多项式的第一个元素是x的0次幂,因此我单独将第一个元素拿出来判断,

下面贴一下我第一次写的代码:

double f(int n,double a[],double x)
{
    double sum=0.0;//定义总和
    int j;//定义循环变量
    for(j=0; j<=n; j++)
    {
        double m=1.0;//定义m为x的多少次幂,初始值为1
        if(j==0)//当为数组中第一个元素的时候,此时x的阶数为0
        {
            m=1.0;//因此x的0次幂 m=1
        }
        else//当为数组中其他元素的时候
        {
            int i=j;//将j的值赋值给i,因为若直接操作j的话会影响循环变量的值
            while(i>0)
            {
                m=m*x;//算出x的本次幂值
                i--;
            }
        }
        sum+=(a[j]*m);//最后求和
    }
    return sum;
}

满心欢喜的啥都没多想就提交了,遭受到现实的一击,duang~运行超时。。

 

不用想也知道,两层循环的问题=。=,因此需要优化到一层循环。。

下面贴出优化之后的第二次代码:

double f( int n, double a[], double x )
{
    double sum=a[0];//直接将总和初始化为a[0]*x^0,也就是a[0]
    int i;
    double m=1;//将m定义在循环之外

    //总和初始化之后,就将x的0次幂排除在外了
    for(i=1;i<=n;i++){
        m*=x;//m每次循环之后就可以保存上一次的值
        sum+=a[i]*m;//依次求和相加
    }
    return sum;
}

这样再次提交就可以的到15分了=。=

思路都在代码中注释了,应该很好理解的,有不对的地方还望路过的朋友积极指正=。=

-----------------------------------------------------------------------------------------------------------

个人总结:

在c语言中,数组名作为参数传递后,在函数中不能通过sizeof(数组名)/sizeof(数组类型)来获取数组的长度,因为这只是传递的数组的首地址,可以在传值之前先获取好数组的长度,然后通过参数传递到函数中来=。=(总结这个是因为在这个函数中刚开始还傻傻的获取数组长度,而且还把n直接无视,憨憨。。)

(因为一直用java,c语言特点都忘了,路过的大佬勿喷哈=。=)

 

 

  • 35
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com
### 回答1: 。函数接口定义: double f( int n, double a[], double x ); 其中给定阶数为n,系数为a[0] ... a[n],同时给定变量x。函数须返回多项式f(x)的。 裁判测试程序样例: #include <stdio.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; } /* 你的代码将被嵌在这里 */ 输入样例: 2 1.1 1 2.5 -38.7 输出样例: -36.2 【题目解析】 题目要求求出阶数为n,系数为a[0] ... a[n]的多项式f(x)=∑ i=0 n (a[i]×x i ) 在x本题的难在于多项式的求解方式,需要用到指数幂运算。 解决方法有两种: 1.使用pow函数进行指数幂运算,但由于pow函数计算效率不高,当指数较大时计算速度会变慢。 2.手动进行指数幂运算,即使用循环或递归的方式计算,但由于需要进行多次循环或递归,当指数较大时计算速度也会变慢。 本题可以使用第一种方法,即使用pow函数进行指数幂运算。 【参考代码】 ### 回答2: 本题要求实现一个函数计算阶数为n,系数为a[0] ... a[n]的多项式f(x)=∑ i=0 n (a[i]×x i ) 在x。 要实现这个函数,我们可以使用循环来逐个计算多项式中每一项的,然后将它们相加得到结果。 具体操作步骤如下: 1. 首先,定义一个函数poly_value(n, a, x),其中n表示多项式阶数,a为系数数组,x为要计算多项式。 2. 在函数中,初始化一个变量result为0,用来存储最终的多项式。 3. 使用一个循环,从i=0开始,逐个计算多项式中每一项的,并将它们累加到result中。循环条件是i<=n。 4. 在循环中,计算当前项的,即a[i]×x^i,并将结果累加到result中。 5. 循环结束后,返回result作为多项式在x。 下面是用Python语言实现这个函数的代码: ``` def poly_value(n, a, x): result = 0 for i in range(n+1): result += a[i] * x**i return result ``` 通过调用poly_value函数,并给定适当的参数,就可以计算多项式在特定了,例如: ``` coefficient = [1, 2, 3] # 系数数组 order = 2 # 多项式阶数 point = 4 # 要计算多项式 print(poly_value(order, coefficient, point)) # 输出多项式在x=4处的 ``` 以上代码将输出21,表示多项式f(x)=1×4^0 + 2×4^1 + 3×4^2在x=4处的为21。 ### 回答3: 实现这个函数需要首先了解多项式的概念。多项式由一系列的项构成,每个项由一个系数一个指数组成。在该题中,给定了多项式阶数n,及阶数为n的多项式系数a[0] ... a[n],需要计算多项式在给定的x。 为实现这个函数,我们可以使用循环遍历多项式的每一项,然后计算每一项的乘积并累加,最后得到多项式在给定x。 具体实现的伪代码如下: 1. 初始化变量result为0,用于保存累加的结果 2. 使用循环,遍历多项式的每一项,范围从i等于0到n a. 计算当前项的乘积,乘积为a[i]乘以x的i次方,结果保存在变量term中 b. 将计算得到的乘积term累加到result中,即result = result + term 3. 返回变量result作为多项式在给定x 具体实现的Python代码如下: ```python def calculate_polynomial_value(n, a, x): result = 0 # 初始化累加结果为0 for i in range(n+1): # 遍历每一项 term = a[i] * (x**i) # 计算当前项的乘积 result += term # 将当前项乘积累加到结果中 return result # 返回多项式在给定x ``` 以上就是实现一个计算多项式在给定x函数的方法。将多项式阶数n与系数a[0] ... a[n]作为参数传入函数,再传入所要计算的x,即可得到多项式在该x

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值