1、1昆明理工大学程序设计基础课程综合设计实践教学课题报告课程名称: C 语言程序设计综合大作业 课题名称:数学计算工具程序设计 组长:学号 201310401344 姓名 钟伦赋 组员:学号 201310401321 姓名 朱潘伟学号 201310401309 姓名 陆光道学院: 信息工程与自动学院 专业班级: 自动化 133 指导教师: 郑明雄 昆明理工大学计算中心2014 年 5 月 日填写格式及说明1、 系统概述 (一)功能概述主函数:大概思路:显示界面并提示选择功能函数判断选择的正确性调用所选功能函数选择是否继续调用当前功能函数判断选择的正确性返回主菜单继续运行(1) 实现主函数完成选项
2、菜单集成各个计算功能函数;2(2) 实现求任意数的阶乘;(3) 实现求组合数;(4) 实现求任意两个整数的最大公约数和最小公倍数;(5) 实现判断任意数是否素数;(6) 实现显示菲波拉契数列的前 N 项。各功能函数的数据输入形式和范围在显示界面上有适当提示,基输入出错或超出范围则提示重新输入。所输出的数据仅在屏幕上显示,不作保存。 。本程序的优点在于多处使用循环结构控制程序运行方向,根据需求轻松实现循环调用各功能函数。此程序没什么大的难点,而循环结构却成为本程序主函数的一大亮点。如用do-while 循环结构,或判断所输入的字符是否为所要求输入的字符,或反复调用正在运行的功能函数,或返回主菜单
3、继续运行。整个主函数被囊括在一个大的 do-while 循环结构当中,使其实现不断循环,其中借助 getchar 语句实现运行的停顿。因而每个 getchar 语句既起到了录入字符的作用又起到了运行停顿的作用,当用户一输入数据时,程序便可立刻运行,快捷完成其功能,而不需要重新启动程序。本程序利用菜单显示提供了较好的人机交互界面。(二)算法概述:从主菜单中选择相对应的数字,使程序进入不同的程序模块,用 switch 实现其功能,程序共分为五个模块,分别为:主函数、jicheng( )函数(求阶乘)、comb( )函数(求组合数) 、qiubeishu ( )函数(求最小公倍数和最大公约数) 、q
4、iusushu( )函数(求素数) 、Fibonacci( )函数(求菲波拉契数列)、 remenu() 函数(返回主菜单) 各函数主要算法见个流程图2、数据结构设计1、 数据的定义:主要定义了 int、ouble 、#define MAX 48char 、unsigned long int2、 数据的输出形式:%d(整形)三、 模块设计1、说明、用 for 循环求由实参传给形参的数 1、用 do-while 循环 2、Switch 函数实现功能的选择 3、调用 Fibonacci 数列函数 42、功能要求及分工:各计算功能单独编写成函数,在主函数中通过选项菜单调用函数。主函数完成选项菜单集成
5、各个计算功能函数;(7) 求任意数的阶乘;(8) 求组合数;(9) 求任意两个整数的最大公约数和最小公倍数;(10) 判断任意数是否素数;(11) 显示菲波拉契数列的前 N 项。各功能函数的数据输入形式和范围在显示界面上有适当提示,基输入出错或超出范围则提示重新输入。所输出的数据仅在屏幕上显示,不作保存。33、程序的控制流程入下图所示。NN1 Y 2 Y Y 4 Y 5 3YYN N N4调试运行及操作说明(一) 、调试错误:开始0n); result=a/(b*c); printf(“所要求的组合数为=%dn“,result);改正:printf(“所要求的组合数为=%0.fn“,resul
6、t);(二) 、程序测试1、菜单界面/菜单主界面组员共同设计/52、求阶乘:/本人设计求阶乘和组合数的部分是由我完成的,首先定义自定义求阶乘函数,然后写入代码实现功能,代码如下:double jiecheng(t) /用户自定义一个函数,用来求任意数的阶乘int t; int i; double sum=1;for(i=1;in); /判断当 mn 时,循环继续,直到 mn); /判断当 mn 时,循环继续,直到 m0 /*switch 结构函数内的所有 do-while 循环结构被用来根据用户需要而重复执行一个功能函数*/switch(h) case 1: do int x;double y
7、; /调用求阶乘函数doprintf(“声明:由于资源有限,只能输入 0-170 之间的任何整数,否则将导致错误结果!n 请输入所要求阶乘的数:n“);scanf(“%lu“,while(x0); y=jiecheng(x);printf(“所要求的阶乘%lu!=%len“,x,y);remenu();while(d=y|d=Y);break;case 2: do comb(); remenu();while(d=y|d=Y);break; /调用求组合数函数case 3: doqiubeishu();remenu();while(d=y|d=Y);break; /调用求最大公约数和最小公倍数
8、函数case 4: do qiusushu(); remenu();while(d=y|d=Y);break; /调用判断是否是素数函数case 5: do Fibonacci(); remenu();while(d=y|d=Y);break; /调用 Fibonacci 数列函数case 6: printf(“结束程序运行 再见!n“);exit(0);14while(1); /返回主菜单六、总结和体会:( 1 )组长:经过一个月的努力与奋斗我们组通过组员之间的分工配合和精诚合作终于完成了这次综合设计,在做的过程中,我们组员之间也有过意见不统一的时候,但是经过讨论后最终达成了一致的意见,在做
9、的过程中我们付出汗水的同时也收获了一种快乐和成就感。在做这个大作业的过程中我们不仅学到了很多有关 C 语言的知识同时也体会到了许多人生感悟,这次综合大作业让我们体会到许多事情通过与别人的合作会变得更加简单。这次作业我和组员一起写了数学计算工具,我们秉着相互配合精诚合作的原则每人完成两个部分的功能,菜单主界面由我们共同完成。开始的时候,我们都很茫然不知道从哪里开始但是我们并没有沮丧而是查了很多相关的资料在我们共同的努力下终于确定好了函数的框架,接下来我们就分工每人写了两个小模块。 刚开始学 C 语言这门课的时候我觉得完全无法理解,觉得这门课没有一点逻辑性,不能理解、老师一讲课我就想为什么要这样为
10、什么会这样,搞得我头昏脑涨完全没有学下去的心情。因此我完全没学到什么在刚开始的时候,后来老师说 C 语言只要记住就行了当历史背下来就行了,这时我似乎明白了该怎么学了但是由于前面没学好所以到了后面还是有点困难。但是,对于 C 语言这门课程我虽然不是学的很出色,上课我还是很认真的听课的所以通过看书我首先学着去读懂程序,慢慢的我学着去体会编程的思想,就这样我一步一步的学习结合老师上课的课件和重点知识我进一步学会了一些复杂一点的程序。在这次大作业中我有失败、有沮丧但是也有成长,在看到运行有错误的时候我看着屏幕上的一个个错误我非常沮丧但是沮丧的同时还把错误改了过来,这个过程中我明白了重要的不是结果而是产
11、生结果的过程,我在这次大作业中成长了许多。我希望,在下学期的等级考试中,我的成长可以得到体现,我的付出不会落空!这次编程作业虽然对我们来说比较困难,但是值得高兴的,我们努力了,并基本完成了任务。这次做 C 语言程序让我感触颇深。是首先是由于对基础知识掌握不扎实,以至于刚开始拿着不知道从何下手,这就让我明白了学习的重要性。其次让我明白的是合作的重要性,我们小组只有两个人,设计时的分工就极其重要了,虽然这次我们没有做好这次题目,但是,不管是在知识的汲取上,还是我们在合作和团队意识上都有了很大的收获。为了做好这次作业,我们查阅了大量关于 C 语言编程的书籍,并接受了很多同学建议,以求做到精益求精。付出总有回报,即使它不能在现在,也将在不远的将来!