計(jì)算機(jī)八皇后、計(jì)算機(jī)實(shí)驗(yàn)報(bào)告8700字_第1頁(yè)
計(jì)算機(jī)八皇后、計(jì)算機(jī)實(shí)驗(yàn)報(bào)告8700字_第2頁(yè)
計(jì)算機(jī)八皇后、計(jì)算機(jī)實(shí)驗(yàn)報(bào)告8700字_第3頁(yè)
計(jì)算機(jī)八皇后、計(jì)算機(jī)實(shí)驗(yàn)報(bào)告8700字_第4頁(yè)
計(jì)算機(jī)八皇后、計(jì)算機(jī)實(shí)驗(yàn)報(bào)告8700字_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

計(jì)算機(jī)八皇后、計(jì)算機(jī)實(shí)驗(yàn)報(bào)告8700字

編號(hào):()字號(hào)《軟件課程設(shè)計(jì)》報(bào)告1軟件課程設(shè)計(jì)任務(wù)書專業(yè)年級(jí):學(xué)生姓名:任務(wù)下達(dá)日期:200年月日課程設(shè)計(jì)日期:200年月日至200年月日課程設(shè)計(jì)題目:面向過(guò)程23軟件課程設(shè)計(jì)指導(dǎo)教師評(píng)閱書指導(dǎo)教師評(píng)語(yǔ)(①基礎(chǔ)理論及基本技能的掌握;②獨(dú)立解決實(shí)際問(wèn)題的能力;③研究?jī)?nèi)容的理論依據(jù)和技術(shù)方法;④取得的主要成果及創(chuàng)新點(diǎn);⑤工作態(tài)度及工作量;⑥總體評(píng)價(jià)及建議成績(jī);⑦存在問(wèn)題等):成績(jī):指導(dǎo)教師簽字:年月日4目錄面向?qū)ο笤O(shè)計(jì)題4------4:計(jì)算器(test8.cpp)1.1需求分析……………………….…61.2概要設(shè)計(jì)………………………...61.3詳細(xì)設(shè)計(jì)與編碼………………..61.4調(diào)試分析………………………...101.5用戶使用說(shuō)明………………….111.6設(shè)計(jì)心得………………………...11二、面向過(guò)程設(shè)計(jì)題10------8:八皇后問(wèn)題(test10.cpp)2.1需求分析…………122.2概要設(shè)計(jì)………………………...122.3詳細(xì)設(shè)計(jì)與編碼………………...122.4調(diào)試分析………………………...142.5用戶使用說(shuō)明………………….152.6設(shè)計(jì)心得………………………...155面向過(guò)程設(shè)計(jì)題8------8:加減乘除一、需求分析隨著社會(huì)的發(fā)展,科學(xué)的進(jìn)步,人們面臨著越來(lái)越多的數(shù)據(jù),而處理這些數(shù)據(jù)時(shí),最基本的操作便是對(duì)這些數(shù)據(jù)進(jìn)行計(jì)算。但是在巨大的計(jì)算量面前,人往往顯得有些力不從心,于是人們對(duì)計(jì)算器需求也愈加強(qiáng)烈。本程序便應(yīng)此要求編寫了一個(gè)簡(jiǎn)易的計(jì)算器程序二、概要設(shè)計(jì)本程序的一個(gè)主要設(shè)計(jì)思路便是根據(jù)用戶輸入的表達(dá)式,然后求解輸出。本程序所選擇的數(shù)據(jù)結(jié)構(gòu)主要為棧,一個(gè)操作數(shù)棧,一個(gè)運(yùn)算符棧,之后便根據(jù)相應(yīng)的算術(shù)優(yōu)先級(jí)對(duì)兩個(gè)棧進(jìn)行相應(yīng)的操作。同時(shí)本程序還可以對(duì)表達(dá)式的正誤進(jìn)行判斷,如果出錯(cuò)就提醒用戶。三、詳細(xì)設(shè)計(jì)與編碼/*4.設(shè)計(jì)一個(gè)簡(jiǎn)單的計(jì)算器類(類型),要求:(1)從鍵盤讀入算式。(2)可以進(jìn)行加、減、乘、除運(yùn)算。(3)運(yùn)算要有優(yōu)先級(jí)。(4)用戶可以按任何的運(yùn)算符出現(xiàn)順序進(jìn)行輸入。(5)不限定用戶輸入的計(jì)算式的長(zhǎng)度。(6)可以帶有括號(hào)()。(7)有排錯(cuò)功能,當(dāng)用戶輸入錯(cuò)誤的算式時(shí)提示用戶。*/#include<iostream>#include<string>usingnamespacestd;constmaxsize=20;enumError_code//設(shè)立一個(gè)枚舉類型用以返回錯(cuò)誤類型{success,overflow,underflow6};template<classT>//用類模板設(shè)立一個(gè)棧類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>//實(shí)現(xiàn)棧的清空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)如果棧中有兩個(gè)操作數(shù)則進(jìn)行相應(yīng)的運(yùn)算{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請(qǐng)輸入要進(jìn)行運(yùn)算的表達(dá)式:"<<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'*'://根據(jù)優(yōu)先級(jí)先算乘除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;}//右括號(hào)的先算括號(hào)中的12出}}if(num.size()==1&&sign.size()==0)num.top(outcome);elseset=1;if(set==0)cout<<"運(yùn)算結(jié)果是:\n"<<endl;//對(duì)計(jì)算結(jié)果進(jìn)行輸else{}returnoutcome;outcome=-1;if(set==1)cout<<"\n你輸入的不匹配,有錯(cuò)誤發(fā)生。"<<endl;if(set==2)cout<<"\n你輸入了非法字符,請(qǐng)重新輸入!"<<endl;if(set==3)cout<<"\nStackisfull,Lostresult!!"<<endl;if(set==4)cout<<"\n分母為0,不能進(jìn)行除法運(yùn)算。"<<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還要計(jì)算其它的嗎?"<<flush;}while(user_says_qingchu());return0;四、調(diào)試分析A、調(diào)試過(guò)程中遇到以下問(wèn)題:1、隨機(jī)數(shù)的產(chǎn)生不“隨機(jī)”,經(jīng)過(guò)查閱MSDN后知道缺少了一個(gè)初始化函數(shù),這樣每次得到的隨機(jī)數(shù)就不唯一了2、怎樣才能將程序的終止與否這一控制權(quán)轉(zhuǎn)交給用戶,最后為了實(shí)現(xiàn)這一功能又在程序的最外層加了一層循環(huán),每當(dāng)一道題目做完以后有用戶給出一個(gè)是否繼續(xù)的命令。3、本程序開始在判斷除法運(yùn)算是否正確的時(shí)候出現(xiàn)了一個(gè)Bug,原因在于計(jì)算機(jī)對(duì)除法的運(yùn)算精度很高,因而無(wú)論用戶輸入什么計(jì)算機(jī)判斷都唯錯(cuò),為解決此問(wèn)題在進(jìn)行除法判斷的時(shí)候進(jìn)行了一些改變,如果答案的偏差控制在了一定的范圍內(nèi),那就是正確的。B、以下為程序運(yùn)行過(guò)程中的部分輸出14五、用戶使用說(shuō)明用戶在使用時(shí)僅需根據(jù)程序的提示去做即可,具體如下;1、Doyouwanttocontinue,pressYORN輸入Y:繼續(xù)做題;輸入N:退出程序。2、Entertheoperationyouwant:+、-、*、/輸入“+”:題目為加法運(yùn)算;輸入“-”:題目為鍵法運(yùn)算;輸入“*”:題目為乘法運(yùn)算;輸入“/”:題目為除法運(yùn)算。3、Entertherange:A:1~10B:1~100:輸入“A”:所生成題目為一位數(shù)運(yùn)算;輸入“B”;所生成題目為兩位數(shù)運(yùn)算。六、設(shè)計(jì)心得紙上得來(lái)終覺淺,絕知此事要躬行。作為一名計(jì)算機(jī)專業(yè)的本科生,如果僅僅只是停留在理論階段,而不親自動(dòng)手去上機(jī)實(shí)踐,那么也是徒勞而無(wú)所獲。通過(guò)本次程序設(shè)計(jì),我初步體會(huì)到了人機(jī)交互的樂(lè)趣。盡管在編程過(guò)程中,我遇到了這樣或那樣的問(wèn)15題,但最終經(jīng)過(guò)自己的反復(fù)思考以及小組成員間的討論,都一一予以解決了。同時(shí)我也深深懂得了與人合作交流的樂(lè)趣,在今后的實(shí)踐當(dāng)中我將會(huì)更加積極的與他人交流合作,虛心向他人學(xué)習(xí),一次來(lái)提升自己,共同進(jìn)步。面向過(guò)程設(shè)計(jì)題10------10八皇后問(wèn)題一、需求分析八皇后問(wèn)題,是一個(gè)古老而著名的問(wèn)題,該問(wèn)題是十九世紀(jì)著名的數(shù)學(xué)家高斯1850年提出:在8X8格的國(guó)際象棋上擺放八個(gè)皇后,使其不能互相攻擊,即任意兩個(gè)皇后都不能處于同一行、同一列或同一斜線上,問(wèn)有多少種擺法。高斯認(rèn)為有76種方案。1854年在柏林的象棋雜志上不同的作者發(fā)表了40種不同的解,后來(lái)有人用圖論的方法解出92種結(jié)果。當(dāng)然如果僅僅是用人力去解決這樣一個(gè)問(wèn)題,那么求解的過(guò)程毫無(wú)疑問(wèn)是復(fù)雜而繁瑣的,于是編寫一個(gè)解決此問(wèn)題的程序變是順理成章的事情了。二、概要設(shè)計(jì)本程序?qū)λ蟮墓δ苓M(jìn)行了相應(yīng)的擴(kuò)展:它不僅可以解決皇后數(shù)目為八個(gè)的時(shí)候的一種擺放方法,而且還可以求出皇后數(shù)目為N(N為一整數(shù))時(shí)皇后的擺放方法。首先先由用戶輸入一個(gè)數(shù)字N(皇后數(shù)目),然后程序根據(jù)相應(yīng)的輸入對(duì)棋盤(一個(gè)二維數(shù)組)進(jìn)行相應(yīng)的初始化工作,接著程序調(diào)用遞歸函數(shù),以深度優(yōu)先收索算法對(duì)問(wèn)題進(jìn)行求解,最后將所求皇后的擺放位置輸出。三、詳細(xì)設(shè)計(jì)與編碼#include<stdio.h>intconstmax=10;intn;intcount=0;//已經(jīng)擺放好的皇后數(shù)目charmap[max][max];//棋盤voiddfs(intj);16intmain(){inti,j;printf("輸入皇后的數(shù)目:\n");scanf("%d",&n);//讀入皇后數(shù)目for(i=0;i<=n;i++)dfs(1);//調(diào)用遞歸函數(shù)求解printf("------皇后在棋盤中的擺放------\n");//將結(jié)果輸出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;//如果所有皇后都已經(jīng)擺好則返回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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論