当前位置:文档之家› C语言程序设计课程设计编写函数求取两个整数mn的最大公约数和最小公倍数

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

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

C语言程序设计课程设计

专业:电气工程及其自动化

班级:电气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图如图一

max函数:N-S图如图二min函数:N-S图如图三

图三min函数

1.3源程序

#include

int main()

{ int max(int,int);

int min(int,int,int);

int m,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);

return 0;

}

int max(int m,int n)

{ int t,r;

if(n>m);

{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题目

#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=%d\n", a, b); }

2.2题目分析

该源程序的目的是交换两个数的值,有主函数可以看出该函数是应用指针交换两个数的值。所以调用函数中的a,b 都要改成*a,*b, void fun(int a, b)改成void fun(int *a,int *b)。clrscr( )只能在Turbo-C 中可用所以改用system("cls")。 viod fun 函数:N-S 图如图五 main 函数:N-S 图如图六

图五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, &b);

fun(&a,&b);

printf("a=%d b=%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流程图

输入数字函数:如图十

图十输入数字函数

游戏函数:如图十一

图十一游戏函数

随机数产生函数:如图十二

图十二随机数产生函数

用户输入模式函数:如图十三

图十三用户输入模式函数主函数:如图十四

图十四主函数

3.4源程序

#include

#include

#include

#include

#include

void c_input(char *str)

{

int i,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("无效输入,请重新输入:");

goto input;

}

for(j=0;j

{

if(str[i]==str[j])

{

printf("无效输入,请重新输入:");

goto input;

}

}

}

}

void c_game(const char *temp)

{

int i,j,ci;

char in[4];

char out[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();

}

void c_rand()

{

int i,j;

char data[]="0123456789";

char temp[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);

}

void c_printf()

{

char temp[4];

system("cls");

printf("**用户输入模式**\n\n"); printf("请输入测试数据:");

c_input(temp);

system("cls");

printf("**用户输入模式**\n\n"); 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程序运行结果

主菜单:如图十五

图十五主菜单截图

用户测试模式:如图十六

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

随机模式:如图十七

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

当输入的四个数字中有重复数字时:如图十八

图十八当输入的四个数字中有重复数字时结果截图当选择退出后:如图十九

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

总结

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

回顾起此次课程设计,至今我仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,这毕竟独立做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在王老师的辛勤指导下,终于游逆而解。同时,我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!

相关主题
文本预览
相关文档 最新文档