C语言数学计算工具设计报告

上传人:wuy****ng 文档编号:157482794 上传时间:2022-09-29 格式:DOC 页数:13 大小:284.52KB
返回 下载 相关 举报
C语言数学计算工具设计报告_第1页
第1页 / 共13页
C语言数学计算工具设计报告_第2页
第2页 / 共13页
C语言数学计算工具设计报告_第3页
第3页 / 共13页
点击查看更多>>
资源描述
昆明理工大学计算机程序设计基础课程综合实践型教学课题报告课题名称: 数学计算工具程序设计 组长: 学号 040501002姓名贤天华组员: 学号 040501027 姓名王平学号 040501033 姓名许杨学号 040501001 姓名覃毅学号 040501015 姓名肖雪学院: 电力学院 专业班级: 电自041班 指导教师: 张启富 昆明理工大学计算中心2005 年 6 月 10 日昆明理工大学计算中心计算机程序设计基础课程综合实践型教学课题报告课程名称:数学计算工具程序设计 学院:电力学院 专业班级 电自041班学号姓名小组编号所选题号自评小组工作量(16)自评分数分数040501002贤天华 1 1 (1)9696040501027王 平 1 1 (2)、(3) 92920405010033许 杨 1 1 (4) 8888040501001覃 毅 1 1 (5) 8989040501015肖 雪 1 1 (6) 8888设计说明与功能描述(基本思路及关键语句说明)功能要求及分工:各计算功能单独编写成函数,在主函数中通过选项菜单调用函数。(括号内为负责人姓名)主函数:大概思路:显示界面并提示选择功能函数判断选择的正确性调用所选功能函数选择是否继续调用当前功能函数判断选择的正确性返回主菜单继续运行(1) 实现主函数完成选项菜单集成各个计算功能函数(贤天华);(2) 实现求任意数的阶乘(王平);(3) 实现求组合数(王平);(4) 实现求任意两个整数的最大公约数和最小公倍数(许杨);(5) 实现判断任意数是否素数(覃毅);(6) 实现显示菲波拉契数列的前N项(肖雪)。各功能函数的数据输入形式和范围在显示界面上有适当提示,基输入出错或超出范围则提示重新输入。所输出的数据仅在屏幕上显示,不作保存。本程序在很好地完成上述各基本功能的基础上,力求显示出十分清新友好的人机交互界面,不但使用户看到界面后感到精神愉悦,而且可以使用户按提示实现他所要求的操作,方便快捷。本程序的优点在于善用循环结构控制程序运行方向,根据用户意向轻松实现循环调用各功能函数。此程序没什么大的难点,而循环结构却成为本程序主函数的一大亮点。如用do-while 循环结构,或判断所输入的字符是否为所要求输入的字符,或反复调用正在运行的功能函数,或返回主菜单继续运行。整个主函数被囊括在一个大的do-while 循环结构当中,使其实现不断循环,其中借助getchar语句实现运行的停顿。因而每个getchar语句既起到了录入字符的作用又起到了运行停顿的作用,当用户一输入数据时,程序便可立刻运行,快捷完成其功能,而不需要重新启动程序。本程序目前的功能尚小,但其设计所体现的精神及其优点可谓优秀。倘若继续发扬其全心全意为人民服务精神,努力研究解决其中的个别难题难症,将其它更多的功能逐步完善,它有望一个十分优秀的学习或办公软件。 组长签名:贤天华 2005 年 6 月 16 日教师评语实现课题基本功能,完成课题报告。教师签名: 张启富 200 5 年 6 月 22 日正文内容:一、问题描述在计算中我们会经常遇到一些比较复杂的计算。这些计算不但复杂难于计算,往往中断我们思考问题的思维,影响工作效率,而且常常使我们算得头晕脑胀,易于出错。为方便用户计算,实现某些计算机器自动化,特开发设计此数学计算工具程序。二、问题分析功能要求及分工:各计算功能单独编写成函数,在主函数中通过选项菜单调用函数。(括号内为负责人姓名)(7) 主函数完成选项菜单集成各个计算功能函数(贤天华);(8) 求任意数的阶乘(王平);(9) 求组合数(王平);(10) 求任意两个整数的最大公约数和最小公倍数(许杨);(11) 判断任意数是否素数(覃毅);(12) 显示菲波拉契数列的前N项(肖雪)。各功能函数的数据输入形式和范围在显示界面上有适当提示,基输入出错或超出范围则提示重新输入。所输出的数据仅在屏幕上显示,不作保存。三、程序设计思路功能模块说明程序的控制流程入下图所示。N0d6?N1Y2YY4Y 5 3调用输出数列函数调用判断素数函数调用求约倍数函数调用求组合数函数调用阶乘函数输入d输入d输入d输入dh=?输入数字d开始Yd=?d=?d=?d=?d=?输入dYNNN四、程序调试与测试本程序在经过本小组的大量的反复修改和反复调试工作完,基本做到了性能和严密性良好,得以问世。(1)调试中遇到的主要问题是如何更好地利用循环结构实现程序对数据的合法性的判断及如何利用循环结构实现对程序的反复调用过程.在测试过程中遇到了用scanf函数录入某些数据是会出现本次输入的数据保留作下一步执行所需的数据用的情况,而出现某些错误.今改用getchar函数则避免了这种情况的发生.(2)测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。输出结果已直接抓取屏幕图像粘贴在下。求任意数的阶乘求组合数求任意两个整数的最大公约数和最小公倍数判断任意数是否素数显示菲波拉契数列的前N项五、程序清单/ 作者:电自041第一小组 / 组长:贤天华/ 其他组员(按姓氏笔画顺序排列):王 平 许 杨 肖 雪 覃 毅/ 编写日期:2005.6.5./ 最后修改日期:2005.6.16./ 版权:本软件为昆明理工大学电力工程学院04级电气工程及其自动化专业1班第一小组全体所有。版权所有,仿冒必究!/鸣谢:在本程序的缩写和调试过程中得到了张启富导师的亲临指导和大力支持,在此我们全体组员向他表示衷心的感谢!#include stdio.h /文件包含#include math.hchar d,h; /定义全局字符变量/功能函数:求任意数的阶乘(主要负责人员:王 平)double fact(t) /用户自定义一个函数,用来求任意数的阶乘 int t; int i;double sum=1; for(i=1;i=t;i+) /用for循环求由实参传给形参的数 sum=sum*i; return(sum); /返回函数值 /功能函数:求组合数(主要负责人员:王 平)void comb()int m,n,i,result; do printf(输入m和n的值,用空格分隔(m=n),并回车确认:n); /用do循环判断当mn); /判断当mn时,循环继续,直到mn时结束循环 result=fact(n)/(fact(m)*fact(n-m); /调用下面定义的函数进行组合数运算 printf(所要求的组合数为=%dn,result); /功能函数:求任意两个整数的最大公约数和最小公倍数(主要负责人员:许 杨)void abc() int a,b,num1,num2,temp; /定义整型变量a,b,num1,num2,temp(中间变量)printf(请输入两个整数,用空格分隔,并回车确认:n);scanf(%d%d,&num1,&num2); /键盘敲入两个数num1,num2if(num1num2) /把num1与num2中较大的数赋给a,较小的数赋给btemp=num1; num1=num2; num2=temp;a=num1;b=num2;while(b!=0) /利用辗除法,直到b为0为止temp=a%b;a=b;b=temp;printf(公约数:%dn,a);printf(公倍数:%dn,num1*num2/a);/功能函数:判断任意数上否素数(主要负责人员: 覃 毅)void xyz()int n,m,k,flag; /定义变量,flag是一个标志变量printf(n 请输入一个整数,并回车确认:); /输入要判断的整数scanf(%d,&n); /将输入的整数存入变量n的空间m=sqrt(n); /定义m为n的平方根flag=0;for(k=2;k0&NMAX) break; /判断N的值printf(输入的数据非法,请重新输入项数!n);scanf(%d,&N); /重新输入getchar(); printf(nn); /换两行printf(菲波拉契数列的前%d项为:nn,N); /输出数列的各项printf(%12ld%12ld,f1,f2); Ln=2;for(i=3;i=N;i+)f3=f1+f2; /数列通项if(Ln+%6=0) printf(n); /每6个数换行printf(%12lu,f3); /输出f3f1=f2;f2=f3; printf(nn); /换行/功能函数:判断继续还是返回主菜单(主要负责人员:贤天华)void aaa() for(d=a;d!=y&d!=n&d!=Y&d!=N;d=getchar() ) /当所输入的字符不是小写的或大写的y和n时提示重新输入 printf(是否继续本项操作?请选择y/n并回车确认:n); /主函数功能:显示界面菜单选项,集成调用各功能函数等;(主要负责人员:贤天华)main()do /用do-while 循环结囊括整个主函数体,目的是让程序在执行完任务后立刻返回主菜单 printf(*n); printf(* *n); printf(* 天 欢迎使用! 好 *n); printf(* *n); printf(* 天 请按数字键选择功能函数: 好 *n); printf(* *n); printf(* 向 按1,求任意数的阶乘 学 *n); printf(* 按2,求组合数 *n); /显示友好界面 printf(* 上 按3,求任意两个整数的最大公约数和最小公倍数 习 *n); printf(* 按4,判断任意数上否素数 *n); printf(* 按5,显示菲波拉契数列的前n项 *n); printf(* *n); printf(*n); printf(n); / do-while 循环结构判断所输入的数据合法性 do printf(请按1-5数字键选择功能函数,按回车键确认:n); h=getchar(); while(h6); switch(h) /switch结构函数内的所有do-while循环结构被用来根据用户需要而重复执行一个功能函数 case 1: do int x; double y; /调用求阶乘函数 doprintf(声明:由于资源有限,只能输入0-170之间的任何整数,否则将导致错误结果!n请输入所要求阶乘的数:n); scanf(%lu,&x);while(xn)作为循环继续的条件,这样只要用户输入m大于n时,系统不往下执行,直到符合组合数的要求n大于m时才跳出循环,往下执行。许 杨: 主要任务:求任意两个整数的最大公约数和最小公倍数思考:1.键盘输入两个整数num1和num2后,把其中较大的数赋值给a,把较小的数赋值给b,这个过程可以通过定义一个中间变量temp来完成交换 2.用较大的数来除以较小的数,如果两个数可以整除,例如15和5,它们的余数为0,这样5就是他们的最小公约数,15就是它们的最小公倍数。如果两个数不能够整除,必然有余数r,把b的原值赋给新的a,把余数r赋给新的b,再次进行求余运算,直到余数r为0,循环结束。此时的a的值1即为两个数的最大公约数,公倍数即为两个数的乘积。这个过程(辗转相除法)可以用一个while循环来完成,循环的条件可以设为b不等于0。比如说3和2不能整除, 第(1)步r=1,a=2,b=1,满足循环条件,继续循环;第(2)步 r=2%1=1,a=1,b=1,满足循环条件,继续循环;第(3)步 r=1%1=0,a=1,b=0,循环结束。 3综上所述,无论是整除与否,所求最大公约数即为a 的值,所求最小公倍数即为所敲入两个数的乘积除以最大公约数a。总结:本次C语言实验我的任务是编程实现“求两个整数的最大公约数和最小公倍数”。从数学的观点看,这是一个很基础而且很实际的问题;可以看到,两位数的计算还可以勉强接受,三位或者三位以上通过人工计算是相当耗时的,而且容易出错;如果把这个问题通过一个程序来解决,就可以节约大量的人力,提高效率。这里就体现出了C语言的优越性所在。具体算法如下:把输入的数据大的作为分子,小的作为分母。辗转相除知道余数为0。在思考的过程中,因为与数学计算中的过程有很大区别,所以辗转相除这一步不容易想到,这也是整个程序的核心所在。辗转相除的过程也是一个循环赋值的过程,即在余数不为0的情况下,总把分母赋值给分子,余数赋值给分母。而在余数为0的情况下,分母即所求最大公约数;原始数据的乘积除以最大公约数也就得到了最小公倍数。在这个算法的指导下,通过一个while语句就可以实现上述功能。 因为所选难度为C类,所以并没有给我在编程 的过程中造成很大困难,反而是我加深对这个程序的理解。如果能够对诸如此类的程序举一反三,一定会收到事半功倍触类旁通的效果。通过这次实验我有3点体会:算法在C语言中的重要性;实际问题抽象思考解决问题的过程;团队合作精神对整个课题的完成起到了至关重要的作用。 覃 毅: 这次c语言程序设计的小组课题活动我很高兴和几个同学一起合作,而且在我和小组成员的共同努力下使得程序设计的课题得以顺利的圆满的完成,使我受益颇多。我此次负责的程序模块是判断用户输入的数字是否为素数,这个任务在难度上不是很大,在对程序基础知识的了解和运用的要求不是很高,所以在完成我的程序模块的时候遇到的问题和困难不是很多。判断数字是否为素数重要是判断输入的数字是在被2到输入的数字的平方根之间的每一个整数,如果能被其中一个整数整除,就可以判断数字不是素数。主要是利用循环机构和函数调用的方法完成程序的主要功能。引入标志变量也是一个很重要的知识点,在这个程序中起到了判断的作用。这次的小组活动我重要参与小组成员其他程序的编写讨论和调试程序,在同小组成员合作讨论调试的过程中,不仅能巩固自己掌握的知识,还能在别人遇到困难时帮助并找到自己欠缺的地方,使得对知识掌握的更全面更扎实,更能在这种互助的氛围下,体会到合作的重要,更能从中找到合作的快乐。肖 雪: C语言心得体会本次编程我非常高兴可以和几个同学共同完成一个课题,同时,我也亲身体会到合作的重要性。尽管这个课题是个全新的挑战,但是在大家的努力之下,我们本次课题却得以顺利完成。菲波拉锲数列是个数学性很强的一个数列,在数学和程序设计的理解上的要求还是较高的,而且在编写程序的过程中,遇到的困难不止在程序的基本构架的完成,还在于使程序的可行性和人性化方面存在一定难度。针对这个程序模块的特点,了解结构化程序的两种结构,即顺序结构和循环结构,还有for循环和if选择结构的使用就显得至关重要。虽然本题也可以用函数来定义编程,在数据处理中也并未遇到很大的困难,但在程序可行性的设计上存在的预想和程序具体表达上却存在了偏差,根据程序要求通俗易懂的特点,我采用了循环结构来编写,并且,通过我与小组成员的不断讨论和调试下,程序终于臻于完美。我觉得对于这样的编程方式对于循环结构的熟悉有很大益处。我相信通过多次这样的合作编程,和上机反复实践,我们可以从中学到更多的东西,这个在今后的学习工作和生活的影响是不可估量的。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!