预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10
亲,该文档总共53页,到这已经超出免费预览范围,如果喜欢就直接下载吧~
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
《数值分析》上机实习题
秦九韶算法
1.源程序
#include<stdio.h>
#include<iostream.h>
//输出文件指针
FILE*stream=NULL;
typedeffloat*pFloat;
//和用户交互输入多项式各系数
boolInputParam(int&n,pFloat&a,float&x)
{
cout<<"秦九韶算法\n";
cout<<"请输入最高次数n:";
cin>>n;
if(n<=0)returnfalse;
a=newfloat[n+1];
for(inti=0;i<=n;i++)
{
cout<<"请输入a["<<i<<"]:";
cin>>a[i];
}
cout<<"请输入x的值:";
cin>>x;
returntrue;
}
//按照格式打印多项式到文件中
voidOutputTheMultinomial(intn,pFloata,floatx)
{
fprintf(stream,"此多项式为:\n");
fprintf(stream,"P(x)=");
for(inti=n;i>=2;i--)
{
fprintf(stream,"(%f)*x**%d+",a[i],i);
}
fprintf(stream,"(%f)*x+(%f)\n",a[1],a[0]);
fprintf(stream,"x=%f",x);
}
//根据多项式各系数及给定的x值计算
floatQinJiuShao(intn,pFloata,floatx)
{
floatr=a[n];
for(inti=n-1;i>=0;i--)
{
r=x*r+a[i];
}
returnr;
}
//计算第一题
voidCalculate1()
{
fprintf(stream,"秦九韶计算结果1\n");
intn=0;
float*a=NULL;//指向存放多项式系数的指针
floatx=0;
charnext='Y';
//和用户交互进行输入并计算
while(next=='Y'||next=='y')
{
if(InputParam(n,a,x))
{
//输出多项式
OutputTheMultinomial(n,a,x);
//输出结果
fprintf(stream,"\n计算结果为:P(%f)=%f\n",x,QinJiuShao(n,a,x));
if(a)
{
delete[]a;
a=NULL;
}
}
cout<<"是否进行下一次运算?(Y/N):";
cin>>next;
}
}
//计算第二题
voidCalculate2()
{
fprintf(stream,"秦九韶计算结果2\n");
//多项式系数
floata[]={2.0f,-3.36f,2.81f,-2.74f,-3.27f,0.22f};
intn=5;
floatx=0;
//按每次递增0.05计算
for(inti=0;i<=20;i++)
{
x=0.8+0.05*i;
//输出多项式
OutputTheMultinomial(n,a,x);
//输出结果
fprintf(stream,"\n计算结果为:P(%f)=%f\n",x,QinJiuShao(n,a,x));
}
}
voidmain()
{
//打开输出结果文件
if((stream=fopen("result.txt","w"))==NULL)
{
printf("打不开输出文件\n");
return;
}
//通过用户输入计算第一题
Calculate1();
//通过循环生成x值计算第二题
Calculate2();
//关闭文件
if(stream)
fclose(stream);
}
2.输出结果
秦九韶计算结果1
此多项式为:
P(x)=(7.540000)*x**4+(11.080000)*x**3+(3.820000)*x**2+(0.440000)*x+(-0.480000)
x=3.250000
计算结果为:P(3.250000)=1262.865112
此多项式为:
P(x)=(2.790000)*x**4+(9.850000)*x**3+(14.150000)*x**2+(5.380000)*x+(7.240000)
x=3.250000
计算结果为:P(3.250000)=823.586670
此多项式为:
P(x)=(9.360000)*x**4+(12.690000)*x**3+(14.390000