




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机八皇后、计算机实验报告8700字
编号:()字号《软件课程设计》报告1软件课程设计任务书专业年级:学生姓名:任务下达日期:200年月日课程设计日期:200年月日至200年月日课程设计题目:面向过程23软件课程设计指导教师评阅书指导教师评语(①基础理论及基本技能的掌握;②独立解决实际问题的能力;③研究内容的理论依据和技术方法;④取得的主要成果及创新点;⑤工作态度及工作量;⑥总体评价及建议成绩;⑦存在问题等):成绩:指导教师签字:年月日4目录面向对象设计题4------4:计算器(test8.cpp)1.1需求分析……………………….…61.2概要设计………………………...61.3详细设计与编码………………..61.4调试分析………………………...101.5用户使用说明………………….111.6设计心得………………………...11二、面向过程设计题10------8:八皇后问题(test10.cpp)2.1需求分析…………122.2概要设计………………………...122.3详细设计与编码………………...122.4调试分析………………………...142.5用户使用说明………………….152.6设计心得………………………...155面向过程设计题8------8:加减乘除一、需求分析随着社会的发展,科学的进步,人们面临着越来越多的数据,而处理这些数据时,最基本的操作便是对这些数据进行计算。但是在巨大的计算量面前,人往往显得有些力不从心,于是人们对计算器需求也愈加强烈。本程序便应此要求编写了一个简易的计算器程序二、概要设计本程序的一个主要设计思路便是根据用户输入的表达式,然后求解输出。本程序所选择的数据结构主要为栈,一个操作数栈,一个运算符栈,之后便根据相应的算术优先级对两个栈进行相应的操作。同时本程序还可以对表达式的正误进行判断,如果出错就提醒用户。三、详细设计与编码/*4.设计一个简单的计算器类(类型),要求:(1)从键盘读入算式。(2)可以进行加、减、乘、除运算。(3)运算要有优先级。(4)用户可以按任何的运算符出现顺序进行输入。(5)不限定用户输入的计算式的长度。(6)可以带有括号()。(7)有排错功能,当用户输入错误的算式时提示用户。*/#include<iostream>#include<string>usingnamespacestd;constmaxsize=20;enumError_code//设立一个枚举类型用以返回错误类型{success,overflow,underflow6};template<classT>//用类模板设立一个栈类classStack{public:Stack();boolempty()const;boolfull()const;intsize()const;voidclear();Error_codetop(T&item)const;Error_codepop();Error_codepush(constT&item);private:intcount;Tentry[maxsize];};template<classT>Stack<T>::Stack(){count=0;}template<classT>boolStack<T>::empty()const{returncount==0;}template<classT>boolStack<T>::full()const{returncount==maxsize;}template<classT>//判空//判满7intStack<T>::size()const{returncount;}template<classT>//实现栈的清空voidStack<T>::clear(){count=0;}template<classT>Error_codeStack<T>::top(T&item)const{if(empty())returnunderflow;item=entry[count-1];returnsuccess;}template<classT>{if(empty())returnunderflow;Error_codeStack<T>::pop()//弹出操作count--;returnsuccess;}template<classT>{}booluser_says_qingchu()8Error_codeStack<T>::push(constT&item)if(full())returnoverflow;entry[count++]=item;returnsuccess;{}Stack<char>sign;Stack<double>num;intset;voidprocess(charc){intd;boolinitial_response=true;do{if(initial_response)elsedo{d=cin.get();cout<<"RespondwitheithercorA:"<<flush;cout<<"(c,A)?"<<flush;}while(d=='\n'||d==''||d=='\t');initial_response=false;}while(d!='c'&&d!='C'&&d!='A'&&d!='a');return(d=='c'||d=='C');intk=0;doublea,b;sign.pop();if(num.top(b)==success)如果栈中有两个操作数则进行相应的运算{num.pop();if(num.top(a)==success){num.pop();k=1;9}}}if(k){}else{set=1;num.push(-1);}switch(c){case'+':num.push(a+b);break;case'-':num.push(a-b);break;case'*':num.push(a*b);break;case'/':}if(b==0){}elsenum.push(a/b);set=4;num.push(-1);break;voidget_command(string&str){}doubledo_command(conststring&str){cout<<"\n请输入要进行运算的表达式:"<<endl;cin>>str;strings="";doubleoutcome=-1;10charc;for(inti=0;str[i]!='\0';i++){if(set!=0)break;while(1){if(str[i]<='9'&&str[i]>='0'||str[i]=='.'){}else{if(s!=""){if(num.push(atof(s.c_str()))==overflow)s+=str[i];i++;set=3;s="";}charch=str[i];switch(ch){case'*'://根据优先级先算乘除case'/':if(sign.top(c)==success)if(c=='*'||c=='/')process(c);if(sign.push(ch)==overflow)set=3;}break;}break;11case'+'://再算加减case'-':while(sign.top(c)==success){if(c!='(')process(c);elsebreak;}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);elsebreak;}sign.pop();break;case'=':while(sign.top(c)==success){process(c);}break;default:set=2;break;}//右括号的先算括号中的12出}}if(num.size()==1&&sign.size()==0)num.top(outcome);elseset=1;if(set==0)cout<<"运算结果是:\n"<<endl;//对计算结果进行输else{}returnoutcome;outcome=-1;if(set==1)cout<<"\n你输入的不匹配,有错误发生。"<<endl;if(set==2)cout<<"\n你输入了非法字符,请重新输入!"<<endl;if(set==3)cout<<"\nStackisfull,Lostresult!!"<<endl;if(set==4)cout<<"\n分母为0,不能进行除法运算。"<<endl;intmain(){do{stringstr,s;set=0;get_command(str);s=str;if(str[0]=='-')str='0'+str;for(inti=1;str[i]!='\0';i++){if(str[i]=='-'&&str[i-1]=='('){str.insert(i,"0");i++;}13}}doubleout=do_command(str);cout<<s<<out<<endl;num.clear();sign.clear();cout<<"\n还要计算其它的吗?"<<flush;}while(user_says_qingchu());return0;四、调试分析A、调试过程中遇到以下问题:1、随机数的产生不“随机”,经过查阅MSDN后知道缺少了一个初始化函数,这样每次得到的随机数就不唯一了2、怎样才能将程序的终止与否这一控制权转交给用户,最后为了实现这一功能又在程序的最外层加了一层循环,每当一道题目做完以后有用户给出一个是否继续的命令。3、本程序开始在判断除法运算是否正确的时候出现了一个Bug,原因在于计算机对除法的运算精度很高,因而无论用户输入什么计算机判断都唯错,为解决此问题在进行除法判断的时候进行了一些改变,如果答案的偏差控制在了一定的范围内,那就是正确的。B、以下为程序运行过程中的部分输出14五、用户使用说明用户在使用时仅需根据程序的提示去做即可,具体如下;1、Doyouwanttocontinue,pressYORN输入Y:继续做题;输入N:退出程序。2、Entertheoperationyouwant:+、-、*、/输入“+”:题目为加法运算;输入“-”:题目为键法运算;输入“*”:题目为乘法运算;输入“/”:题目为除法运算。3、Entertherange:A:1~10B:1~100:输入“A”:所生成题目为一位数运算;输入“B”;所生成题目为两位数运算。六、设计心得纸上得来终觉浅,绝知此事要躬行。作为一名计算机专业的本科生,如果仅仅只是停留在理论阶段,而不亲自动手去上机实践,那么也是徒劳而无所获。通过本次程序设计,我初步体会到了人机交互的乐趣。尽管在编程过程中,我遇到了这样或那样的问15题,但最终经过自己的反复思考以及小组成员间的讨论,都一一予以解决了。同时我也深深懂得了与人合作交流的乐趣,在今后的实践当中我将会更加积极的与他人交流合作,虚心向他人学习,一次来提升自己,共同进步。面向过程设计题10------10八皇后问题一、需求分析八皇后问题,是一个古老而著名的问题,该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。当然如果仅仅是用人力去解决这样一个问题,那么求解的过程毫无疑问是复杂而繁琐的,于是编写一个解决此问题的程序变是顺理成章的事情了。二、概要设计本程序对所要求的功能进行了相应的扩展:它不仅可以解决皇后数目为八个的时候的一种摆放方法,而且还可以求出皇后数目为N(N为一整数)时皇后的摆放方法。首先先由用户输入一个数字N(皇后数目),然后程序根据相应的输入对棋盘(一个二维数组)进行相应的初始化工作,接着程序调用递归函数,以深度优先收索算法对问题进行求解,最后将所求皇后的摆放位置输出。三、详细设计与编码#include<stdio.h>intconstmax=10;intn;intcount=0;//已经摆放好的皇后数目charmap[max][max];//棋盘voiddfs(intj);16intmain(){inti,j;printf("输入皇后的数目:\n");scanf("%d",&n);//读入皇后数目for(i=0;i<=n;i++)dfs(1);//调用递归函数求解printf("------皇后在棋盘中的摆放------\n");//将结果输出for(j=0;j<=n;j++)map[i][j]='.';for(i=1;i<=n;i++){printf("");for(j=1;j<=n;j++)printf("%c",map[i][j]);printf("\n");}printf("------*************------\n");return0;}voiddfs(intj){inti,k;boolflag=true;if(count==n)return;//如果所有皇后都已经摆好则返回for(i=1;i<=n;i++){17线线flag=true;for(k=1;k<=j-1&&flag;k++)if(map[i][k]!='.')flag=false;//判断是否不在同一行for(k=1;k
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030中国熟食肉市场销售规模及前景营销推广调研报告
- 艺术教育新教师培训心得体会
- 石油钻探施工安全保障措施
- 建筑行业工会委员会职责及安全保障
- 基于随机极限平衡法的三维边坡可靠度分析
- 基于注意力机制的激光距离选通三维成像
- 北师大版八年级数学下册《2.4一元一次不等式》同步测试题带答案
- 六年级体育运动推广计划
- 基于多传感器数据融合的手势识别方法研究
- 高职院校教师师德师风培训心得体会
- 技术经纪人练习题集附有答案
- 内科学讲义(唐子益版)
- GB/T 4357-2022冷拉碳素弹簧钢丝
- GB/T 19845-2005机械振动船舶设备和机械部件的振动试验要求
- GB/T 14614-1993小麦粉吸水量和面团揉和性能测定法粉质仪法
- 酱酒行业发展趋势分析
- 《红楼梦》贾府平面图
- 养老机构全套服务管理流程图()
- 运用PDCA办法提高分级护理落实率
- 高级卒中中心申报操作流程
- 幼儿园幼儿小篮球活动体能测试表
评论
0/150
提交评论