《2022年2022年计算圆周率. .pdf》由会员分享,可在线阅读,更多相关《2022年2022年计算圆周率. .pdf(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 C 程序设计课程设计报告(2015 2016 学年第 2 学期)题目:计算圆周率学院:电气与电子工程学院班级:电气 1309 学号:1304080053 姓名:余康指导教师:罗涛华老师时间:起2015.4.27 止2015.4.30 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 21 页 - - - - - - - - - 2 一、课程设计基本信息课程代码: 05190124 课程名称:计算机基础课程设计课程英文名称 : Computer-based Course
2、Design 课程所属单位(院(系) 、教研室):数学与计算机学院计算机基础课程群课程面向专业:食品科学与工程学院、机械工程学院、电气与电子工程学院、土建学院、动物科学与营养工程学院、化学与环境工程学院、工商管理类、国际经济与贸易、旅游管理、金融学、行政管理、汉语言文学、英语、护理学、康复治疗专业、生物科学类、制药工程、制药工程(生物制药 )、药物制剂、物流管理课程类型:必修课先修课程:大学计算机基础通识选修课程、程序设计课程学分: 1 总学时: 1 周二、课程设计目标掌握所学语言程序设计的方法,熟悉所学语言的开发环境及调试过程,熟悉所学语言中的数据类型,数据结构、语句结构、运算方法,巩固和加
3、深对理论课中知识的理解,提高学生对所学知识的综合运用能力。通过综合设计要求达到下列基本技能:1培养查阅参考资料、手册的自学能力,通过独立思考深入钻研问题,学会自己分析、解决问题。2通过对所选题目方案分析比较,确立方案,编制与调试程序,初步掌握程序设计的方法,能熟练调试程序。3系统设计编程简练,可用,功能全面,并有一定的容错能力。用户界面良好,有较好的输出功能。在完成课题基本要求后,具有创新型设计,具有一定的实用价值。4根据个人的设计调试过程,撰写设计报告。三、课程设计内容熟练掌握所学语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等) ;运算类型 (算术运算、 逻辑运算、 自增自
4、减运算、 赋值运算等);程序结构 (顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。进一步掌握各种函数的应用,包括时间函数、绘图函数,以及文件的读写操作等。四、课程设计要求1.要求每个同学都要认真对待,积极参与。2.课程设计结束时,提交完成的所有源程序、相关文件和可执行文件。同时填写并完成课程设计报告册。3.不符合要求的程序、设计报告、抄袭的设计报告或源程序代码、在设计中完全未参与的将作不及格处理。五、考核方式指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、 创新精神名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -
5、 - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 21 页 - - - - - - - - - 3 和设计报告等进行综合考评,百分制计算,具体考核标准主要包含以下几个部分:1.程序运行情况20 分2.程序功能的完善程度10 分3.程序结构的合理性10 分4.对问题的答辩情况20 分5.创新情况10 分6.学生的工作态度与独立工作能力10 分7.设计报告内容的规范性20 分备注 : 1.按规定时间填写各阶段文档,学习态度加5 分2.设计报告内容雷同扣40 分,无调试过程问题分析扣10 分,无参考文献扣10 分3.源程序无注释则在程序结构合理性扣10 分六
6、、课程设计主要参考资料1.谭浩强著 . C程序设计(第3 版) . 北京:清华大学出版社,2005.7 2.刘光蓉、汪靖、陆登波主编. C程序设计实验与实践教程. 北京:清华大学出版社,2011.2 3.游洪跃主编 . C语言程序设计实验与课程设计教程. 北京:清华大学出版社,2011.5 4.(美) Perter Van Der Linden 著,徐波 译. C 专家编程 (C编程语言经典之作) . 北京:人民邮电出版社,2008.2 5.凯尼格著,高巍译. C陷阱与缺陷 . 北京:人民邮电出版社,2008.2 6.Mark de Berg 等著,邓俊辉译, 计算几何 -算法与应用(第3版)
7、 ,清华大学出版社, 2009 年 8 月7.杨克昌编著, 计算机程序设计典型例题精解,国防科技大学大学出版社,1999年 3 月七、课程设计计划安排时间任务课程设计前一周选择课程设计题目,分析课题的要求,确定设计方案, 完成报告册中“课程设计概述”课程设计第1 天按功能模块编写详细设计说明,完成报告册中“总体设计”课程设计第2 天编写程序、调试程序课程设计第3 天编写程序、调试程序,完成报告册中“详细设计”课程设计第4 天调试程序,完成报告册中“调试分析过程”课程设计第5 天完成报告册中“总结”、“参考文献”、“课程设计评审表”部分内容,提交课程设计报告、源程序、面试或答辩名师资料总结 -
8、- -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 21 页 - - - - - - - - - 4 一、课程设计概述课程设计问题描述之前所学的C语言中已经接触过,但是算法单一,采用级数,而且收敛较慢,故运行时间较长,此程序设计要解决的问题是如何实现高精度的运算,如何对结果进行输出,并且尝试采用不同的方法进行求解圆周率设计要求1. 要求每个同学都要认真对待,积极参与。2. 课程设计结束时,提交完成的所有源程序、相关文件和可执行文件。同时填写并完成课程设计报告册。3. 不符合要求的程序、设计报告
9、、抄袭的设计报告或源程序代码、在设计中完全未参与的将作不及格处理。设计目的掌握所学语言程序设计的方法,熟悉所学语言的开发环境及调试过程,熟悉所学语言中的数据类型, 数据结构、语句结构、运算方法,巩固和加深对理论课中知识的理解,提高学生对所学知识的综合运用能力。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 21 页 - - - - - - - - - 5 开发环境1. Visual c+6.0. 2. 电脑3. Win7操作系统4. 各个办公软件名师资料总结 - - -精
10、品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 21 页 - - - - - - - - - 6 二、总体设计 (1) 系统功能需求分析此系统主要功能是用不同的方法求圆周率,并且比较不同方法的优缺点,要实现目标就要完成以下步骤:1 要知道多种求圆周率的方法。2 要熟练掌握相关的C语言知识。3 学会将求圆周率的算法转换成C语言程序。4 将每一个算法C语言程序整合到一个C 语言程序中。5 调试 C语言程序,找出错误并修正。6 测试实验结果,输出各个算法的结果,并进行比较,看各个算法的精确度。此系统实现
11、的关键是知道圆周率的算法,以及C 语言的转换,要熟练掌握C语言知识,建立C语言转换逻辑思维。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 21 页 - - - - - - - - - 7 二、总体设计 (2) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 21 页 - - - - - - - - - 8 系统总体设计框架main suiji()n
12、eijie()jishu()waiqie()名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 21 页 - - - - - - - - - 9 三、详细设计 (1) 主要功能模块的算法设计随机数法求圆周率可以利用计算机中随机数函数模拟出两个01 之间的浮点型点(x,y),建立直角坐标系思想,利用边长为1 的正方形内切半径为0.5 圆的方程 (x-0.5)*(x-0.5)+(y-0.5)*(y-0.5)=0.25判断点是否在圆内,用计数器b 保存在的点,如此模拟5000 次。
13、用落入圆内的点数b 的 4 倍除以总的扔的点数 N用,可大概求出圆周率的值。一般来说,根据概率思想, N 值越大,模拟次数越多,其求出来圆周率的值越接近真实的圆周率。祖冲之迭代法因为圆内接正六边形边长等于半径的思想,故可以从正六边形出发,不断迭代,当正多边形边数增加时,其周长也逐渐逼近圆的周长,反过来即可求的一定精度的圆周率,设圆内接正六边形的边长为b, 边数为i ,利用公式22( 221) / 2iixx进行迭代运算,为了提高精度, 算法中对公式进行分开运算,求得边数为2i的圆内接正多边形后得出其周长,运用迭代后的正多边形周长减去迭代前的正多边形周长,获取其精度程度。如果最终求出的圆内接正多
14、边形的周长,即接近圆的周长,最后利用数学公式即可以求出圆周率。输出其最后迭代后得圆内接正多边形的边数和圆周率即可。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 21 页 - - - - - - - - - 10 用级数法求圆周率, 定义一个 a400 的数组用于存储计算结果,从结果出发,因为其要输出一定精度的圆周率,若 n 值太大会造成计算冗余,利用数学中不等式确定其 n 项,用一个循环从n1 计算每一项的值并存储,1+n/(2n+1) 用数组模拟手工乘除加法,除法 1
15、/(2n+1) ,相除后商为a0 ,然后将余数乘以10,作为被除数再除以除数取商为十分位,存于a1,如此类推;乘法则每个数组乘以n,如果满十则向前面数组进一,再取其个位存储;加法因为加1,则直接可以加到a0 上。然后保存计算结果后用该值计算n-1 项,如此重复一直到第1 项后按照格式输出每个数组元素即可。附加题圆外切正多边形与圆内接正多边形算法相似,但是圆半径的长度为1 时,其外切正六边形的边长为2*sqrt(3)/3,并且其迭代公式也相应的进行了改变,b=2*(sqrt(b*b+4)-2)/b;由于圆外切正多边形迭代后的周长小于迭代前的周长,故控制精度时用迭代前的正多边形周长减去迭代后的正多
16、边形边长。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 21 页 - - - - - - - - - 11 三、详细设计 (1) 主要功能模块源程序#include #include #include #include #define N 5000 void main() void jishu(); void neijie(); void suiji(); void waiqie(); suiji(); printf(-n); neijie(); printf(-n)
17、; jishu(); printf(-n); waiqie(); printf(-n); void suiji() double x,y; int a=0,b=0; srand(time(0); while(a+=N)/投 5000 次点 x=(double)rand()/RAND_MAX;/产生 01 之间的浮点数y=(double)rand()/RAND_MAX;/产生 01 之间的浮点数if(x-0.5)*(x-0.5)+(y-0.5)*(y-0.5)=0.25)/判断所产生的点是否在圆内b+;/汇总落在圆内的点数 printf(用随机数法求得=%lfn,4.0*b/N); void n
18、eijie() double e,b=1,d; /b:为正多边形边长 long int i; /i:正多边形边数 for(i=6;i*=2) /正多边形边数加倍 d=1.0-sqrt(1.0-b*b/4); /计算圆内接正多边形的边长名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 21 页 - - - - - - - - - 12 b=sqrt(b*b/4+d*d); if(2*i*b-i*e 1e-15) /2*i*b迭代后的周长,i*e 原来的周长 break; /
19、精度达 1e-15 则停止计算 e=b; /保存本次正多边形的边长作为下一次精度控制的依据 printf( 用圆内接正多边形计算 =%.15lfn 迭代后得正多边形的边数为: %dn,i*b,i); void waiqie() double e,b=2*sqrt(3)/3,d; /b:为正多边形边长 long int i; /i:正多边形边数 for(i=6;i*=2) /正多边形边数加倍 e=b; /e:暂存边数为加倍前的边长 d=sqrt(1.0+b*b/4)-1; /计算圆外切正多边形的边长 b=2*(b*b/4-d*d)/b; if(i*e-2*i*b 1e-15) break; /精
20、度达 1e-15 则停止计算 e=b; /保存本次正多边形的边长作为下一次精度控制的依据 printf( 附加题 : 外切正多边形计算=%.15lfn 迭代后得正多边形的边数为: %dn,i*b,i); void jishu() float s; int x,b,c,i,j,n,e,a400; for(s=0,n=1;n100) break; for(i=0;i=1;b-) c=2*b+1;/首先用除法计算1/2n+1 的高精度商for(i=0;i=0;i-)/计算 n/(2n+1) 的高精度值 ai=ai*b+j;/数组模拟手工乘法,每个数组乘以n j=ai/10;/如果満十则对前面数组进1
21、 ai=ai%10;/而该数组取个位 a0=a0+1;/计算 1+n/(2n+1) 的高精度值 x=a0; for(j=0,i=101;i=0;i-) ai=ai*2+j;j=ai/10;ai=ai%10;/因为公式左边还有个1/2 ,对结果整体乘以二,模拟手工乘法 printf(用级数方法求得=%d.,a0);/控制格式并输出结果for(e=0,i=1;i=100;i+) printf(%d,ai); e+; if(e%30=0) printf(n ); printf(n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名
22、师精心整理 - - - - - - - 第 13 页,共 21 页 - - - - - - - - - 14 三、详细设计 (2) 主要功能模块的算法设计程序运行结果测试与分析由输出结果可以看出,随机数法求得圆周率浮动较大,也许是 N 值设为 5000 还过于小造成结果误差大,然后把N 值设为 50000 后继续测试如下名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 21 页 - - - - - - - - - 15 当 N值为 50000 时,测试结果较为接近圆周率且
23、比较数值浮动较小,其余小问测试结果基本接近真实圆周率的值,基本完成程序设计目标。+名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 21 页 - - - - - - - - - 16 三、详细设计 (2) 主要功能模块源程序名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 21 页 - - - - - - - - - 17 四、调试分析过程(1) 调
24、试过程出现的问题及解决方法在设计过程中遇到第三小问需要保存100 位圆周率的时候,和同学讨论后才明白结果可以用数组保存并输出,附加小问时圆外切正多边形时刚来采用的是d=sqrt(1.0+b*b/4)-1;b=2*(sqrt(b*b+4)-2)/b, 后 来 发 现 误 差 很 大 , 改 用 公 式b=2*(b*b/4-d*d)/b才能够接近,思考后发现b=2*(b*b/4-d*d)/b(误差较小)将d代入,得b=2*(b*b/4-(sqrt(b*b/4+1)-1)*(sqrt(b*b/4+1)-1)/b;(就这样写误 差 还 是 比 较 小 的 , 几 乎 跟 内 切 法 的 精 度 一 样
25、 ) , 再 化 简 得b=2*(b*b/4-(b*b/4+1)-1+2*sqrt(b*b/4+1)/b;(这个时候误差就大了 , i只 有49152) , 再 化 简b=2*(2*sqrt(b*b/4+1)-2)/b即b=2*(sqrt(b*b+4)-2)/b(误差依然比较大 ), 所以断定 d*d 为误差所在。我 的 理 解 : 无 论 如 何 , b,d等 这 些 值 是 一 定 有 偏 差 的 ,b=2*(b*b/4-d*d)/b=2*(b/2+d)*(b/2-d)/b,由于 d 进行了开根处理,误差微乎其微,几乎可以忽略不计,即可以当他们是常数,这个式子的误差级别 y=ax+b(a,
26、b 为常量 ) , b=2*(sqrt(b*b+4)-2)/b的误差级别y=a/x+b(a,b为常量 ) ,x 在(0,1 区间显然后者的误差比较大);调试程序的时候会遇到小错误,但经过反复修改后程序能够运行。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 21 页 - - - - - - - - - 18 四、调试分析过程(2) 测试数据及测试结果名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心
27、整理 - - - - - - - 第 18 页,共 21 页 - - - - - - - - - 19 五、总结设计用到的知识点1. 函数的递归调用2. 循环结构3. 一维数组。收获与体会我们应当用不同方向和方法去解决问题。在我们解决不了问题的时候,要尝试着去分析问题回归问题的最基本。不足与努力方向多次失败,让我找到了前进的方向,不得不说,C 语言是一个神奇的东西,以后会更加努力学习相关知识。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 21 页 - - - - -
28、- - - - 20 六、参考文献参考书籍及参考论文与网址1 ,百度百科(祖冲之迭代法)2 杨克昌编著,计算机程序设计典型例题精解,国防科技大学大学出版社,1999 年 3 月,第 297-299 页)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 21 页 - - - - - - - - - 21 课程设计成绩评审表姓名余康学号1304080053 班级1309 设计题目计算圆周率 作品描述高精度的运算,如何对结果进行输出,并且尝试采用不同的方法进行求解圆周率指导教师
29、评语观测内容分值评分(上限)得分A B C D E 程序运行情况20 20 15 10 5 3 程序功能的完善程度10 10 8 6 4 2 程序结构的合理性10 10 8 6 4 2 对问题的答辩情况20 20 15 10 5 3 创新情况10 10 8 6 4 2 工作态度与独立工作能力10 10 8 6 4 2 设计报告内容的规范性20 20 15 10 5 3 指导教师评定成绩指导教师(签名)年月日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 21 页 - - - - - - - - -