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
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程序运行结果
主菜单:如图十五
图十五主菜单截图
用户测试模式:如图十六
图十六用户测试模式运行结果截图
随机模式:如图十七
图十七随机模式运行结果截图
当输入的四个数字中有重复数字时:如图十八
图十八当输入的四个数字中有重复数字时结果截图当选择退出后:如图十九
图十九当选择退出后结果截图
总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。
回顾起此次课程设计,至今我仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,这毕竟独立做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在王老师的辛勤指导下,终于游逆而解。同时,我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!