C语言程序设计课程设计编写函数求取两个整数mn的最大公约数和最小公倍数.docx

上传人:b****5 文档编号:28828772 上传时间:2023-07-20 格式:DOCX 页数:20 大小:191.07KB
下载 相关 举报
C语言程序设计课程设计编写函数求取两个整数mn的最大公约数和最小公倍数.docx_第1页
第1页 / 共20页
C语言程序设计课程设计编写函数求取两个整数mn的最大公约数和最小公倍数.docx_第2页
第2页 / 共20页
C语言程序设计课程设计编写函数求取两个整数mn的最大公约数和最小公倍数.docx_第3页
第3页 / 共20页
C语言程序设计课程设计编写函数求取两个整数mn的最大公约数和最小公倍数.docx_第4页
第4页 / 共20页
C语言程序设计课程设计编写函数求取两个整数mn的最大公约数和最小公倍数.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

C语言程序设计课程设计编写函数求取两个整数mn的最大公约数和最小公倍数.docx

《C语言程序设计课程设计编写函数求取两个整数mn的最大公约数和最小公倍数.docx》由会员分享,可在线阅读,更多相关《C语言程序设计课程设计编写函数求取两个整数mn的最大公约数和最小公倍数.docx(20页珍藏版)》请在冰豆网上搜索。

C语言程序设计课程设计编写函数求取两个整数mn的最大公约数和最小公倍数.docx

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)系统的总体框图如图八

开始

功能菜单显示

随机产生数据

用户输入数据

退出

c_rand()

c_printf()

exit

(1)

图八系统的总体框图

(2)函数间的调用关系如图九

主函数main

随机模式c_rand()

游戏函数c_game()

输入数据函数c_input(char*str)

用户模式c_printf()

输入数据函数c_input()

图九函数间的调用关系

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程序运行结果

主菜单:

如图十五

图十五主菜单截图

用户测试模式:

如图十六

图十六用户测试模式运行结果截图

随机模式:

如图十七

图十七随机模式运行结果截图

当输入的四个数字中有重复数字时:

如图十八

图十八当输入的四个数字中有重复数字时结果截图

当选择退出后:

如图十九

图十九当选择退出后结果截图

总结

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。

因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。

回顾起此次课程设计,至今我仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,这毕竟独立做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在王老师的辛勤指导下,终于游逆而解。

同时,我学得到很多实用的知识,在次我表示感谢!

同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1