1、C语言课程设计报告学习和掌握C程序设计方法培养抽象思维逻辑思维的能力和良好的程序设计风格C语言程序设计课程设计成果报告学生学号: 学生姓名: 学 院: 理学院 专业班级 信息与计算科学 专业课程: C语言程序设计 指导教师: 课程设计报告书课程设计目的:学习和掌握C程序设计方法,培养抽象思维、逻辑思维的能力和良好的程序设计风格 课程设计时间: 课程设计地点: 课程设计单位: 计算机学院 课程设计指导教师评分表课程设计题目1、猜数字小游戏2、显示月历3、简单计算器4、宿舍查询系统本组组长本组成员本人分工第1题分工:程序设计编写第2题分工:主函数和判断星期几函数编写第3题分工:主函数、四则运算、其
2、他运算编写第4题分工:主函数,查询,文件读写的编写评分项目及分值要素成绩评定项 目最高分评 分 要 素成 绩1学习态度20上机出勤及端正的学习态度、认真刻苦程度,工作量饱满程度等2软件设计质量30采用的算法、设计方案,设计结果,界面友好等方面进行综合评定3答辩过程20能简明扼要地阐述设计的主要内容,能准确流利地回答各种问题4设计报告书写10内容按要求步骤书写,条理清晰,表述清楚、措词得当5实际动手能力20熟练使用开发工具,能够迅速准确的进行调试、纠错和运行;组长全面负责,承担复杂的模块设计分值就高总 成 绩等 级评语指导教师: 职称:_1 猜数游戏1.1 设计目标设计一个猜数字小游戏,计算机随
3、机在1到100随机产生一个数,请才,如果猜对了提示正确信息;否则告诉所猜的数是大还是小,同时提示下一次猜数的范围,知道猜对结束,最后给出游戏者所猜测的次数。要求,程序以菜单方式工作。1.2 课题分析与设计1、课题分析编写该小游戏,主要分主函数和被调用函数,被调用函数包括一个菜单函数和一个执行函数,执行函数中涉及调用随机数,循环体的设计以及对循环次数的计数。该题中所有数据类型均为整型。2、详细设计头文件:#include#include#include主函数设计:void main()/主函数 int n; do showmenu(); printf(请选择要完成的操作n); scanf(%d,
4、&n); switch(n)/switch从菜单界面选择操作序号 case 1:start();break;/调用执行函数 case 2:break; default:printf(请输入正确的序号);break; while(n!=2); printf(谢谢使用本系统,下次再见!);确定整个程序的主体框架,多次猜数do while循环体的实现,注意循环条件,列出所需调用的函数,注意头文件的书写。接着分别编写所需的菜单函数showmenu()和执行函数start()菜单函数主要用printf语句输出游戏的用户操作界面,注意换行。执行函数主要是获取玩家输入的数字和系统产生的随机数进行比较判断,涉
5、及随机数函数调用,多次循环用do while判断给出猜数范围,并用参数i记录循环次数。3、程序流程猜数游戏设计流程(如图1) 图1 猜数游戏算法流程图1.3程序清单#include#include#includevoid showmenu()/菜单函数 printf(欢迎使用猜数游戏n); printf(1.开始游戏n); printf(2.退出系统n); printf(n);void start()/执行函数 int m,n,x=1,y=100,i=0;/i计数,赋初值0,x,y用于提示范围 printf(1-100范围内猜数游戏开始!n); printf(请输入你猜的数字:n); sran
6、d(time(NULL);/设置随机种子 m=rand()%100+1;/生成1-100的一个随机数 do/循环体,判断所猜数与随机数的大小关系 scanf(%d,&n); if(mn) x=n+1; printf(你猜的数太小了,请继续猜,再输入一个数吧%d-%dn,x,y); else if(mn) y=n-1; printf(你猜的数太大了,请继续猜,再输入一个数吧%d-%dn,x,y); i+; while(n!=m); printf(恭喜你,猜对了!n); printf(你共猜了%d次!n,i);/void main()/主函数 int n; do showmenu(); print
7、f(请选择要完成的操作:n); scanf(%d,&n); switch(n)/switch从菜单界面选择操作序号 case 1:start();break;/调用执行函数 case 2:break; default:printf(请输入正确的序号);break; while(n!=2); printf(谢谢使用本系统,下次再见!);1.4 测试1、测试用例执行程序,选择1开始,第一次猜56,太大;第二次猜34,太大;第三次猜28,太大;第四次猜20,太小;第五次猜26,太大;第六次猜23,太小;第七次猜24,正确。一共猜了七次,输出正确提示及猜测次数。(测试结果如图1-2,1-3.)2、测试
8、结果(1)运行程序图2 猜数游戏测试图(2)开始游戏图3 猜数游戏运行图3、测试结果分析输入正确的数字操作序号,系统提示游戏开始,给定范围,多次执行循环,最终猜对正确值,给出猜测次数。在起先测试过程中,会遇到猜对以后,仍出现太大的提示,提示给出猜对的提示,检查发现实在if else语句中的else if语句下省略mn判断,所以即使猜正确了,也会出现太大的提示。2 显示月历2.1 设计目标设计一个程序实现月历的显示,要求:1) 输入年月信息,在屏幕上输出该月的日历;2) 输出日历时,以月份和星期做表头;3) 系统以菜单方式工作。2.2 课题分析与设计1、课题分析该题涉及循环和格式化输出。主要难点
9、是判断某年是否为闰年,某月有多少天,以及该月第一天星期几的判断。由起始年份1900年1月1日,星期一,sumday初值赋1,计算到某年某月经历的天数,从而由sumday%7判断星期几。2、详细设计主函数设计,给出执行菜单:void main()/主函数 int n; do showmenu();/显示菜单函数 printf(请输入您要完成的操作:n); scanf(%d,&n); switch(n)/判断执行操作序号 case 1:start();break; case 2:break; default:printf(请输入正确的操作序号!n);break; while(n!=2); prin
10、tf(谢谢使用本系统,下次再见!n);/结束根据sumday值计算星期几:int month(y,m)/定义月份函数,输出该月的天数 int mon12=31,28,31,30,31,30,31,31,30,31,30,31; if(y%4=0&(y%100)!=0|y%400=0)&m=2) return 29;/闰年二月29天 else return monm-1;/返回值为该月的实际天数int sum(y,m)/计算从1900.1.1到某年某月经历的天数 int s,sumday,i,j,count=0; s=y-1900; for(i=1900;iy;i+) if(i%4=0&(i%1
11、00)!=0|i%400=0) count+;/count闰年数 sumday=365*(s-count)+366*count+1; for(j=1;jm;j+) sumday+=month(y,j); return sumday;通过主函数下对菜单函数和执行函数的调用,格式化输出月份信息,其中最重要的也是比较麻烦的是确定该月第一天是星期几,该月一共有多少天的判断。3、程序流程 (如图4) 图4 月历显示算法流程图2.3 程序清单#includeint month(y,m)/定义月份函数,输出该月的天数 int mon12=31,28,31,30,31,30,31,31,30,31,30,31
12、; if(y%4=0&(y%100)!=0|y%400=0)&m=2) return 29;/闰年二月29天 else return monm-1;/返回值为该月的实际天数int sum(y,m)/计算从1900.1.1到某年某月经历的天数 int s,sumday,i,j,count=0; s=y-1900; for(i=1900;iy;i+) if(i%4=0&(i%100)!=0|i%400=0) count+;/count记录闰年数 sumday=365*(s-count)+366*count+1; for(j=1;jm;j+) sumday+=month(y,j); return s
13、umday;int showmenu()/菜单函数 printf(欢迎使用月历查询系统n); printf(1、开始查询.n); printf(2、退出系统.n); printf(n);int start(y,m) int t,i; printf(请输入您要查询的年份和月份:n); scanf(%d%d,&y,&m); printf(%d年%d月n,y,m); t=sum(y,m)%7; printf( 星期一 星期二 星期三 星期四 星期五 星期六 星期日n);/格式化输出 for(i=1;imonth(y,m)+t;i+)/循环的次数为该月的天数加上第一天的星期数减1 if(i-t0) p
14、rintf( );/第一天的星期前显示为空 else printf( %3d ,i-t+1);/格式化输出保证日期和星期对齐 if(i%7=0) printf(n);/每逢星期日换行 printf(n);void main()/主函数 int n; do showmenu();/显示菜单函数 printf(请输入您要完成的操作:n); scanf(%d,&n); switch(n)/判断执行操作序号 case 1:start();break; case 2:break; default:printf(请输入正确的操作序号!n);break; while(n!=2); printf(谢谢使用本系
15、统,下次再见!n);/结束2.4 测试1、测试用例运行程序,输入1,开始,输入2016 6,显示2016年6月的日历。循环显示菜单,输入2,退出系统。通过反复多次输入年份月份的测试,调整输出格式,以保证输出函数格式对齐、美观。程序能够达到预期的效果。2、测试结果(1)运行程序图5 显示月历测试图(2)开始查询图6 月历输出图3、测试结果分析在测试过程中发现日期没有跟星期对齐,通过调整输出格式,调整对齐。在选择判断的时候,参量定义位置不当,影响循环显示的效果。对do while和for循环的灵活使用,能够快速简便地解决问题。细节方面值得留意,一不小心,就会使整个程序无法运行。3 简单计算器3.1
16、 设计目标设计程序实现一个简单计算器,要求:1) 能完成任意两个数的四则运算(加、减、乘、除);2) 能完成三角函数运算(sin(x)、cos(x)、tan(x)、sin_1(x)、cos_1(x)、tan_1(x));3) 能完成对数运算(lnx、log10(x));4) 其他运算(ex、平方根计算、xy);5) 系统以菜单方式工作,每个功能的运算用二级菜单实现,例如:加、减、乘、除的选择需用二级菜单提示。3.2 课题分析与设计1、课题分析该题主要设计循环和数学函数的调用。首先写一个主菜单,通过主菜单引出二级菜单,二级菜单下分别调用各个子函数运算,循环选择是否继续该菜单下的运算。最后通过主函
17、数调用菜单和执行函数。2、详细设计首先设计主函数体,完成主体设计思路:void main()/主函数 int n; do showmenu();/显示一级菜单函数 printf(请输入您要完成的操作:n); scanf(%d,&n); switch(n)/用户选择要操作的运算 case 1: start1();break;/分别调用相应函数 case 2: start2();break; case 3: start3();break; case 4: start4();break; case 5: break; default:printf(请输入正确的操作序号!n);break; while
18、(n!=5); printf(谢谢使用!n);/结束程序 showmenu()为主菜单函数,然后再分别设计二级菜单和相应函数:void start1()/四则运算的二级菜单 int n,m; do printf(四则运算n); printf(1、加法运算.n); printf(2、减法运算.n); printf(3、乘法运算.n); printf(4、除法运算.n); printf(n); printf(请选择您要完成的运算:n); scanf(%d,&n); switch(n) case 1:jia();break;/调用加法函数 case 2:jian();break;/调用减法函数 ca
19、se 3:cheng();break;/调用乘法函数 case 4:chu();break;/调用除法函数 default:printf(请输入正确的操作序号!n);break; printf(继续四则运算请按1,返回上一级菜单请按2.n);/选择是否继续执行四则运算 scanf(%d,&m); while(m!=2);调用加减乘除运算函数:float jia()/定义加法运算函数 float x,y; printf(请输入两个数:n); scanf(%f%f,&x,&y); printf(%g+%g=%gn,x,y,x+y);float jian()/定义减法运算函数 float x,y;
20、printf(请输入两个数:n); scanf(%f%f,&x,&y); printf(%g-%g=%gn,x,y,x-y);float cheng()/定义乘法运算函数 float x,y; printf(请输入两个数:n); scanf(%f%f,&x,&y); printf(%g*%g=%gn,x,y,x*y);float chu()/定义除法运算函数 float x,y; printf(请输入两个数:n); scanf(%f%f,&x,&y); printf(%g/%g=%gn,x,y,x/y);然后再完成对应功能函数的定义,并在主函数下完成调用。此处不一一赘述。3、程序流程 (如图)
21、 图7 简单计算器算法流程图3.3 程序清单#include#include#define pai 3.1415926/规定圆周率的值,以便完成角度制和弧度制的转换void showmenu()/一级菜单函数 printf(*欢迎使用简单计算器*n); printf(1、四则运算.n); printf(2、三角函数运算.n); printf(3、对数运算.n); printf(4、其他运算.n); printf(5、退出系统.n); printf(*n);float jia()/定义加法运算函数 float x,y; printf(请输入两个数:n); scanf(%f%f,&x,&y); p
22、rintf(%g+%g=%gn,x,y,x+y);float jian()/定义减法运算函数 float x,y; printf(请输入两个数:n); scanf(%f%f,&x,&y); printf(%g-%g=%gn,x,y,x-y);float cheng()/定义乘法运算函数 float x,y; printf(请输入两个数:n); scanf(%f%f,&x,&y); printf(%g*%g=%gn,x,y,x*y);float chu()/定义除法运算函数 float x,y; printf(请输入两个数:n); scanf(%f%f,&x,&y); printf(%g/%g=
23、%gn,x,y,x/y);void start1()/四则运算的二级菜单 int n,m; do printf(四则运算n); printf(1、加法运算.n); printf(2、减法运算.n); printf(3、乘法运算.n); printf(4、除法运算.n); printf(n); printf(请选择您要完成的运算:n); scanf(%d,&n); switch(n) case 1:jia();break;/调用加法函数 case 2:jian();break;/调用减法函数 case 3:cheng();break;/调用乘法函数 case 4:chu();break;/调用除
24、法函数 default:printf(请输入正确的操作序号!n);break; printf(继续四则运算请按1,返回上一级菜单请按2.n);/选择是否继续执行四则运算 scanf(%d,&m); while(m!=2);void sinx()/定义正弦运算函数 double x,y; printf(请输入一个角度:n); scanf(%lf,&x); y=sin(x*pai/180);/角度制转化为弧度制求余弦值 printf(sin(%.0f)=%.2f,x,y);void cosx()/定义余弦运算函数 double x,y; printf(请输入一个角度:n); scanf(%lf,&
25、x); y=cos(x*pai/180); printf(cos(%.0f)=%.2fn,x,y);void tanx()/定义正切运算函数 double x,y; printf(请输入一个角度:n); scanf(%lf,&x); y=tan(x*pai/180); printf(tan(%.0f)=%.2fn,x,y);void arcsinx()/定义反正弦运算函数 double x,y; printf(请在-11之间输入一个数:n); scanf(%lf,&x); y=asin(x); printf(sin_1(%.0f)=%.2fn,x,y);void arccosx()/定义反余弦
26、运算函数 double x,y; printf(请在-11之间输入一个数:n); scanf(%lf,&x); y=acos(x); printf(cos_1(%.0f)=%.2fn,x,y);void arctanx()/定义反正切运算函数 double x,y; printf(请输入一个数:n); scanf(%lf,&x); y=atan(x*pai/180); printf(tan_1(%.0f)=%.2fn,x,y);void start2() int n,m; do/循环显示三角函数的二级菜单 printf(三角函数n); printf(1、sin(x).n); printf(2、cos(x).n); printf(3、tan(x).n); printf(4、sin_1(x).n); printf(5、cos_1(x).n); pr
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1