1、C语言程序设计课程设计编写函数求取两个整数mn的最大公约数和最小公倍数C语言程序设计课程设计评语:考勤(10)纪律(10)过程(40)设计报告(30)答辩(10)总成绩(100)专 业: 电气工程及其自动化 班 级: 电气1203 姓 名: 熊董 学 号: 201209837 指导教师: 王思华 兰州交通大学自动化与电气工程学院2013 年07月 20日1、基础题1.1题目编写函数,求取两个整数m,n的最大公约数和最小公倍数。1.2题目分析求两个整数的最大公约数和最小公倍数可以用辗转相除法,用两个函数max和min分别求出最大公约数和最小公倍数。在主函数中输入两个整数m和n,并传递给函数max
2、,求出最大公约数返回主函数并赋给整型变量h,然后h和两个整数m,n一起作为实参传递给函数min,从而求出最小公倍数,返回主函数赋给l。输出最大公约数和最小公倍数。主函数:N-S图如图一输入两个整数m和n调用max函数求出最大公约数h调用min函数求出最小公倍数l输出两个整数的最大公约数和最小公倍数 图一主函数max函数:N-S图 如图二 min函数:N-S图如图三 输入m和nYnm Nt=m;m=n;n=t当(r=m%n)!=0m=n,n=r 向主函数返回n的值输入m,n和h向主函数返回m*n/h的值 图二max函数 图三min函数1.3源程序#includeint main() int ma
3、x(int,int);int min(int,int,int);int m,n,h,l;scanf(%d,%d,&m,&n);h=max(m,n);printf(最大公约数是%dn,h); l=min(m,n,h);printf(最小公倍数是%dn,l);return 0; int max(int m,int n) int t,r;if(nm); t=m;m=n;n=t;while(r=m%n)!=0) m=n; n=r; return(n); int min(int m,int n,int h) return(m*n/h);1.4程序运行结果如图四: 图四基础题运行截图2、改错题2.1题目#
4、include #include void fun(int a, b) int t; t = b; b = a ; a = t;main( ) int a, b; clrscr( ); printf(Enter a,b :); scanf(%d%d, &a, &b); fun(&a, &b); printf(a=%d b=%dn, a, b);2.2题目分析该源程序的目的是交换两个数的值,有主函数可以看出该函数是应用指针交换两个数的值。所以调用函数中的a,b都要改成*a,*b, void fun(int a, b)改成void fun(int *a,int *b)。clrscr( )只能在Tu
5、rbo-C中可用所以改用system(cls)。输入*a,*b t=*b;*b=*a;*a=tviod fun函数:N-S图如图五 main函数:N-S图如图六清屏输入a,b将a,b赋值到&a,&b中。调用viod fun函数交换两个数的值输出a,b的值图五viod fun函数 图六main函数2.3正确的源程序#include #include void fun(int *a, int *b) int t; t= *b; *b = *a ; *a = t; main( ) int a, b; system(cls); printf(Enter a,b :); scanf(%d%d, &a,
6、&b); fun(&a,&b); printf(a=%d b=%dn, a, b); 2.4程序运行结果如图七: 图七改错题运行结果截图3、综合题3.1题目设计课题四:猜数字游戏一、问题描述:该游戏可以由程序随机产生或由用户输入四个0到9之间的数字,且不重复。玩游戏者通过游戏提示输入八次来匹配上面所输入的数字。A表示位置正确且数字正确,B表示数字正确而位置不正确。二、功能要求:1.本游戏显示这样的菜单:(1) 随机产生数据(2) 用户输入数据(3) 退出游戏2.游戏成功与否都能返回主菜单三、算法提示:1.数据结构:数组2.用简单的程序设计方法四、测试数据:测试数据: 3792第一次输入: 12
7、340A2B第二次输入: 56780A1B第三次输入: 08670A1B第四次输入: 97861A1B第五次输入: 17942A0B第六次输入: 27932A2B第七次输入: 37924A0B游戏成功!五、其它:对该系统有兴趣的同学可以在实现系统基本功能后,完善系统的其它功能,如:破记录功能,若你所匹配的次数小于纪录保持者,则为破纪录。3.2题目分析本题要求做一个猜字游戏,其功能包括菜单、用户模式测试、随机产生数据进行游戏。所以可以得知该游戏包括主函数、随机数产生函数、输入数字函数、游戏函数、测试数据输入函数。首先通过主函数输出菜单并选择所要进行的模式,如果选择随机产生数据则调用随机数产生函数
8、产生随机数,然后将产生的数据代入游戏函数进行游戏,游戏函数中进行游戏输入数据时调用输入数字函数输入数据;如果选择用户输入数据则调用测试数据输入函数输入数据,之后将输入的数据代入游戏函数中进行游戏,游戏函数中进行游戏输入数据时调用输入数字函数输入数据。(1)系统的总体框图如图八 图八系统的总体框图(2)函数间的调用关系如图九 图九函数间的调用关系3.3流程图输入数字函数:如图十 i=0 for i 0 to 9 stri=getch()putchar(stri)i+ putchar(n)for i 0 to 3 Ystri9 N无效输入,重新输入 for j 0 to iYstri=strj N
9、无效输入,重新输入 j+ i+ 图十输入数字函数游戏函数:如图十一out5 for ci 0 to 7printf(第%d次输入,ci+1) c_input(in)for i 0 to 3 Y ini=tempi Nout0+ for j 0 to 3 ini=tempjY Nout2+ j+ 输出字符串out strcmp(out,”4ABb”) Y N游戏成功,按任意键返回主菜单 getch() out0=0 out2=0 游戏失败,按任意键返回主菜单 getch() 图十一游戏函数随机数产生函数:如图十二定义字符数组data=”0123456789” 定义字符数组 temp4 清屏 输出
10、“*随机模式*”for( i=0;i4;i+)j=rand()%(10-i);tempi=dataj;dataj=data10-i-1;执行函数 c_game(temp)图十二随机数产生函数用户输入模式函数:如图十三定义字符数组 temp4清屏输出“*用户输入模式*”输出请输入测试数据:执行函数 c_input(temp)清屏输出”*用户输入模式*”执行函数 c_game(temp)图十三用户输入模式函数主函数:如图十四初始化随机数发生器清屏 While(1)输出“(1)随机产生数据” “(2) 用户输入数据” “(3) 退出游戏” “choice:”输入数字1,2,3中的其中一个Y1 N执行
11、函数 c_rand() 执行break结束循环Y2 N执行函数 c_rand()执行break结束循环退出程序 图十四主函数3.4源程序#include #include #include #include #include void c_input(char *str) int i,j;input:for(i=0;i4;i+) stri=getch(); putchar(stri); putchar(n); for(i=0;i4;i+) if(stri9) printf(无效输入,请重新输入:); goto input; for(j=0;ji;j+) if(stri=strj) printf
12、(无效输入,请重新输入:); goto input; void c_game(const char *temp) int i,j,ci; char in4; char out5=0A0B; for(ci=0;ci8;ci+) printf(第 %d 次输入:,ci+1); c_input(in); for(i=0;i4;i+) if(ini=tempi) out0+; else for(j=0;j4;j+) if(ini=tempj) out2+; printf(%sn,out); if(strcmp(out,4A0B)=0) printf(游戏成功,按下任意键返回主菜单。); getch()
13、; return; out0=0; out2=0; printf(游戏失败,按下任意键返回主菜单。); getch();void c_rand() int i,j; char data=0123456789; char temp4; system(cls); printf(*随机模式*nn); for(i=0;i4;i+) j=rand()%(10-i); tempi=dataj; dataj=data10-i-1; c_game(temp);void c_printf() char temp4;system(cls); printf(*用户输入模式*nn); printf(请输入测试数据:)
14、; c_input(temp); system(cls); printf(*用户输入模式*nn); c_game(temp);void main() srand(time(NULL); while(1) system(cls); printf(1) 随机产生数据n); printf(2) 用户输入数据n); printf(3) 退出游戏n); printf(choice : ); switch(getch() case 1:c_rand();break; case 2:c_printf();break; case 3:exit(1); 3.5程序运行结果主菜单:如图十五 图十五主菜单截图用户测
15、试模式:如图十六 图十六用户测试模式运行结果截图随机模式:如图十七 图十七随机模式运行结果截图当输入的四个数字中有重复数字时:如图十八 图十八当输入的四个数字中有重复数字时结果截图当选择退出后:如图十九 图十九当选择退出后结果截图总结课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。 回顾起此次课程设计,至今我仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一个星期
16、的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,这毕竟独立做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。 这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在王老师的辛勤指导下,终于游逆而解。同时,我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!