C语言程序设计课程设计编写函数求取两个整数mn的最大公约数和最小公倍数.docx
- 文档编号:28138162
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:21
- 大小:221.57KB
C语言程序设计课程设计编写函数求取两个整数mn的最大公约数和最小公倍数.docx
《C语言程序设计课程设计编写函数求取两个整数mn的最大公约数和最小公倍数.docx》由会员分享,可在线阅读,更多相关《C语言程序设计课程设计编写函数求取两个整数mn的最大公约数和最小公倍数.docx(21页珍藏版)》请在冰豆网上搜索。
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,求出最大公约数返回主函数并赋给整型变量h,然后h和两个整数m,n一起作为实参传递给函数min,从而求出最小公倍数,返回主函数赋给l。
输出最大公约数和最小公倍数。
主函数:
N-S图如图一
输入两个整数m和n
调用max函数求出最大公约数h
调用min函数求出最小公倍数l
输出两个整数的最大公约数和最小公倍数
图一主函数
max函数:
N-S图如图二min函数:
N-S图如图三
输入m和n
Y
n>m
N
t=m;m=n;n=t
当(r=m%n)!
=0
m=n,n=r
向主函数返回n的值
输入m,n和h
向主函数返回m*n/h的值
图二max函数图三min函数
1.3源程序
#include
intmain()
{intmax(int,int);
intmin(int,int,int);
intm,n,h,l;
scanf("%d,%d",&m,&n);
h=max(m,n);
printf("最大公约数是%d\n",h);
l=min(m,n,h);
printf("最小公倍数是%d\n",l);
return0;
}
intmax(intm,intn)
{intt,r;
if(n>m);
{t=m;m=n;n=t;}
while((r=m%n)!
=0)
{m=n;
n=r;}
return(n);
}
intmin(intm,intn,inth)
{
return(m*n/h);
}
1.4程序运行结果如图四:
图四基础题运行截图
2、改错题
2.1题目
#include
#include
voidfun(inta,b)
{
intt;
t=b;b=a;a=t;
}
main()
{
inta,b;
clrscr();
printf("Entera,b:
");scanf("%d%d",&a,&b);
fun(&a,&b);
printf("a=%db=%d\n",a,b);
}
2.2题目分析
该源程序的目的是交换两个数的值,有主函数可以看出该函数是应用指针交换两个数的值。
所以调用函数中的a,b都要改成*a,*b,voidfun(inta,b)改成voidfun(int*a,int*b)。
clrscr()只能在Turbo-C中可用所以改用system("cls")。
输入*a,*b
t=*b;*b=*a;*a=t
viodfun函数:
N-S图如图五main函数:
N-S图如图六
清屏
输入a,b
将a,b赋值到&a,&b中。
调用viodfun函数交换两个数的值
输出a,b的值
图五viodfun函数
图六main函数
2.3正确的源程序
#include
#include
voidfun(int*a,int*b)
{
intt;
t=*b;
*b=*a;
*a=t;
}
main()
{
inta,b;
system("cls");
printf("Entera,b:
");
scanf("%d%d",&a,&b);
fun(&a,&b);
printf("a=%db=%d\n",a,b);
}
2.4程序运行结果如图七:
图七改错题运行结果截图
3、综合题
3.1题目
设计课题四:
猜数字游戏
一、问题描述:
该游戏可以由程序随机产生或由用户输入四个0到9之间的数字,且不重复。
玩游戏者通过游戏提示输入八次来匹配上面所输入的数字。
A表示位置正确且数字正确,B表示数字正确而位置不正确。
二、功能要求:
1.本游戏显示这样的菜单:
(1)随机产生数据
(2)用户输入数据
(3)退出游戏
2.游戏成功与否都能返回主菜单
三、算法提示:
1.数据结构:
数组
2.用简单的程序设计方法
四、测试数据:
测试数据:
3792
第一次输入:
1234
0A2B
第二次输入:
5678
0A1B
第三次输入:
0867
0A1B
第四次输入:
9786
1A1B
第五次输入:
1794
2A0B
第六次输入:
2793
2A2B
第七次输入:
3792
4A0B
游戏成功!
!
!
五、其它:
对该系统有兴趣的同学可以在实现系统基本功能后,完善系统的其它功能,如:
破记录功能,若你所匹配的次数小于纪录保持者,则为破纪录。
3.2题目分析
本题要求做一个猜字游戏,其功能包括菜单、用户模式测试、随机产生数据进行游戏。
所以可以得知该游戏包括主函数、随机数产生函数、输入数字函数、游戏函数、测试数据输入函数。
首先通过主函数输出菜单并选择所要进行的模式,如果选择随机产生数据则调用随机数产生函数产生随机数,然后将产生的数据代入游戏函数进行游戏,游戏函数中进行游戏输入数据时调用输入数字函数输入数据;如果选择用户输入数据则调用测试数据输入函数输入数据,之后将输入的数据代入游戏函数中进行游戏,游戏函数中进行游戏输入数据时调用输入数字函数输入数据。
(1)系统的总体框图如图八
图八系统的总体框图
(2)函数间的调用关系如图九
图九函数间的调用关系
3.3流程图
输入数字函数:
如图十
i=0
fori0to9
str[i]=getch()
putchar(str[i])
i++
putchar(‘\n’)
fori0to3
Y
str[i]<0||str[i]>9
N
无效输入,重新输入
forj0toi
Y
str[i]=str[j]
N
无效输入,重新输入
j++
i++
图十输入数字函数
游戏函数:
如图十一
out[5]
forci0to7
printf(第%d次输入,ci+1)
c_input(in)
fori0to3
Y
in[i]=temp[i]
N
out[0]++
forj0to3
in[i]=temp[j]
Y
N
out[2]++
j++
输出字符串out
strcmp(out,”4ABb”)
Y
N
游戏成功,按任意键返回主菜单
getch()
out[0]=’0’
out[2]=’0’
游戏失败,按任意键返回主菜单
getch()
图十一游戏函数
随机数产生函数:
如图十二
定义字符数组data[]=”0123456789”
定义字符数组temp[4]
清屏
输出“**随机模式**”
for(i=0;i<4;i++)
j=rand()%(10-i);
temp[i]=data[j];
data[j]=data[10-i-1];
执行函数c_game(temp)
图十二随机数产生函数
用户输入模式函数:
如图十三
定义字符数组temp[4]
清屏
输出“**用户输入模式**”
输出"请输入测试数据:
"
执行函数c_input(temp)
清屏
输出”**用户输入模式**”
执行函数c_game(temp)
图十三用户输入模式函数
主函数:
如图十四
初始化随机数发生器
清屏
While
(1)
输出“
(1)随机产生数据”
“
(2)用户输入数据”
“(3)退出游戏”
“choice:
”
输入数字1,2,3中的其中一个
Y
1N
执行函数c_rand()
执行break结束循环
Y
2N
执行函数c_rand()
执行break结束循环
退出程序
图十四主函数
3.4源程序
#include
#include
#include
#include
#include
voidc_input(char*str)
{
inti,j;
input:
for(i=0;i<4;i++)
{
str[i]=getch();
putchar(str[i]);
}
putchar('\n');
for(i=0;i<4;i++)
{
if(str[i]<'0'||str[i]>'9')
{
printf("无效输入,请重新输入:
");
gotoinput;
}
for(j=0;j
{
if(str[i]==str[j])
{
printf("无效输入,请重新输入:
");
gotoinput;
}
}
}
}
voidc_game(constchar*temp)
{
inti,j,ci;
charin[4];
charout[5]="0A0B";
for(ci=0;ci<8;ci++)
{
printf("第%d次输入:
",ci+1);
c_input(in);
for(i=0;i<4;i++)
{
if(in[i]==temp[i])
{
out[0]++;
}
else
{
for(j=0;j<4;j++)
{
if(in[i]==temp[j])
{
out[2]++;
}
}
}
}
printf("%s\n",out);
if(strcmp(out,"4A0B")==0)
{
printf("游戏成功,按下任意键返回主菜单。
。
");
getch();
return;
}
out[0]='0';
out[2]='0';
}
printf("游戏失败,按下任意键返回主菜单。
。
");
getch();
}
voidc_rand()
{
inti,j;
chardata[]="0123456789";
chartemp[4];
system("cls");
printf("**随机模式**\n\n");
for(i=0;i<4;i++)
{
j=rand()%(10-i);
temp[i]=data[j];
data[j]=data[10-i-1];
}
c_game(temp);
}
voidc_printf()
{
chartemp[4];
system("cls");
printf("**用户输入模式**\n\n");
printf("请输入测试数据:
");
c_input(temp);
system("cls");
printf("**用户输入模式**\n\n");
c_game(temp);
}
voidmain()
{
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程序运行结果
主菜单:
如图十五
图十五主菜单截图
用户测试模式:
如图十六
图十六用户测试模式运行结果截图
随机模式:
如图十七
图十七随机模式运行结果截图
当输入的四个数字中有重复数字时:
如图十八
图十八当输入的四个数字中有重复数字时结果截图
当选择退出后:
如图十九
图十九当选择退出后结果截图
总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。
回顾起此次课程设计,至今我仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,这毕竟独立做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在王老师的辛勤指导下,终于游逆而解。
同时,我学得到很多实用的知识,在次我表示感谢!
同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 课程设计 编写 函数 求取 两个 整数 mn 最大公约数 最小公倍数