數據與計算課程設計
A. 求數據結構課程設計 算數表達式報告及C語言源代碼
ok 目標已完成
B. 數據結構課程設計:電費核算系統
數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關系的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。
一、數據的邏輯結構:指反映數據元素之間的邏輯關系的數據結構,其中的邏輯關系是指數據元素之間的前後件關系,而與他們在計算機中的存儲位置無關。邏輯結構包括:
1.集合結構
數據結構中的元素之間除了"同屬一個集合" 的相互關系外,別無其他關系;
2.線性結構
數據結構中的元素存在一對一的相互關系;
3.樹形結構
數據結構中的元素存在一對多的相互關系;
4.圖形結構
數據結構中的元素存在多對多的相互關系。
二、數據的物理結構:指數據的邏輯結構在計算機存儲空間的存放形式。
數據的物理結構是數據結構在計算機存儲器中的具體實現,是邏輯結構的表示(又稱存儲映像),它包括數據元素的機內表示和關系的機內表示。由於具體實現的方法有順序、鏈接、索引、散列等多種,所以,一種數據結構可表示成一種或多種存儲結構。
數據元素的機內表示(映像方法): 用二進制位(bit)的位串表示數據元素。通常稱這種位串為節點(node)。當數據元素有若干個數據項組成時,位串中與個數據項對應的子位串稱為數據域(data field)。因此,節點是數據元素的機內表示(或機內映像)。
關系的機內表示(映像方法):數據元素之間的關系的機內表示可以分為順序映像和非順序映像,常用兩種存儲結構:順序存儲結構和鏈式存儲結構。順序映像藉助元素在存儲器中的相對位置來表示數據元素之間的邏輯關系。非順序映像藉助指示元素存儲位置的指針(pointer)來表示數據元素之間的邏輯關系。
C. 求一篇關於數據分析的課程設計論文
希望能夠幫到你:畢業設計不同於畢業論文,它的組成部分不只是一篇學術論文,我們拿「機械畢業設計」舉例:隨著科技發展的進步,各大高校對機械畢業設計的內容提出了一定的要求,2004年以前設計內容一般包括:畢業設計圖紙+說明書(畢業論文),2005年以後國家教育部門提出新的要求,結合工廠需求加入了三維設計,模擬模擬,及程序分析研究。其中包括:畢業設計圖紙(三維「UG ,PRO/E,CAM,CAXA,SWOLIDWORD」+CAD二維工程圖)+開題報告+任務書+實習報告+說明書正文。這足夠的說明了做一份優質的畢業設計是要付出相當的努力!
高等學校技術科學專業及其他需培養設計能力的專業或學科應屆畢業生的總結性獨立作業。要求學生針對某一課題,綜合運用本專業有關課程的理論和技術,作出解決實際問題的設計。畢業設計是高等學校教學過程的重要環節之一。相當於一般高等學校的畢業論文。目的是總結檢查學生在校期間的學習成果,是評定畢業成績的重要依據;同時,通過畢業設計,也使學生對某一課題作專門深入系統的研究,鞏固、擴大、加深已有知識,培養綜合運用已有知識獨立解決問題的能力。畢業設計也是學生走上國家建設崗位前的一次重要的實習。
一些國家根據學生的畢業設計,授予一定的學銜。如建築師、農藝師、攝影師等。中國把畢業設計和畢業考試結合起來,作為授予學士學位的依據。
目的要求
目的
畢業設計公開答辯會
畢業設計公開答辯會
(1)培養學生綜合運用所學知識,結合實際獨立完成課題的工作能力。
(2)對學生的知識面,掌握知識的深度,運用理論結合實際去處理問題的能力,實驗能力,外語水平,計算機運用水平,書面及口頭表達能力進行考核。
要求
(1)要求一定要有結合實際的某項具體項目的設計或對某具體課題進行有獨立見解的論證,並要求技術含量較高;
(2)設計或論文應該在教學計劃所規定的時限內完成;
(3)書面材料:框架及字數應符合規定。
基本步驟
編輯
確定課題
選題是畢業設計的關健。一個良好的課題,能強化理論知識及實踐技能,使學生充分發揮其創造力,圓滿地完成畢業設計。
畢業設計的課題可從以下幾個方面綜合考慮:
(1)有利於綜合學生所學知識。
(2)能結合學科特點。
(3)盡可能聯系實際。
(4)有一定的應用價值。
根據以上要求,可以考慮從下面一些角度挖掘課題:
(1)學科教學的延伸。例如:結合電氣控制線路,要求學生設計機械動力頭控制電路並安裝調試。結合數字電
路進行邏輯電路的設計與裝接。
(2)多學科的綜合。結合某專業學科確定一個綜合課題,假如課題較大,可分解為幾個子課題,交由不同的小組完成,最後再整合成一個完整的課題。例如,機電專業可設計以下課題:大型城市的交通信號燈指示。這個課題就可分為以下兩個子課題:PLC控制的信號燈顯示、信號長短計時的時鍾電路。
(3)結合生產實際。學校可以和一些單位聯合,共同開發一批有實用價值、適合學生設計的課題,甚至可以以某些單位的某項生產任務作為設計課題。學校應注重課題資料的積累,盡量選取最適合教學內容又貼近生產實際的課題,完成資料庫的建設,為今後課題的不斷完善創造良好的基礎。
項目分析
畢業設計需對一個即將進行開發的項目的一部份進行系統分析(需求分析,平台選型,分塊,設計部分模塊的細化)。這類論文的重點是收集整理應用項目的背景分析,需求分析,平台選型,總體設計(分塊),設計部分模塊的細化,使用的開發工具的內容。論文結構一般安排如下: 1)引言(重點描述應用項目背景,項目開發特色,工作難度等) ;2)項目分析設計(重點描述項目的整體框架,功能說明,開發工具簡介等);3)項目實現(重點描述資料庫設計結果,代碼開發原理和過程,實現中遇到和解決的主要問題,項目今後的維護和改進等,此部分可安排兩到三節);4)結束語。
指導設計
指導教師布置給學生任務後,要指導學生分析課題,確定設計思路,充分利用技術資料,注重設計方法和合理使用工具書。學生設計時應注重理論與實際的差距,充分考慮設計的可行性。指導教師要注重學生完成任務的質量和速度,及時指出其存在的不足,啟發其獨立思考。在設計過程中,應指導學生養成良好的安全意識和嚴謹的工作作風。設計完成後應撰寫畢業設計論文,對自己的設計過程作全面的總結。
組織答辨
答辨是檢查學生畢業設計質量的一場「口試」。通過這一形式,有助於學生進一步總結設計過程,檢驗
畢業設計論文及圖紙
畢業設計論文及圖紙
其應變能力及自信心,為真正走上社會打下堅實的基礎。答辯主要考查學生的一些專業基礎知識和基本理論。答辯的過程實際上也是幫助學生總結的過程。教師要積極引導學生總結在設計過程中積累起來的經驗,分析設計效果,找出不足以及改進方法,幫助學生把實踐轉化成自己的知識和技能。通過答辯,也有助於學生提高應變能力及自信心,為真正走上社會打下堅實的基礎。評定成績
評定成績的根據主要有兩個方面:一是畢業設計的質量;二是答辯的表現,而答辯的表現不低於畢業設計的質量。
優秀:按期圓滿完成任務書中規定的項目;能熟練地綜合運用所學理論和專業知識;有結合實際的某項具體項目的設計或對某具體課題進行有獨立見解的論證,並有較高技術含量。立論正確
,計算、分析、實驗正確、嚴謹,結論合理,獨立工作能力較強,科學作風嚴謹;畢業設計(論文)有一些獨到之處,水平較高。
良好:按期圓滿完成任務書中規定的項目;能較好地運用所學理論和專業知識;有一定的結合實際的某項具體項目的設計或對某具體課題進行有獨立見解的論證,並有一定的技術含量。立論正確
水平。
及格:在指導教師的具體幫助下,能按期完成任務,獨立工作能力較差且有一些小的疏
,計算、分析、實驗正確,結論合理;有一定的獨立工作能為,科學作風好;設計〈論文〉有一定的
忽和遺漏;能結合實際的某項具體項目的設計或對某具體課題進行有獨立見解的論證,但技術含量不高。
在運用理論和專業知識中,沒有大的原則性錯誤;論點、論據基本成立,計算、分析、實驗基本正確。畢業設計(論文)基本符合要求。
不及格:任務書規定的項目未按期完成;或基本概念和基本技能未掌握。沒有本人結合實際的具體設計內容或獨立見解的論證,只是一些文件、資料內容的摘抄。畢業設計(論文)未達到最低要求。
設計環節
編輯
實踐環節
1、計算機專業實踐環節形式:畢業設計
2、畢業論文實踐環節應注意的事項:
(1)、「畢業論文」實踐環節在全部畢業學分中佔有一定學分;
(2)、「畢業論文」實踐環節從起步到畢業答辯結束歷時至少4周以上;
(3)、「畢業論文」實踐環節包括兩部分內容:①完成「畢業論文」所開發的應用程序;②針對所開發的應用程序書寫「畢業論文」說明書(即論文);
3、畢業論文實踐環節應先完成的工作在畢業論文實踐環節之前,應向有關主管設計工作的單位或老師上報如下材料:
(1)《畢業論文實踐環節安排意見》(包括領導小組名單,畢業班專業、級別、性質、工作計劃安排、實踐環節工作步驟,指導教師名單,學生分組名單);
(2)《畢業論文(論文)審批表》一式兩份(要求認真審核、填寫指導教師資格,包括職稱、從事專業、有何論著,每人指導學生不得超過一定人數,兼職(或業余)指導教師指導學生數根據情況酌減)。
4、關於「畢業論文」工作的過程步驟:
(1)、「畢業論文」題目的選擇選題時應遵循以下原則:
①選題必須符合計算機專業的綜合培養要求;
②應盡可能選擇工程性較強的課題,以保證有足夠的工程訓練;
③畢業論文工作要有一定的編程量要求,以保證有明確的工作成果;
④選題原則上一人一題,結合較大型任務的課題,每個學生必須有畢業論文的獨立子課題;
⑤選題應盡量結合本地、本單位的教學、科研、技術開發項目,在實際環境中進行。
總之選題要體現綜合性原則、實用性原則、先進性原則、量力性原則等選題時要達到以下目標:
①選題與要求提高綜合運用專業知識分析和解決問題的能力;
②掌握文獻檢索、資料查詢的基該方法和獲取新知識的能力;
③掌握軟硬體或應用系統的設計開發能力;
④提高書面和口頭表達能力;
⑤提高協作配合工作的能力。
(2)、「畢業論文」題目審核有關單位將畢業學生選擇的題目填寫在同一個「畢業論文(論文)審批表」中的「畢業論文安排表」相應欄目中,審核通過後方可開展下一步工作。
應用程序開發實施
(3)、「畢業論文」應用程序開發實施(大致用時安排)
①需求分析階段(約一周時間完成)
②系統分析階段(約一周時間完成),同時完成畢業論文說明書前兩章資料整理工作。
③系統設計階段(約一周時間完成)
④代碼實現階段(約三周時間完成)同時完成畢業論文說明書第三章、第四章資料整理工作。
⑤系統調試階段(約二周時間完成),同時完成畢業論文說明書第五章資料整理工作。
⑥投入運行階段(約一周時間完成),同時完成畢業論文說明書中第六章資料整理工作。
⑦畢業論文說明書的整理定稿階段(約二周時間完成)
設計大綱
編輯
一、實習(調研)的目的
實習(調研)是培養學生工程意識和實踐能力、實現專業培養目標的重要實踐性教學環節,通過實習(調研),使學生受到以下幾方面的訓練。
1.理論聯系實際,將書本知識融會貫通,形成個人在某一領域或某一方面的知識體系,並了解這些知識體系在工程中的應用。加強在工程實踐中發現問題、解決問題的能力,以及創新能力的培養和訓練。
2.實現專業培養目標,熟悉相關技術領域的工程設施與相關的設備,了解工程項目的設計思路與過程。
3.本學院的畢業實習和畢業設計實行捆綁制。通過實習(調研)為畢業設計做准備,在資料收集、方案確定、資料查詢等環節獲得必要的訓練。也可根據實習單位的具體情況,初選畢業設計題目。
4.受到適應現場、社會活動與人際交往能力方面的訓練,提高綜合素質。
二、實習(調研)內容與要求
1.了解畢業設計課題研究的對象及生產、科研的實際,加強理論與實際的聯系,培養深入實際調查研究的作風,提高工程技術素質。
2.獨立深入到與畢業設計課題有關的單位、部門了解課題的來源及提出的依據,了解與畢業設計課題有關的生產設備、生產過程、檢測手段、生產特點的實際知識。收集有關的數據、圖表、文獻、資料,並進行分析、歸納、整理及研究,對課題設計方案起到指導作用。
3.調研要有記錄。學生在實習結束後,均需按規定的格式提交書面的畢業實習報告,實習報告要求格式統一(封面、內容格式均需統一),字數在5000字以上。
三、實習時間及分配
見「電氣工程與自動化學院關於06屆畢業實習與設計工作安排」(2005年1月9日文件)。
四、考核內容和方式
實習考核內容包括下列各項:
1.對於導師安排進行調研的學生,考核其調研記錄。對於在現場實習的學生,考核其實習日記與實習單位的鑒定與證明。
2.書面實習報告。
結合上述各項情況,由指導老師按五級記分制(優、良、中、及格、不及格)給出恰當的成績。
(五)實習(調研)注意事項
1.應遵守實習(調研)單位的規定及指導,遵守實習單位的勞動紀律。
2.實習(調研)過程中,要文明禮貌,勤學好問,謙虛謹慎。
3.旅途過程中,要注意安全,要有自我保護意識。
D. 求 機械設計基礎 課程設計的數據計算 數據已給
╮(╯▽╰)╭,N多年來前做過,畢源業時候都扔掉了。
記得書上有例子,照著計算就行了,自己動手做一遍還是個很不錯的經歷。
過了6,7年了,做的參數,過程什麼的都不記得了,就懷念當時的氣氛,緊張和投入。回想起來還是個很不錯的經歷。如果你交給別人做了,你浪費掉的時間若干年後什麼也回想不起來。
我建議你還是自己做吧
E. 數據結構與演算法課程設計求助
看上去有點象游戲引擎。
我最近也在研究這個。
不過,這是編譯原理的范疇。
具體實現起來很復雜的,不過,可以給你一些大致的思路:
1、文本編輯器或者源代碼讀取程序(可以是用戶輸入或者從文件讀入)
2、詞法分析。(其實詞法分析就是將各個元素比如變數、關鍵字、運算符等分離出來)
3、語法分析,語義分析。(其作用是生成語法樹)
4、解釋器,運行時環境。(維護程序運行時的環境,比如局部變數的建立、撤銷;函數調用時環境的保存;堆、棧維護等。另外,還要提供固有命令(函數)的實現,就是說,用戶調用了固有的命令時,將會發生什麼。)
總的來說,很復雜的。這是一個很大的項目。別說200分,就是2000元,也很難找到。
推薦你看看編譯原理(不過國內的編譯原理的書籍,都只講皮毛,要看就看英文的)另外,有一本《高級游戲腳本程序設計》不錯。
再就是,你可以使用現成的語法分析生成器,比如:Lex+Yacc,不過需要修改生成的代碼,才能在VC中使用。
F. 求一個《數據結構與演算法分析》課程設計 交通咨詢系統設計 問題描述見下 如果有幫助 還會加懸賞的
這其實很簡單,強烈建議去看《Discrete Mathematics and Its Applications》(fifth edition),看圖論那章,應該不是什麼問題的。
G. 數據結構與演算法課程設計——集合運算
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
struct set{
int coef;
struct set *next;
};
void createlist_p(struct set *&p,int n)
{
int i;
struct set *L;
p=(struct set *)malloc(sizeof(set));
p->next=NULL;
for(i=n;i>0;i--)
{
L=(struct set *)malloc(sizeof(set));
printf("請輸入該集合中第%d個整數元素:",n-i+1);
scanf("%d",&L->coef);
L->next=p->next;
p->next=L;
}
}//生成新鏈表用於存放兩集合中的元素
void printlist_p(struct set *&p)
{
struct set *L;
int i;
L=p->next;
if(!L) printf("該表為空!\n");
while(L!=NULL)
{
printf("%d ",L->coef);
L=L->next;
i++;
}
printf("\n");
}//列印輸入的兩集合中的元素
void Addset(struct set *&p,struct set *&q,struct set *&r)
{
struct set *k,*m,*n;
r=(struct set *)malloc(sizeof(set));
r->next=NULL;
k=p->next;
for(;k;)
{
m=(struct set *)malloc(sizeof(set));
m->next=r->next;
r->next=m;
m->coef=k->coef;
k=k->next;
}//把第一個集合中的元素放在新集合中
k=q->next;
m=(struct set *)malloc(sizeof(set));
m->next=r->next;
r->next=m;
m->coef=k->coef;
k=k->next;
for(;k;)
{
for(n=r->next;(k->coef!=n->coef)&&n->next;){
n=n->next;
}//與新集合中的元素比較
if((k->coef!=n->coef)&&!(n->next)){
m=(struct set *)malloc(sizeof(set));
m->next=r->next;
r->next=m;
m->coef=k->coef;
}
k=k->next;
}//對第二個集合中的元素進行分析
}//求A∪B
void Subset(struct set *&p,struct set *&q,struct set *&r){
struct set *k,*m,*n;
r=(struct set *)malloc(sizeof(set));
r->next=NULL;
n=q->next;
for(;n;){
m=p->next;
for(;(m->coef!=n->coef)&&m->next;){
m=m->next;
}
if(m->coef==n->coef) {
k=(struct set *)malloc(sizeof(set));
k->next=r->next;
r->next=k;
k->coef=m->coef;
}
n=n->next;
}
}//求A∩B
void Intset(struct set *&p,struct set *&q,struct set *&r){
struct set *k,*m,*n;
r=(struct set *)malloc(sizeof(set));
r->next=NULL;
m=p->next;
for(;m;){
n=q->next;
for(;(m->coef!=n->coef)&&n->next;){
n=n->next;
}
if(!n->next&&(m->coef!=n->coef)) {
k=(struct set *)malloc(sizeof(set));
k->next=r->next;
r->next=k;
k->coef=m->coef;
}
m=m->next;
}
}//求A-B
void bangzhu(){
printf("\n\t\t\t***********************************");
printf("\n\t\t\t* 求集合的交並差 *");
printf("\n\t\t\t*********************************\n");
}
void main()
{
struct set *p,*q,*r;
int m,n,node;
bangzhu();
for(;;)
{
do{
printf("請輸入您要選擇操作的代碼:\n");
printf("1:求兩集合的並A∪B\n");
printf("2:求兩集合的交A∩B\n");
printf("3:求兩集合的差A-B\n");
printf("0:退出該程序\n");
scanf("%d",&node);
} while(node<0||node>3);
if(node==0) exit(1);
printf("\t\t\t/*請輸入集合A中元素的個數:*/\n");
scanf("%d",&m);
createlist_p(p,m);
printf("\t\t\t/*請輸入集合B中元素的個數:*/\n");
scanf("%d",&n);
createlist_p(q,n);
printf("集合A中元素為:");
printlist_p(p);
printf("集合B中元素為:");
printlist_p(q);
while(node<0||node>3);
switch(node)
{
case 1: Addset( p,q,r);printf("A∪B:\n");printlist_p(r);break;
case 2: Subset( p,q,r);printf("A∩B:\n");printlist_p(r);break;
case 3: Intset(p,q,r); printf("A-B:\n");printlist_p(r);break;
}
printf("\n");
}
}
可以了
樓上方法是正確的,學習!把分給樓上
H. 演算法與數據結構課程設計——迷你計算器,這個演算法與程序怎麼做
#include <stdio.h>#include <malloc.h> #include <math.h> #include <string.h> #include <ctype.h> #define M 40 /*定義堆棧*/ typedef struct{ double data[M]; int top; }Stack; /*初始化堆棧*/ InitStack(Stack *s) { s->top=0; } /*判斷棧是否為空*/ int StEmpty(Stack *s) { if(s->top==0) { return 1; } else { return 0; } } /*入棧操作*/ StPush(Stack *s,double x) { if(s->top==M) { printf("The stack is overflow!"); } else { s->top=s->top+1; s->data[s->top]=x; } } /*出棧操作*/ double StPop(Stack *s) { double t; if(!StEmpty(s)) { t=s->data[s->top]; s->top=s->top-1; } else { printf("StPop:The stack is empty!"); t=NULL; } return t; } /*獲取棧頂元素*/ double StGetTop(Stack *s) { double t; if(!StEmpty(s)) { t=s->data[s->top]; } else { printf("StGeTop:The stack is empty!"); t=NULL; } return t; } /*將數字字元轉換成整形*/ int ChrTransferint(char c) { int n; switch(c) { case '0': n=0;break; case '1': n=1;break; case '2': n=2;break; case '3': n=3;break; case '4': n=4;break; case '5': n=5;break; case '6': n=6;break; case '7': n=7;break; case '8': n=8;break; case '9': n=9;break; } return n; } /*獲取兩個操作符之間數字字元的個數,返回的是最後一個數字字元的位置*/ int GetNumsize(char str[],int n1) { int n2=n1; while(isdigit(str[n2])||(str[n2])==46)/*isdigit()判斷是否數字字元*/ { n2=n2+1; } return n2; } /*判斷上個函數中獲得的數字字元串中是否包含小數點,並返回它的位置,不包含,返回-1*/ int IsIncludepoint(char str[],int n1,int n2) { int n3=-1; int i; for(i=n1;i<=n2;i++) { if(str[i]=='.') { n3=i; break; } } return n3; } /*將數字字元轉換成數值*/ double Transfer(char str[],int n1,int n2,int n3) { double data=0; int i,ct; if(n3<0) { for(i=n2;i>=n1;i--) { ct=ChrTransferint(str[i]); data=data+ct*pow(10,n2-i);/*pow(x,y)計算x的y次方的值*/ } } else { for(i=n3-1;i>=n1;i--) { ct=ChrTransferint(str[i]); data=data+ct*pow(10,n3-1-i);/*pow(x,y)計算x的y次方的值*/ } for(i=n3+1;i<=n2;i++) { ct=ChrTransferint(str[i]); data=data+ct*pow(0.1,i-n3);/*pow(x,y)計算x的y次方的值*/ } } return data; } /*主程序*/ main() { char str[M],c; char a; int n,p1,p2,p3; /*n為字元串長度,p1,p2,p3分別為數字字元起始位置,結束位置,和小數點位置*/ double data; /*存放轉換後的數值*/ int i=0; Stack *so=(Stack *)malloc(sizeof(Stack)); /*存儲操作符 '(':1,'+':2,'-':3, '*':4,'/':5 字元'),='不壓棧*/ Stack *sd=(Stack *)malloc(sizeof(Stack)); /*存儲操作數*/ InitStack(so); InitStack(sd); printf("Please input formula(format:(1+2)*1.2/4=):\n"); n=0; while((a=getchar())!='\n') { str[n]=a; n++; } while(i<n) { char c; c=str[i]; if(c=='(') { /*c若是'('直接入棧so,i++*/ StPush(so,1); i++; } else if(isdigit(c)) { p1=i; /*c若是數字字元,一並將後面的連續數字字元轉換為數值並壓棧到sd,並把i設為後面的*/ p2=GetNumsize(str,p1); p3=IsIncludepoint(str,p1,p2-1); /*第一個非數字字元的位置*/ data=Transfer(str,p1,p2-1,p3); StPush(sd,data); i=p2; } else if(c=='+') { StPush(so,2); /*c若是'+'直接入棧so,i++*/ i++; } else if(c=='-') { StPush(so,3); /*c若是'-'直接入棧so,i++*/ i++; } else if(c=='*') { if(str[i+1]=='(') /*c若是『*』它後面的字元是否為'(',若是直接將'*'壓棧so,*/ { StPush(so,4); i++; } else { double t1,t2,t3; /*若不是,為數字字元,將後面的連續數字字元一並轉換成數值t2,sd出棧給t1,將t3=t2*t1壓棧到sd*/ t1=StPop(sd); /*操作符'*'不壓棧so*/ p1=i+1; p2=GetNumsize(str,p1); p3=IsIncludepoint(str,p1,p2-1); t2=Transfer(str,p1,p2-1,p3); t3=t1*t2; StPush(sd,t3); i=p2; } } else if(c=='/') { if(str[i+1]=='(') { StPush(so,5); i++; } else { double t1,t2,t3; t1=StPop(sd); /*c是'/'同'*'*/ p1=i+1; p2=GetNumsize(str,p1); p3=IsIncludepoint(str,p1,p2-1); t2=Transfer(str,p1,p2-1,p3); t3=t1/t2; StPush(sd,t3); i=p2; } } else if(c==')') { double t1,t2,t3; int p; while((p=StPop(so))!=1&&!StEmpty(so)) /*c若是')',出棧so,判斷是'+'或'-',出棧sd兩個操作數,進行加減運算*/ { /*直到StPop=='('*/ t1=StPop(sd); t2=StPop(sd); if(p==2) { t3=t2+t1; StPush(sd,t3); } else if(p==3) { t3=t2-t1; StPush(sd,t3); } } if(StGetTop(so)==4) /*然後判斷so棧頂是否為'*'或者'/'*/ { StPop(so); t1=StPop(sd); /*為'*'出棧so,出棧 sd 獲得2個操作數,進行乘法操作*/ t2=StPop(sd); t3=t2*t1; StPush(sd,t3); } else if(StGetTop(so)==5) { StPop(so); t1=StPop(sd); /*為'/'出棧so,出棧 sd 獲得2個操作數,進行除法操作*/ t2=StPop(sd); t3=t2/t1; StPush(sd,t3); } i++; } else if(c=='=') { double t1,t2,t3; /*c若是'=',這是so內只有加減號,出棧so到p ,sd到t1,t2*/ int p; while(!StEmpty(so)) { t1=StPop(sd); t2=StPop(sd); p=StPop(so); if(p==2) { t3=t2+t1; /*p=='+',加法運算,並將結果t3壓棧sd*/ StPush(sd,t3); } else if(p==3) { t3=t2-t1; StPush(sd,t3); /*p=='-',減法運算,並將結果t3壓棧sd*/ } } i++; } } if(!StEmpty(so)||StEmpty(sd)) { printf("Input error,Back!\n"); /*若so不為空,或者sd為空,且sd中只有一個元素,則輸入的式子不對*/ } else { double end; int i; /*否則,sd中的那個數據就是最後計算結果,列印輸出*/ end=StGetTop(sd); printf("The value of this formula:\n"); for(i=0;i<n;i++) { printf("%c",str[i]); } printf("%f\n",end); } getch();}
I. 數據結構與演算法課程設計里 題目為棧的實現和應用,急!!!!!!!!
http://wenku..com/view/71324821dd36a32d7375818b.html
看看吧 給你找到了