c语言课程设计报告 数独

  • 格式:doc
  • 大小:158.00 KB
  • 文档页数:14

c语言课程设计报告 数独
1 / 14
C语言课程设计报告

设计名称 C语言课程设计
专业班级
姓 名
学 号
指导教师
实习时间
成 绩

c语言课程设计报告 数独

1 / 14
目 录

一、设计目的ﻩ错误!未定义书签。
二、设计内容ﻩ错误!未定义书签。
三、详细设计说明ﻩ错误!未定义书签。
四、软件使用说明 ......................... 错误!未定义书签。
五、设计总结(课程设计心得与体会) ....... 错误!未定义书签。
六、附录1:参考文献ﻩ错误!未定义书签。
七、附录2:部分程序清单(带有较详细的注释)ﻩ错误!未定义书签。
八、教师评语 ............................. 错误!未定义书签。


一、设计目的

通过课程设计的实践环节的教学,可以加深学生对课堂所
学基础知识的掌握与理解,提高学生对所学内容的综合运用能
力;同时也可以通过查询相关资料,培养学生自学能力、接受新
知识的能力,提高学习兴趣;增强学生程序设计能力,掌握编程技
巧,并可培养学生实际上机调试程序的能力。“理论与实践"相结
合,使学生得到很好的锻炼,为以后学习、工作打下坚实的基础。
每个学生需要独立完成教师安排的设计题目或由学生自拟实际
的设计题目,但自拟自拟题目须经指导教师批准方可生效。
c语言课程设计报告 数独
2 / 14

二、设计内容

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
c语言课程设计报告 数独
3 / 14
5 7 2
4 8 7 1
5 7
8 2

ﻬ三、详细设计说明
1.数独小游戏说明
数独游戏在9×9的方格内进行,分为3×3的小方格,被称为
“区”:区数独游戏的目的是根据下列规则,用1至9之间的数字填
满空格,一个格子只能填入一个数字。每个数字在每一行只能出现一
次。每个数字在每一列只能出现一次.每个数字在每一区只能出现一

1>产生原始数字:由系统产生若干数字(1~81),作为游戏的原始
数字供玩家进行数独游戏ﻫ2>退出系统: 用户填完数独,系统判断正
误,然后退出系统.
c语言课程设计报告 数独

4 / 14
2。数独游戏流程图
c语言课程设计报告 数独

5 / 14
四、软件使用说明
1)系统要求:win98以上操作系统;
2) 语言平台:tc++或vc++6.0;
运行程序看到如下界面:
c语言课程设计报告 数独

6 / 14
输入数据

运行结果
c语言课程设计报告 数独

7 / 14
五、设计总结(课程设计心得与体会)
通过第18周这个星期的程序设计,我从中得到了许多的经验以
及软件设计的一些新的思路;从数独游戏的设计以及分析中,本人从
中理解到了数据结构对于计算机软件设计的重要性,它的使用,可以
改变一个软件的运行周期,也可以将软件的思路从繁化简,并且都能
够通过数据结构的相关引导,将本身以前编程思想进行扩充,发展;
这也是在这次课程设计中我所获益的地方。
随着时间的推移,课程设计也即将结束了,但这个学期数据结
构的学习还是具有相当大的意义,它从一个程度上改变了我们的编程
思想,如何将一个程序快速而又准备的进行编写,进行编译,都成为
了我们思考的重点,也通过这一个学期的学习,我们将数据结构的思
想带入到了我们以后的编程学习中去。在这个阶段,我也明白了,好
c语言课程设计报告 数独
8 / 14
的思想,不能提留于字面上的认知,还需要的是平时多练多写一些相
关的程序,并且通过修改,加入新的算法去尝试改变自己的一些编程
思想。保持更新算法的速度,这才是关键。
课程设计已经接近尾声了,但它给我的不只是程序设计上的满
足,更重要的是对自己编程思想的一次更新,以及对算法的一个全新
的认识!


六、附录1:参考文献ﻫ
[1]谭浩强。 C程序设计(第三版) 。 北京:清华大学出版社,
2005

[2]谭浩强。 C程序设计题解与上机指导(第三版) 。 北京:清华
大学

出版社, 2005
[3] 刘振安,刘燕君,孙忱。 C++语言课程设计.北京:高等

教育出版社,2003
[4] 陈志泊, 张海燕, 王春玲. Visual C++程序设计. 中国
铁道出版社 ,2005
[5] 吕凤哲,C++语言程序设计(第二版).北京:电子工业出版
社,2005
[6] 殷人昆,陶永雷等.数据结构(用面向对象方法与C++ ).北
京:清华大学出版社,1999
c语言课程设计报告 数独
9 / 14
[7] 严蔚敏,吴伟民,数据结构.北京:清华大学出版社,1997
[8] 李春葆.数据结构—考研指导。北京:清华大学出版社,20
02[9] 陈慧南.数据结构—C++语言描述.北京:人民邮电出版
社,

七、附录2:部分程序清单(带有较详细的注释)
int result=0; //结果数
{
int a[9][9];
for(int i=0;i<9;i++)
{ printf(”请输入第%d行的9个数:",i+1);
for(int j=0;j<9;j++)
scanf("%d",&a[i][j]);
}
printf(”数独的解为:\n\n”);
Sudoku(a,0);
if(result==0)
printf("此数独无解!");
c语言课程设计报告 数独
10 / 14
return 0;

//输出可行的解
void print(int a[9][9])
bool check(int a[9][9],int i,int j,int k)
{int m,n;
//判断行
for(n=0;n<9;n++)
{if(a[i][n] == k)
return false;}
//判断列
for(m=0;m<9;m++)
{if(a[m][j] == k)
return false;}
//判断所在小九宫格
int t1=(i/3)*3,t2=(j/3)*3;
for(m=t1;m〈t1+3;m++)
{
for(n=t2;n〈t2+3;n++)
{ if(a[m][n] == k)
return false;}

c语言课程设计报告 数独
11 / 14
//可行,返回true
return true;
//数独求解函数
void Sudoku(int a[9][9],int n)
{int temp[9][9];
int i,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(int k=1;k〈=9;k++)
{ bool flag=check(temp,i,j,k);
if(flag) //第i行、第j列可以是k
{temp[i][j]=k; //设为k
c语言课程设计报告 数独
12 / 14
if(n == 80)
print(temp);
else Sudoku(temp,n+1);
temp[i][j]=0; //恢复为0,判断下一个k }
}
}

八、教师评语
c语言课程设计报告 数独

13 / 14

评阅教师:

评阅日期: 2012年 7
月 日