PTA基础编程题目集:函数题——多项式求值

  • Post author:
  • Post category:其他




题目

本题要求实现一个函数,计算阶数为

n

,系数为

a[0]



a[n]

的多项式(上图) 在

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



结尾无空行



编写

#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;

}

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

	double sum=a[0];

	double temp=1.0;
	int i;

	for(i=1;i<=n;i++){

		temp *= x;

		sum += temp*a[i];

		}

    return sum;
}

求解本题的基本思路:

在这里插入图片描述

上述多项式为了观察方便,我们可以写作:

在这里插入图片描述



1.主函数

​ 在主函数中我们已经得到了输入的n、x,即上述多项式中a[i]为a[n]。

​ 首先要得到要在开始计算之前让计算机得到a[n] (用户虽然输入了n,但是计算机并不会使用。),所以要采用循环的方式得到最大a[n]为a[2]。每次得到具体的a[i]时都要为其赋值才能进行后续计算(循环体)。

​ 打印时我们可以看到所求函数有三个参数n、a[]、x,很明显这是后续计算中需要用到的值。



2.计算函数

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

​ 很明显,这就是我们需要解决的函数。

​ 从这一行中,我们可以得到的内容除了三个参数以外,还有一个返回值类型(double)。


注:函数返回值类型即函数开头的数据类型(非常好找)。如果是以void开头则表示没有返回值,不需要在函数结束时写return,否则必须写一个返回值。

​ 现在可以开始分析应该怎么表示多项式的和了。其实我们很容易就可以总结出,在一个式子中如果一个运算符号多次出现就一定会使用到循环。

​ 首先,我们拆解多项式把它分成很小的计算机能够理解的部分。比如:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uoEyP7wj-1635908980299)(C:\Users\26890\AppData\Roaming\Typora\typora-user-images\image-20211103103628676.png)]

​ 我们可以发现这就是多个



的和组成的,我们把和这个变量命名为sum。继续拆解,可以拆成a[i]和

​ a[i]我们已经在主函数赋值。



则是由多个x相乘得到的,我们把乘积这个变量命名为temp。



3.整合

​ 在主函数中,对于i=0,n=2,x=1.1(因为多项式是由a[0]加到a[n])来说现在已经得到了,a[0]=2、a[1]=1、a[2]=-38.7。(数据都是输入样例中的。)

​ 在计算函数中,我们只要得到最终的sum即最后多项式的和再返回就可以了。

​ 最终



(这里学过赋值就很好理解了),往前推就能很轻易得到sum的初值应该为a[0],也能判断出循环中的i初值为1。




temp初值一定为1。

​ 最后 ,



​ 所以计算函数应为:

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

	double sum=a[0];

	double temp=1.0;
	int i;

	for(i=1;i<=n;i++){

		temp *= x;

		sum += temp*a[i];

		}

    return sum;
}



版权声明:本文为qq_46000312原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。