您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C语言数学计算工具设计报告
昆明理工大学《计算机程序设计基础》课程综合实践型教学课题报告课题名称:数学计算工具程序设计组长:学号040501002姓名贤天华组员:学号040501027姓名王平学号040501033姓名许杨学号040501001姓名覃毅学号040501015姓名肖雪学院:电力学院专业班级:电自041班指导教师:张启富昆明理工大学计算中心2005年6月10日昆明理工大学计算中心《计算机程序设计基础》课程综合实践型教学课题报告课程名称:数学计算工具程序设计学院:电力学院专业班级电自041班学号姓名小组编号所选题号自评小组工作量(1—6)自评分数分数040501002贤天华11(1)9696040501027王平11(2)、(3)92920405010033许杨11(4)8888040501001覃毅11(5)8989040501015肖雪11(6)8888设计说明与功能描述(基本思路及关键语句说明)功能要求及分工:各计算功能单独编写成函数,在主函数中通过选项菜单调用函数。(括号内为负责人姓名)主函数:大概思路:显示界面并提示选择功能函数→判断选择的正确性→调用所选功能函数→选择是否继续调用当前功能函数→判断选择的正确性→返回主菜单继续运行(1)实现主函数完成选项菜单集成各个计算功能函数(贤天华);(2)实现求任意数的阶乘(王平);(3)实现求组合数(王平);(4)实现求任意两个整数的最大公约数和最小公倍数(许杨);(5)实现判断任意数是否素数(覃毅);(6)实现显示菲波拉契数列的前N项(肖雪)。各功能函数的数据输入形式和范围在显示界面上有适当提示,基输入出错或超出范围则提示重新输入。所输出的数据仅在屏幕上显示,不作保存。本程序在很好地完成上述各基本功能的基础上,力求显示出十分清新友好的人机交互界面,不但使用户看到界面后感到精神愉悦,而且可以使用户按提示实现他所要求的操作,方便快捷。本程序的优点在于善用循环结构控制程序运行方向,根据用户意向轻松实现循环调用各功能函数。此程序没什么大的难点,而循环结构却成为本程序主函数的一大亮点。如用do-while循环结构,或判断所输入的字符是否为所要求输入的字符,或反复调用正在运行的功能函数,或返回主菜单继续运行。整个主函数被囊括在一个大的do-while循环结构当中,使其实现不断循环,其中借助getchar语句实现运行的停顿。因而每个getchar语句既起到了录入字符的作用又起到了运行停顿的作用,当用户一输入数据时,程序便可立刻运行,快捷完成其功能,而不需要重新启动程序。本程序目前的功能尚小,但其设计所体现的精神及其优点可谓优秀。倘若继续发扬其全心全意为人民服务精神,努力研究解决其中的个别难题难症,将其它更多的功能逐步完善,它有望一个十分优秀的学习或办公软件。组长签名:贤天华2005年6月16日教师评语实现课题基本功能,完成课题报告。教师签名:张启富2005年6月22日正文内容:一、问题描述在计算中我们会经常遇到一些比较复杂的计算。这些计算不但复杂难于计算,往往中断我们思考问题的思维,影响工作效率,而且常常使我们算得头晕脑胀,易于出错。为方便用户计算,实现某些计算机器自动化,特开发设计此《数学计算工具程序》。二、问题分析功能要求及分工:各计算功能单独编写成函数,在主函数中通过选项菜单调用函数。(括号内为负责人姓名)(7)主函数完成选项菜单集成各个计算功能函数(贤天华);(8)求任意数的阶乘(王平);(9)求组合数(王平);(10)求任意两个整数的最大公约数和最小公倍数(许杨);(11)判断任意数是否素数(覃毅);(12)显示菲波拉契数列的前N项(肖雪)。各功能函数的数据输入形式和范围在显示界面上有适当提示,基输入出错或超出范围则提示重新输入。所输出的数据仅在屏幕上显示,不作保存。三、程序设计思路功能模块说明程序的控制流程入下图所示。NN1Y2YY4Y53YYNNN四、程序调试与测试本程序在经过本小组的大量的反复修改和反复调试工作完,基本做到了性能和严密性良好,得以问世。(1)调试中遇到的主要问题是如何更好地利用循环结构实现程序对数据的合法性的判断及如何利用循环结构实现对程序的反复调用过程.在测试过程中遇到了用scanf函数录入某些数据是会出现本次输入的数据保留作下一步执行所需的数据用的情况,而出现某些错误.今改用getchar函数则避免了这种情况的发生.(2)测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。输出结果已直接抓取屏幕图像粘贴在下。开始0d6?输入数字dh=?调用阶乘函数输入dd=?调用求组合数函数输入dd=?调用求约倍数函数输入dd=?调用判断素数函数输入dd=?调用输出数列函数输入dd=?求任意数的阶乘求组合数求任意两个整数的最大公约数和最小公倍数判断任意数是否素数显示菲波拉契数列的前N项五、程序清单//作者:电自041第一小组//组长:贤天华//其他组员(按姓氏笔画顺序排列):王平许杨肖雪覃毅//编写日期:2005.6.5.//最后修改日期:2005.6.16.//版权:本软件为昆明理工大学电力工程学院04级电气工程及其自动化专业1班第一小组全体所有。版权所有,仿冒必究!//鸣谢:在本程序的缩写和调试过程中得到了张启富导师的亲临指导和大力支持,在此我们全体组员向他表示衷心的感谢!!!#includestdio.h//文件包含#includemath.hchard,h;//定义全局字符变量//功能函数:求任意数的阶乘(主要负责人员:王平)doublefact(t)//用户自定义一个函数,用来求任意数的阶乘intt;{inti;doublesum=1;for(i=1;i=t;i++)//用for循环求由实参传给形参的数sum=sum*i;return(sum);//返回函数值}//功能函数:求组合数(主要负责人员:王平)voidcomb(){intm,n,i,result;do{printf(输入m和n的值,用空格分隔(m=n),并回车确认:\n);//用do循环判断当mn时执行程序scanf(%d%d,&m,&n);}//输入m,n的值while(mn);//判断当mn时,循环继续,直到mn时结束循环result=fact(n)/(fact(m)*fact(n-m));//调用下面定义的函数进行组合数运算printf(所要求的组合数为=%d\n,result);}//功能函数:求任意两个整数的最大公约数和最小公倍数(主要负责人员:许杨)voidabc(){inta,b,num1,num2,temp;//定义整型变量a,b,num1,num2,temp(中间变量)printf(请输入两个整数,用空格分隔,并回车确认:\n);scanf(%d%d,&num1,&num2);//键盘敲入两个数num1,num2if(num1num2)//把num1与num2中较大的数赋给a,较小的数赋给b{temp=num1;num1=num2;num2=temp;}a=num1;b=num2;while(b!=0)//利用辗除法,直到b为0为止{temp=a%b;a=b;b=temp;}printf(公约数:%d\n,a);printf(公倍数:%d\n,num1*num2/a);}//功能函数:判断任意数上否素数(主要负责人员:覃毅)voidxyz(){intn,m,k,flag;//定义变量,flag是一个标志变量printf(\n请输入一个整数,并回车确认:);//输入要判断的整数scanf(%d,&n);//将输入的整数存入变量n的空间m=sqrt(n);//定义m为n的平方根flag=0;for(k=2;k=m;k++)//从2到m之间的整数逐个判断if(n%k==0){flag=1;break;}//若条件成立跳出循环if(flag)//判断标志变量,确定结果printf(%d不是素数。\n,n);//输出结果elseprintf(%d是素数。\n,n);//同上}//功能函数:显示菲波拉契数列的前n项(主要负责人员:肖雪)voidFibonacci()#defineMAX48//定义宏名并赋值{intN,i,tp,Ln=0;//定义整型变量,给Ln赋初值unsignedlongintf1=1,f2=1,f3;//定义无符号长整型常量while(1)//永循环{printf(请输入菲波拉契数列的项数,并回车确认\n);//提示输入tp=scanf(%d,&N);//输入项数if(tp==1&&(N0&&NMAX))break;//判断N的值printf(输入的数据非法,请重新输入项数!\n);scanf(%d,&N);//重新输入getchar();}printf(\n\n);//换两行printf(菲波拉契数列的前%d项为:\n\n,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(\n\n);}//换行//功能函数:判断继续还是返回主菜单(主要负责人员:贤天华)voidaaa(){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(h'1'||h'6');switch(h)//switch结构函数内的所有do-while循环结构被用来根据用户需要而重复执行一个功能函数{case'1':do{intx;doubley;//调用求阶乘函数do{printf(声明:由于资源有限,只能输入0-170之间的任何整数,否则将导致错误结果!\n请输入所要求阶乘的数:\n);scanf(%lu,&x);}while(x0);y=fact(x);printf(所要求的阶乘%lu!=%le\n,x,y);aaa();}while(d=='y'||d=='Y');break;case'2':do{comb();aaa();}while(d=='y'||d=='Y');break;//调用求组合数函数case'3':do{abc();aaa();}while(d=='y'||d=='Y');break;//调用求最大公约数和最小公倍数函数case'4':do{xyz();aaa();}while(d=='y'||d=='
本文标题:C语言数学计算工具设计报告
链接地址:https://www.777doc.com/doc-2908005 .html