c语言课程设计报告数独.docx
《c语言课程设计报告数独.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告数独.docx(9页珍藏版)》请在冰豆网上搜索。
c语言课程设计报告数独
C语言课程设计报告
设计名称C语言课程设计
专业班级
姓名
学号
指导教师
实习时间
成绩
一、设计目的
通过课程设计的实践环节的教学,可以加深学生对课堂所学基础知识的掌握与理解,提高学生对所学内容的综合运用能力;同时也可以通过查询相关资料,培养学生自学能力、接受新知识的能力,提高学习兴趣;增强学生程序设计能力,掌握编程技巧,并可培养学生实际上机调试程序的能力。
“理论与实践”相结合,使学生得到很好的锻炼,为以后学习、工作打下坚实的基础。
每个学生需要独立完成教师安排的设计题目或由学生自拟实际的设计题目,但自拟自拟题目须经指导教师批准方可生效。
二、设计内容
1、开发一款“数独”小游戏(限最多1人完成)
规则:
将数字1-9放置在每个小格里,使得每一行、没一列、每一个3*3的方框里都没有重复的数字即可。
要求:
(1)、字符界面完成即可(图形界面更好,有加分)
(2)、可以没有表格线
(3)、原有的36个数字及位置随机产生,原有数字越多,游戏越简单。
可以由用户输入原有数字的个数,以控制游戏难度;
(4)、其它空格处的数字由玩家从键盘输入,当输入的某个数字违背了规则,则游戏以失败结束,显示“Failure!
“;当所有空格处数字均已经填上,并且没有违背规则,则游戏以成功结束,显示“Success!
”。
8
2
5
6
3
8
7
5
1
4
8
9
1
7
1
5
3
7
2
8
4
9
7
8
5
5
7
2
4
8
7
1
5
7
8
2
三、详细设计说明
1.数独小游戏说明
数独游戏在9×9的方格内进行,分为3×3的小方格,被称为“区”:
区数独游戏的目的是根据下列规则,用1至9之间的数字填满空格,一个格子只能填入一个数字。
每个数字在每一行只能出现一次。
每个数字在每一列只能出现一次。
每个数字在每一区只能出现一次
1>产生原始数字:
由系统产生若干数字(1~81),作为游戏的原始数字供玩家进行数独游戏
2>退出系统:
用户填完数独,系统判断正误,然后退出系统.
2.数独游戏流程图
四、软件使用说明
1)系统要求:
win98以上操作系统;
2)语言平台:
tc++或vc++6.0;
运行程序看到如下界面:
输入数据
运行结果
五、设计总结(课程设计心得与体会)
通过第18周这个星期的程序设计,我从中得到了许多的经验以及软件设计的一些新的思路;从数独游戏的设计以及分析中,本人从中理解到了数据结构对于计算机软件设计的重要性,它的使用,可以改变一个软件的运行周期,也可以将软件的思路从繁化简,并且都能够通过数据结构的相关引导,将本身以前编程思想进行扩充,发展;这也是在这次课程设计中我所获益的地方。
随着时间的推移,课程设计也即将结束了,但这个学期数据结构的学习还是具有相当大的意义,它从一个程度上改变了我们的编程思想,如何将一个程序快速而又准备的进行编写,进行编译,都成为了我们思考的重点,也通过这一个学期的学习,我们将数据结构的思想带入到了我们以后的编程学习中去。
在这个阶段,我也明白了,好的思想,不能提留于字面上的认知,还需要的是平时多练多写一些相关的程序,并且通过修改,加入新的算法去尝试改变自己的一些编程思想。
保持更新算法的速度,这才是关键。
课程设计已经接近尾声了,但它给我的不只是程序设计上的满足,更重要的是对自己编程思想的一次更新,以及对算法的一个全新的认识!
六、附录1:
参考文献
[1]谭浩强.C程序设计(第三版).北京:
清华大学出版社,2005
[2]谭浩强.C程序设计题解与上机指导(第三版).北京:
清华大学
出版社,2005
[3]刘振安,刘燕君,孙忱.C++语言课程设计.北京:
高等教育出版社,2003
[4]陈志泊,张海燕,王春玲.VisualC++程序设计.中国铁道出版社,2005
[5]吕凤哲,C++语言程序设计(第二版).北京:
电子工业出版社,2005
[6]殷人昆,陶永雷等.数据结构(用面向对象方法与C++).北京:
清华大学出版社,1999
[7]严蔚敏,吴伟民,数据结构.北京:
清华大学出版社,1997
[8]李春葆.数据结构—考研指导.北京:
清华大学出版社,2002[9]陈慧南.数据结构—C++语言描述.北京:
人民邮电出版社,
七、附录2:
部分程序清单(带有较详细的注释)
intresult=0;//结果数
{
inta[9][9];
for(inti=0;i<9;i++)
{printf("请输入第%d行的9个数:
",i+1);
for(intj=0;j<9;j++)
scanf("%d",&a[i][j]);
}
printf("数独的解为:
\n\n");
Sudoku(a,0);
if(result==0)
printf("此数独无解!
");
return0;
}
//输出可行的解
voidprint(inta[9][9])
boolcheck(inta[9][9],inti,intj,intk)
{intm,n;
//判断行
for(n=0;n<9;n++)
{if(a[i][n]==k)
returnfalse;}
//判断列
for(m=0;m<9;m++)
{if(a[m][j]==k)
returnfalse;}
//判断所在小九宫格
intt1=(i/3)*3,t2=(j/3)*3;
for(m=t1;m{
for(n=t2;n{if(a[m][n]==k)
returnfalse;}
}
//可行,返回true
returntrue;
//数独求解函数
voidSudoku(inta[9][9],intn)
{inttemp[9][9];
inti,j;
for(i=0;i<9;i++)
{for(j=0;j<9;j++)
temp[i][j]=a[i][j];
}
i=n/9;j=n%9;//求出第n个数的行数和列数
if(a[i][j]!
=0)//已经有原始数据
{if(n==80)//是最后一个格子,输出可行解
print(temp);
else//不是最后一个格子,求下一个格子
Sudoku(temp,n+1);
}
else//没有数据
{for(intk=1;k<=9;k++)
{boolflag=check(temp,i,j,k);
if(flag)//第i行、第j列可以是k
{temp[i][j]=k;//设为k
if(n==80)
print(temp);
elseSudoku(temp,n+1);
temp[i][j]=0;//恢复为0,判断下一个k}
}
}
}
八、教师评语
评阅教师:
评阅日期:
2012年7月日