ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:56.89KB ,
资源ID:8445986      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8445986.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机八皇后计算机实验报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机八皇后计算机实验报告.docx

1、计算机八皇后计算机实验报告编号:( )字 号软件课程设计报告软件课程设计任务书专业年级: 学生姓名: 任务下达日期: 200 年 月 日课程设计日期: 200 年 月 日至 200年 月 日课程设计题目: 面向过程 类别题目序号成绩面向过程5.判断日期与星期8:加减乘除(3、4、6、7。)面向对象3. 用三种方法通过虚函数求Fibonacci数列7.关于磁盘文档的输入输出(1、2、4、5、6。)图形界面1.通过MFCAPPWIZARD创建一个计算器(2。)数据结构2. 假设有一个循环链表的长度大于1,且表中既无头结点也无头指针。已知p为指向链表中某结点的指针,试编写算法在链表中删除结点p 的前

2、趋结点。4.设计一个统计选票的算法,输出每个候选的得票结果(假设采用单链表存放选票,候选人编号依次为1,2,3,N,且每张选票选且只选一人)(1、3。).软件课程设计指导教师评阅书指导教师评语(基础理论及基本技能的掌握;独立解决实际问题的能力;研究内容的理论依据和技术方法;取得的主要成果及创新点;工作态度及工作量;总体评价及建议成绩;存在问题等):成 绩: 指导教师签字: 年 月 日目录面向对象设计题4-4:计算器(test8.cpp)1.1 需求分析.61.2 概要设计.61.3 详细设计与编码.61.4 调试分析.101.5 用户使用说明 .111.6 设计心得.11二、面向过程设计题10

3、-8:八皇后问题(test10.cpp)2.1 需求分析122.2 概要设计.122.3 详细设计与编码.122.4 调试分析.142.5 用户使用说明 .152.6 设计心得.15面向过程设计题8-8:加减乘除一、 需求分析随着社会的发展,科学的进步,人们面临着越来越多的数据,而处理这些数据时,最基本的操作便是对这些数据进行计算。但是在巨大的计算量面前,人往往显得有些力不从心,于是人们对计算器需求也愈加强烈。本程序便应此要求编写了一个简易的计算器程序二、概要设计 本程序的一个主要设计思路便是根据用户输入的表达式,然后求解输出。本程序所选择的数据结构主要为栈,一个操作数栈,一个运算符栈,之后便

4、根据相应的算术优先级对两个栈进行相应的操作。同时本程序还可以对表达式的正误进行判断,如果出错就提醒用户。三、 详细设计与编码/*4. 设计一个简单的计算器类(类型),要求:(1) 从键盘读入算式。(2) 可以进行加、减、乘、除运算。(3) 运算要有优先级。(4) 用户可以按任何的运算符出现顺序进行输入。(5) 不限定用户输入的计算式的长度。(6) 可以带有括号()。(7) 有排错功能,当用户输入错误的算式时提示用户。*/#include#includeusing namespace std;const maxsize=20;enum Error_code /设立一个枚举类型用以返回错误类型 s

5、uccess, overflow, underflow;template /用类模板设立一个栈类class Stackpublic: Stack(); bool empty() const; bool full() const; int size() const; void clear(); Error_code top(T&item) const; Error_code pop(); Error_code push(const T&item);private: int count; T entrymaxsize; ; template Stack:Stack() count=0; templ

6、ate /判空 bool Stack:empty() const return count=0; template /判满 bool Stack:full() const return count=maxsize; template int Stack:size() const return count; template /实现栈的清空 void Stack:clear() count=0; template Error_code Stack:top(T&item) const if(empty() return underflow; item=entrycount-1; return su

7、ccess; template Error_code Stack:pop() /弹出操作 if(empty() return underflow; count-; return success; template Error_code Stack:push(const T&item) if(full() return overflow; entrycount+=item; return success; bool user_says_qingchu() int d; bool initial_response=true; do if(initial_response) cout(c,A)?fl

8、ush; else coutRespond with either c or A:flush; do d=cin.get(); while(d=n|d= |d=t); initial_response=false; while(d!=c&d!=C&d!=A&d!=a); return(d=c|d=C); Stack sign; Stack num; int set; void process(char c) int k=0; double a,b; sign.pop(); if(num.top(b)=success) 如果栈中有两个操作数则进行相应的运算 num.pop(); if(num.t

9、op(a)=success) num.pop(); k=1; if(k) switch(c) case+:num.push(a+b);break; case-:num.push(a-b);break; case*:num.push(a*b);break; case/: if(b=0) set=4; num.push(-1); else num.push(a/b); break; elseset=1;num.push(-1); void get_command(string&str) coutn 请输入要进行运算的表达式:str; double do_command(const string&s

10、tr) string s= ; double outcome=-1; char c; for(int i=0;stri!=0;i+) if(set!=0) break; while(1) if(stri=0|stri=.) s+=stri; i+; else if(s!= )if(num.push(atof(s.c_str()=overflow) set=3; s= ; break; char ch=stri; switch (ch) case*: /根据优先级先算乘除 case/: if(sign.top(c)=success) if(c=*|c=/)process(c); if(sign.

11、push(ch)=overflow) set=3; break; case+: /再算加减 case-: while(sign.top(c)=success) if(c!=() process(c); else break; if(sign.push(ch)=overflow) set=3; break; case(: /右括号的先算括号中的 if(sign.push(ch)=overflow) set=3; break; case): while(sign.top(c)=success) if(c!=() process(c); else break; sign.pop(); break;

12、case=: while(sign.top(c)=success) process(c); break; default:set=2;break; if(num.size()=1&sign.size()=0) num.top(outcome); else set=1; if(set=0) cout运算结果是:nendl; /对计算结果进行输出 else outcome=-1; if(set=1)coutn 你输入的不匹配,有错误发生。endl; if(set=2)coutn 你输入了非法字符,请重新输入!endl; if(set=3)coutnStack is full,Lost result

13、!endl; if(set=4)coutn 分母为0,不能进行除法运算。endl; return outcome; int main() do string str,s; set=0; get_command(str); s=str; if(str0=-) str=0+str; for(int i=1;stri!=0;i+) if(stri=-&stri-1=() str.insert(i,0); i+; double out=do_command(str); coutsoutendl; num.clear(); sign.clear(); coutn 还要计算其它的吗?flush; whil

14、e(user_says_qingchu(); return 0;四、调试分析A、调试过程中遇到以下问题:1、 随机数的产生不“随机”,经过查阅MSDN后知道缺少了一个初始化函数,这样每次得到的随机数就不唯一了2、 怎样才能将程序的终止与否这一控制权转交给用户,最后为了实现这一功能又在程序的最外层加了一层循环,每当一道题目做完以后有用户给出一个是否继续的命令。3、 本程序开始在判断除法运算是否正确的时候出现了一个Bug,原因在于计算机对除法的运算精度很高,因而无论用户输入什么计算机判断都唯错,为解决此问题在进行除法判断的时候进行了一些改变,如果答案的偏差控制在了一定的范围内,那就是正确的。B、以

15、下为程序运行过程中的部分输出五、用户使用说明 用户在使用时仅需根据程序的提示去做即可,具体如下;1、 Do you want to continue,press Y OR N 输入Y:继续做题; 输入N:退出程序。2、Enter the operation you want:+、-、*、/输入“+”:题目为加法运算;输入“-”:题目为键法运算;输入“*”:题目为乘法运算;输入“/”:题目为除法运算。3、Enter the range:A:110 B:1100: 输入“A”:所生成题目为一位数运算; 输入“B”;所生成题目为两位数运算。六、设计心得 纸上得来终觉浅,绝知此事要躬行。作为一名计算机

16、专业的本科生,如果仅仅只是停留在理论阶段,而不亲自动手去上机实践,那么也是徒劳而无所获。通过本次程序设计,我初步体会到了人机交互的乐趣。尽管在编程过程中,我遇到了这样或那样的问题,但最终经过自己的反复思考以及小组成员间的讨论,都一一予以解决了。同时我也深深懂得了与人合作交流的乐趣,在今后的实践当中我将会更加积极的与他人交流合作,虚心向他人学习,一次来提升自己,共同进步。面向过程设计题10-10八皇后问题一、需求分析八皇后问题,是一个古老而著名的问题,该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一

17、斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。当然如果仅仅是用人力去解决这样一个问题,那么求解的过程毫无疑问是复杂而繁琐的,于是编写一个解决此问题的程序变是顺理成章的事情了。二、概要设计 本程序对所要求的功能进行了相应的扩展:它不仅可以解决皇后数目为八个的时候的一种摆放方法,而且还可以求出皇后数目为N(N为一整数)时皇后的摆放方法。首先先由用户输入一个数字N(皇后数目),然后程序根据相应的输入对棋盘(一个二维数组)进行相应的初始化工作,接着程序调用递归函数,以深度优先收索算法对问题进行求解,最后将

18、所求皇后的摆放位置输出。三、 详细设计与编码 #includeint const max=10;int n;int count=0; /已经摆放好的皇后数目char mapmaxmax;/棋盘void dfs(int j);int main() int i,j; printf(输入皇后的数目:n); scanf(%d,&n); /读入皇后数目 for(i=0;i=n;i+) for(j=0;j=n;j+) mapij=.; dfs(1); /调用递归函数求解 printf(-皇后在棋盘中的摆放-n);/将结果输出 for(i=1;i=n;i+) printf( ); for(j=1;j=n;j

19、+) printf(%c ,mapij); printf(n); printf(-*-n);return 0;void dfs(int j) int i,k; bool flag=true; if(count=n)return;/如果所有皇后都已经摆好则返回 for(i=1;i=n;i+) flag=true; for(k=1;k=j-1&flag;k+) if(mapik!=.)flag=false;/判断是否不在同一行 for(k=1;k=1&k+i-j=n) if(mapk+i-jk!=.)flag=false;/判断是否不再同一对角线 for(k=1;k=1&i+j-k=n) if(m

20、api+j-kk!=.)flag=false;/判断是否不再同一对角线 if(flag) mapij=#; count+; dfs(j+1); if(count=n)return; mapij=.; count-; 三、调试分析 A、本程序在调试过程中组要遇到了一下问题:1、 进行递归函数调用时没有进行返回上一步的条件设置,导致程序进入死循环;2、 在设置了递归调用的返回条件后,没有对当前状态进行适当的清理工作,也未能得到正确的结果;3、 为对二维数组(棋盘)进行相应的初始化,使得在输出错误。B、以下为程序运行过程中的部分输出四、用户使用说明 用户对本程序所需进行的操作非常简单,只需输入一个整数N(皇后的数目),程序便会将皇后的摆放方法输出。 五、设计心得作为一名计算机专业的本科生,如果仅仅只是停留在理论阶段,而不亲自动手去上机实践,那么也是徒劳而无所获。通过本次程序设计,我初步体会到了人机交互的乐趣。尽管在编程过程中,我遇到了这样或那样的问题,但最终经过自己的反复思考以及小组成员间的讨论,都一一予以解决了。同时我也深深懂得了与人合作交流的乐趣,在今后的实践当中我将会更加积极的与他人交流合作,虚心向他人学习,一次来提升自己,共同进步。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1