1、36基于梯形法和辛普生求定积分河北工业大学计算机软件技术基础(VC)课程设计报告学院城市学院院班级电信C1136 姓名 王梦迪 学号116108 _成绩 _ _一、题目:基于梯形法和辛普生法求定几分的程序二、设计思路1、总体设计1)分析程序的功能用梯形法和辛普生法求定积分,输入数据,通过调用函数和for循环,计算出他们的定积分。在输出结果中比较,不同的数据,两种方法的精度不同,可通过结果的小数位数,确定哪种方法的精度高。2)系统总体结构:设计程序的组成模块,简述各模块功能。A、对函数进行宏定义,以及调用函数的原型声明。B、编写程序,列出计算公式。C、调用函数用梯形法求定积分:通过函数的调用,利
2、用梯形法的公式求定积分。D、调用函数用辛普生法求定积分:通过函数多次调用,用辛普生法的公式求定积分.2、各功能模块的设计:说明各功能模块的实现方法1) 对源程序的函数源进行声明及宏定义,便于后面的调用。2)主函数部分:编写好主函数程序,里面含有函数调用,成为主调函数;。3)梯形法求定积分:即被调函数部分,利用函数调用及for循环求累加和,计算出此时的函数值并将其反回到主函数中。4)辛普生法求定积分:调用函数求函数值,并利用for循环求累加和。计算出函数的值并返回到主函数中。3、设计中的主要困难及解决方案1)困难1:函数调用比较多,程序冗长,容易出现混乱。解决方案:函数的取名要尽量简单,取名之后
3、按顺序排放。 2)困难2:计算函数时,涉及到多个函数计算以及for循环求累加和。解决方案:清晰地定义多个函数,及宏定义,利用函数调用的知识,每计算一步,要用return返到主函数中。4、你所设计的程序最终完成的功能1) 向程序中输入a,b,n的值后,会分别用梯形法和辛普生法计算出相应的结果。2) 准备的测试数据和运行结果:三、程序清单#include #include #define HIGH1(a,b,n) (b-a)/n /宏定义 double F1(double x,double y,int z); / 函数原型说明double F2(double x,double y,int z);d
4、ouble f1(double u);double f2(double v);double sum1(double c,double d,int e);double sum2(double p,double q,int r);#define HIGH2(a,b,n) (b-a)/(2*n) /宏定义double F3(double x,double y,int z); /函数说明 double F4(double x,double y,int z); double f3(double u); double f4(double v); double sum5(double p,double q,
5、int r); double sum6(double p,double q,int r); double sum3(double c,double d,int e); double sum4(double c,double d,int e); void integralts(double x,double y,int z,double (*f)(double,double ,int);void integralt(double x,double y,int z,double(*f)(double,double,int);void main() /主函数 int n; double a,b; c
6、outabn; couta=anb=bnn=nendl; cout梯形法:endl; coutintesum1=; integralt(a,b,n,F1); /应用函数指针调用函数 coutintesum2=; integralt(a,b,n,F2); /应用函数指针调用函数 cout辛普生法:endl; coutintesum1=; integralts(a,b,n,F3); /应用函数指针调用函数 coutintesum2=; integralts(a,b,n,F4); /应用函数指针调用函数void integralt(double x,double y,int z,double (*f
7、)(double,double,int) / 利用梯形法球定积分 double ff; ff=(*f)(x,y,z); /用函数指针调用F1函数 coutffendl; double F1(double x,double y,int z) double h,Y1; /定义局部变量 h=HIGH1(x,y,z); /调用宏定义 Y1=h/2*(f1(x)+f1(y)+2*sum1(x,y,z); /梯形法公式 return Y1; /返回梯形法得到的1+x*x的定积分的值double F2(double x,double y,int z) double h,Y2; /定义局部变量 h=HIGH1
8、(x,y,z); /调用宏定义 Y2=h/2*(f2(x)+f2(y)+2*sum2(x,y,z); /梯形法公式,调用f2,sum2函数 return Y2; /返回梯形法得到的1+x+x*x+x*x*x 的定积分的值double f1(double u) double y1; /定义变量 y1=u*u+1; return y1; /返回值 double f2(double v) double y2; /定义变量 y2=1+v+v*v+v*v*v; return y2; /返回值double sum1(double c,double d,int e) double h=HIGH1(c,d,e
9、); /调用宏定义 double s1=0; /定义变量 for(int i=1;i=e-1;i+) /for循环 double g=c+i*h; s1+=f1(g); return s1; /返回值double sum2(double p,double q,int r) double h=HIGH1(p,q,r); /引用宏定义 double s2=0; /定义变量 for(int i=1;i=r-1;i+) /for循环 double g=p+i*h; s2+=f2(g); return s2; /返回值 void integralts(double x,double y,int z,do
10、uble (*f)(double,double ,int) /辛普生法 double ff; ff=(*f)(x,y,z); /函数指针 coutffendl;double F3(double x,double y,int z) double h,Y1; /定义变量 h=HIGH2(x,y,z); Y1=h/3*(f3(x)+f3(y)+4*sum5(x,y,z)+2*sum6(x,y,z); /调用f3,sum5,sum6函数 return Y1; /返回值double F4(double x,double y,int z) double h,Y2; h=HIGH2(x,y,z); Y2=h
11、/3*(f4(x)+f4(y)+4*sum3(x,y,z)+2*sum4(x,y,z); return Y2;double f3(double u) double y1=1+u*u; return y1;double f4(double v) double y2=1+v+v*v+v*v*v; return y2;double sum5(double p,double q,int r) double h=HIGH2(p,q,r); double s=0; for(int i=1;i=2*r-1;i+=2) /for循环 double g=p+i*h; s+=f3(g); return s; do
12、uble sum6(double p,double q,int r) double h=HIGH2(p,q,r); double s=0; for(int i=2;i=2*r-2;i+=2) /for循环 double g=p+i*h; s+=f3(g); return s; double sum3(double c,double d,int e) double h=HIGH2(c,d,e); double s=0; for(int i=1;i=2*e-1;i+=2) double g=c+i*h; s+=f4(g); return s; double sum4(double c,double
13、 d,int e) double h=HIGH2(c,d,e); double s=0; for(int i=2;i=2*e-2;i+=2) double g=c+i*h; s+=f4(g); return s;四、对该设计题目有何更完善的方案1、对自己完成程序进行自我评价。复习了函数和函数指针部分的内容,通过运用函数调用,for循环以及累加和运算,经过反复调试,将近一周的时间,终于完成了课程设计,感觉很充实,进一步熟悉了函数的运用,进步很大,同时课设过程中也是遇到很多困难,通过和同学的讨论和向老师的请教,终于完成了课程设计。2、对课题提出更完善的方案改程序,使一次运行中,可以输入多组数据,并进行计算,在输出结果中可以直观的比较出梯形法与辛普生法求定积分的精度问题。五、收获及心得体会1、通过本次课程设计,自己在哪些方面的能力有所提高。熟悉了函数和函数指针的知识,以及for循环和函数累加和的应用。提高了自学能力,通过不断地调试程序,不断的改进,在此过程中,磨砺了自己的毅力,最终程序成功运行,更增强了今后在学习中的自信。2、 收获和心得体会。1)首先要有耐心;2)增强自学能力,不会就问,或查资料;3)锻炼自己的意志,要能坚持,不放弃,要自信。日期: 2012 年06 月28 日
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1