c语言课程设计报告 数独.docx
《c语言课程设计报告 数独.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告 数独.docx(9页珍藏版)》请在冰豆网上搜索。
c语言课程设计报告数独
C说话课程设计陈述
设计名称C说话课程设计
专业班级
姓名
学号
指点教师
练习时光
成绩
目次
一.设计目标2
二.设计内容3
三.具体设计解释4
四.软件应用解释6
五.设计总结(课程设计心得与领会)8
六.附录1:
参考文献9
七.附录2:
部分程序清单(带有较具体的注释)10
八.教师考语13
一.设计目标
经由过程课程设计的实践环节的教授教养,可以加深学生对教室所学基本常识的控制与懂得,进步学生对所学内容的分解应用才能;同时也可以经由过程查询相干材料,造就学生自学才能.接收新常识的才能,进步进修兴致;加强学生程序设计才能,控制编程技能,并可造就学生现实上机调试程序的才能.“理论与实践”相联合,使学生得到很好的锤炼,为今后进修.工作打下坚实的基本.每个学生须要自力完成教师安插的设计标题或由学生自拟现实的设计标题,但自拟自拟标题须经指点教师同意方可生效.
二.设计内容
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
三.具体设计解释
数独游戏在9×9的方格内进行,分为3×3的小方格,被称为“区”:
区数独游戏的目标是依据下列规矩,用1至9之间的数字填满空格,一个格子只能填入一个数字.每个数字在每一行只能消失一次.每个数字在每一列只能消失一次.每个数字在每一区只能消失一次
1>产生原始数字:
由体系产生若干数字(1~81),作为游戏的原始数字供玩家进行数独游戏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
—考研指点.北京:
清华大学出版社,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月日