﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-外包工</title><link>http://www.blogjava.net/temptation/</link><description>学 JAVA 
学 OO</description><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 05:59:45 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 05:59:45 GMT</pubDate><ttl>60</ttl><item><title>程式設計(19)--作业6：堆疊操作模擬程式</title><link>http://www.blogjava.net/temptation/archive/2010/10/23/335956.html</link><dc:creator>外包工</dc:creator><author>外包工</author><pubDate>Sat, 23 Oct 2010 01:53:00 GMT</pubDate><guid>http://www.blogjava.net/temptation/archive/2010/10/23/335956.html</guid><wfw:comment>http://www.blogjava.net/temptation/comments/335956.html</wfw:comment><comments>http://www.blogjava.net/temptation/archive/2010/10/23/335956.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/temptation/comments/commentRss/335956.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/temptation/services/trackbacks/335956.html</trackback:ping><description><![CDATA[問題敘述 <br />
&nbsp;&nbsp;&nbsp; <br />
請你設計一個堆疊操作模擬程式，可提供插入(push)、取出(pop)、查詢(retrieve)、<br />
<br />
檢查堆疊是否為滿(isfull)、檢查堆疊是否為空(isempty)等操作。<br />
<br />
你的程式應該利用陣列來實作堆疊，並將各項功能寫成函數。<br />
<br />
--------<br />
條件限制<br />
<br />
1.堆疊最多能儲存10筆資料。<br />
2.當堆疊的內容改變時，請將堆疊的內容顯示出來。<br />
3.當插入或取出、查詢資料時，須考慮堆疊為滿(isfull)或空(isempty)的情形。<br />
4.請提供選單說明供使用者操作<br />
eg.<br />
&nbsp; ****** 選單 ********<br />
&nbsp; 1. 插入資料<br />
&nbsp; 2. 取出資料<br />
&nbsp; 3. 查詢資料<br />
&nbsp; 4. 顯示堆疊內所有資料<br />
&nbsp; 5. 檢查堆疊是否為滿<br />
&nbsp; 6. 檢查堆疊是否為空<br />
&nbsp; 7. 離開<br />
&nbsp; ********************<br />
&nbsp; 輸入選項=&gt;<br />
<br />
--------------<br />
輸入格式<br />
<br />
無檔案輸入,由鍵盤輸入資料。<br />
<br />
--------------<br />
輸出格式<br />
<br />
無檔案輸出,由營幕輸出資料。<br />
<br />
---------------<br />
輸入範例<br />
<br />
略<br />
----------<br />
輸出範例<br />
<br />
略<br />
<br />
<br />
void push(int stack [],int &amp;top,int value){<br />
&nbsp;&nbsp;&nbsp; stack[top]=value;<br />
&nbsp;&nbsp;&nbsp; top++;<br />
}<br />
<br />
int pop(int stack[],int &amp;top){<br />
//put your code here...<br />
}<br />
<br />
int retrieve(int stack[],int top){<br />
&nbsp;&nbsp;&nbsp; return stack[top-1];<br />
}<br />
<br />
int isfull(int stack[],int size,int top){<br />
//put your code here....<br />
} <br />
<br />
int isempty(int stack[],int top){<br />
&nbsp;&nbsp;&nbsp; if(top==0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1;<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br />
} <br />
<br />
<br />
int main(){<br />
const int SIZE 10;<br />
int stack[SIZE],top=0;<br />
/*<br />
<br />
put your code here....<br />
<br />
*/<br />
}<br />
<img src ="http://www.blogjava.net/temptation/aggbug/335956.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/temptation/" target="_blank">外包工</a> 2010-10-23 09:53 <a href="http://www.blogjava.net/temptation/archive/2010/10/23/335956.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程式設計(18)--作业5：通訊錄 </title><link>http://www.blogjava.net/temptation/archive/2010/10/23/335955.html</link><dc:creator>外包工</dc:creator><author>外包工</author><pubDate>Sat, 23 Oct 2010 01:52:00 GMT</pubDate><guid>http://www.blogjava.net/temptation/archive/2010/10/23/335955.html</guid><wfw:comment>http://www.blogjava.net/temptation/comments/335955.html</wfw:comment><comments>http://www.blogjava.net/temptation/archive/2010/10/23/335955.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/temptation/comments/commentRss/335955.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/temptation/services/trackbacks/335955.html</trackback:ping><description><![CDATA[問題敘述 <br />
&nbsp;&nbsp;&nbsp; <br />
請你設計一個通訊錄軟體，可提供新增、刪除、修改、顯示單筆通訊錄之功能。<br />
通訊錄應包括姓名、性別、年齡、電話、地址、郵遞區號....等資料。<br />
你的程式應利用結構(struct)的方式來實作。<br />
<br />
--------<br />
條件限制<br />
<br />
1.通訊錄最多可儲存20筆資料。<br />
2.請提供選單說明供使用者操作<br />
eg.<br />
&nbsp; ****** 選單 ********<br />
&nbsp; 1. 新增通訊錄<br />
&nbsp; 2. 刪除通訊錄<br />
&nbsp; 3. 修改通訊錄<br />
&nbsp; 4. 顯示通訊錄<br />
&nbsp; 5. 離開<br />
&nbsp; ********************<br />
&nbsp; 輸入選項=&gt;<br />
<br />
--------------<br />
輸入格式<br />
<br />
無檔案輸入,由鍵盤輸入資料。<br />
<br />
--------------<br />
輸出格式<br />
<br />
無檔案輸出,由營幕輸出資料。<br />
<br />
---------------<br />
輸入範例<br />
<br />
略<br />
----------<br />
輸出範例<br />
<br />
略<br />
<img src ="http://www.blogjava.net/temptation/aggbug/335955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/temptation/" target="_blank">外包工</a> 2010-10-23 09:52 <a href="http://www.blogjava.net/temptation/archive/2010/10/23/335955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程式設計(17)--作业4：成績處理系統</title><link>http://www.blogjava.net/temptation/archive/2010/10/23/335954.html</link><dc:creator>外包工</dc:creator><author>外包工</author><pubDate>Sat, 23 Oct 2010 01:50:00 GMT</pubDate><guid>http://www.blogjava.net/temptation/archive/2010/10/23/335954.html</guid><wfw:comment>http://www.blogjava.net/temptation/comments/335954.html</wfw:comment><comments>http://www.blogjava.net/temptation/archive/2010/10/23/335954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/temptation/comments/commentRss/335954.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/temptation/services/trackbacks/335954.html</trackback:ping><description><![CDATA[問題敘述 <br />
&nbsp;&nbsp;&nbsp; <br />
本次段考過後,X老師希望你設計一個程式能幫他統計同學們的成績。<br />
他希望的功能如下:<br />
1.可以輸入全班的N筆學生資料(1&lt;=N&lt;=50),每位學生有三科分數(國、英、數)。<br />
2.可以統計出每位同學的平均成績<br />
3.可以統計出每科成績的全班平均<br />
4.找出每科成績最好的同學<br />
現在請程式功力高強的你幫忙X老師解決他的問題吧!<br />
<br />
--------<br />
條件限制<br />
<br />
1.1&lt;=N&lt;=50<br />
2.請提供選單說明供使用者操作<br />
eg.<br />
&nbsp; ****** Menu ********<br />
&nbsp; 1. Input score.<br />
&nbsp; 2. Print each student's average.<br />
&nbsp; 3. Print the subjects average of the whole class.<br />
&nbsp; 4. Print the Top 1 of each subject.<br />
&nbsp; 5. Exit<br />
&nbsp; ********************<br />
&nbsp; your choice=&gt;<br />
<br />
--------------<br />
輸入格式<br />
<br />
無檔案輸入,由鍵盤輸入資料。<br />
<br />
--------------<br />
輸出格式<br />
<br />
無檔案輸出,由營幕輸出資料。<br />
<br />
---------------<br />
輸入範例<br />
<br />
Please input how many students do you have(1&lt;=N&lt;=50):<br />
3<br />
<br />
Please input the score one by one(Chinese,English,Math):<br />
50 60 40<br />
60 70 80<br />
90 80 70 <br />
<br />
----------<br />
輸出範例<br />
<br />
Print each student's average:<br />
No. Chinese English Math Average<br />
1 50 60 40 50<br />
2 60 70 80 70<br />
3 90 80 70 80<br />
<br />
Print the subjects average of the whole class:<br />
Chinese English Math Average<br />
66.7 70 63.3 66.7<br />
<br />
Print the Top 1 of each subject:<br />
Top 1 of Chinese: No. 3,Score 90<br />
Top 1 of English: No. 3,Score 80<br />
Top 1 of Math: No. 2,Score 80<br />
<br />
<br />
每個人的分數可用二維陣列 int score[50][3] 來儲存<br />
平均成績可儲存在 float avg[50] <br />
科目平均可儲存在 float subject_avg[3] <br />
<br />
例:<br />
//先將所有陣列初始值設為0,否則會有不可預期的後果<br />
for(int i=0;i&lt;50;i++)<br />
&nbsp;&nbsp;&nbsp; for(int j=0;j&lt;3;j++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; score[i][j]=0;<br />
<br />
for(int k=0;k&lt;50;k++)<br />
&nbsp;&nbsp;&nbsp; avg[k]=0;<br />
<br />
for(int l=0;l&lt;3;l++)<br />
&nbsp;&nbsp; subject_avg[l]=0;<br />
<br />
//讀入n筆學生分數<br />
for(int i=0 ; i &lt; n ; i=i+1 )<br />
scanf("%d%d%d", &amp;score[i][0], &amp;score[i][1], &amp;score[i][2]);<br />
<br />
//計算每個人的平均<br />
for(int i=0 ; i &lt; n ; i++ )<br />
avg[i]=(score[i][0]+score[i][1]+score[i][2])/3;<br />
<br />
//計算科目平均<br />
for(int i=0 ; i &lt; 3 ; i++ ){<br />
&nbsp;&nbsp; for(for int j=0 ; j&lt; n ; j++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; subject_avg[i]+=score[i][j];<br />
&nbsp;&nbsp; subject_avg[i]=subject_avg[i]/n;<br />
}<br />
<img src ="http://www.blogjava.net/temptation/aggbug/335954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/temptation/" target="_blank">外包工</a> 2010-10-23 09:50 <a href="http://www.blogjava.net/temptation/archive/2010/10/23/335954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程式設計(16)--作业3：河內塔(遞迴函數)</title><link>http://www.blogjava.net/temptation/archive/2010/10/23/335953.html</link><dc:creator>外包工</dc:creator><author>外包工</author><pubDate>Sat, 23 Oct 2010 01:49:00 GMT</pubDate><guid>http://www.blogjava.net/temptation/archive/2010/10/23/335953.html</guid><wfw:comment>http://www.blogjava.net/temptation/comments/335953.html</wfw:comment><comments>http://www.blogjava.net/temptation/archive/2010/10/23/335953.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/temptation/comments/commentRss/335953.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/temptation/services/trackbacks/335953.html</trackback:ping><description><![CDATA[<pre>請你設計一程式﹐利用遞迴函數的技巧﹐計算出般運N個圓環之河內塔所需要的全部移動次數。
--------
條件限制
1.使用者輸入一個正整數N(N&lt;64)
2.輸出移動N個圓環所需要的全部移動次數。
--------
輸入格式
無檔案輸入,由鍵盤輸入資料(正整數N,N&lt;=64)。
--------
輸出格式
無檔案輸出,由營幕輸出資料(移動次數)。
--------
輸入範例
Please input positive integerN(N&lt;=64)
N=3
--------
輸出範例
N=3,Total moves=7
----------
</pre>
<br />
/*<br />
<br />
1.簡單的想法<br />
<br />
將N個環分成上面的[N-1個]及[最下面的環],假設柱子編號為A,B,C<br />
<br />
將所有環由A移到C。<br />
<br />
1.1 先將[N-1個環]由 A 暫移到 B<br />
1.2 再將[最下面的環]由 A 移到 C<br />
1.3 最後再將[N-1個環]由 B 移到 C<br />
<br />
假設移動N個環所需的次數為F(N),則由1.1~1.3可知:<br />
<br />
F(N)=F(N-1)+1+F(N-1)=2*F(N-1)+1<br />
<br />
*/<br />
<br />
int hanoi-total-moves(int n){<br />
if(n==1)<br />
return 1;<br />
else<br />
return 2*hanoi-total-moves(n-1)+1;<br />
}<br />
<br />
/*<br />
<br />
2.進階問題<br />
<br />
如果要把移動的過程順便顯示出來,則需要改寫以上的函數:<br />
<br />
*/<br />
<br />
/* N個環,由 from柱 移到 to柱, 中間透過 tmp柱 */<br />
<br />
void hanoi-moving-steps(int n,char from,char to,char tmp){<br />
// 移動前 N-1 個環,由 from 到 tmp,透過 to<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(n==1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("move ring %d from pillar %c to pillar %c\n",n,from,to);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else{<br />
hanoi-moving-steps(n-1,from,tmp,to);<br />
// 移動第 N 個環<br />
printf("move ring %d from pillar %c to pillar %c",n,from,to);<br />
// 移動前 N-1 個環,由 tmp 到 to,透過 from<br />
hanoi-moving-steps(n-1,tmp,to,from);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
<br />
/* 呼叫函數例:&nbsp; 移動三個環,由A柱到C柱,中間透過B柱*/ <br />
<br />
hanoi-moving-steps(3,'A','C','B')<br />
<img src ="http://www.blogjava.net/temptation/aggbug/335953.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/temptation/" target="_blank">外包工</a> 2010-10-23 09:49 <a href="http://www.blogjava.net/temptation/archive/2010/10/23/335953.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程式設計(15)--作业2：猜數字(?A?B)</title><link>http://www.blogjava.net/temptation/archive/2010/10/23/335952.html</link><dc:creator>外包工</dc:creator><author>外包工</author><pubDate>Sat, 23 Oct 2010 01:47:00 GMT</pubDate><guid>http://www.blogjava.net/temptation/archive/2010/10/23/335952.html</guid><wfw:comment>http://www.blogjava.net/temptation/comments/335952.html</wfw:comment><comments>http://www.blogjava.net/temptation/archive/2010/10/23/335952.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/temptation/comments/commentRss/335952.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/temptation/services/trackbacks/335952.html</trackback:ping><description><![CDATA[問題敘述<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 猜數字遊戲(?A?B)是一種兩人玩的小游戲,其規則如下所述。<br />
假設兩人玩此遊戲,兩人先各在心中默想一組四位數(數字不重複)<br />
數字,然後兩人互猜對方所想數字,若數字正確且位置正確,則為<br />
1A,若數正確但位置不對,則為1B,被猜的人需將猜的結果告訴<br />
對方,以讓對方修正後再猜。<br />
<br />
例:假設甲乙互猜對方數字,其過程如下:<br />
<br />
甲默想數字為 2345<br />
乙默想數字為 7623<br />
<br />
甲猜:1234<br />
乙答:0A2B<br />
乙猜:6789<br />
甲答:0A0B<br />
甲猜:5678<br />
乙答:1A0B<br />
乙猜:1234<br />
甲答:0A3B<br />
<br />
直到某人猜到對方數字為止<br />
<br />
現在請你設計一個程式,讓它能夠預先默想一組四位數數字,然後<br />
使用者能與其互動來猜電腦所想的數字。電腦必須能夠正確的回<br />
答所猜的結果(以?A?B的格式),直到使用者猜到電腦所想的數字為止。<br />
--------<br />
條件限制<br />
<br />
1.電腦會以亂數產生一組四位數的數字(數字從0~9不重複)<br />
2.使用者需輸入四位數數字來猜<br />
3.電腦需依使用者輸入的輸出回應?A?B<br />
4.答對時顯示訊息,並結束程式。<br />
<br />
--------<br />
輸入格式<br />
<br />
無檔案輸入<br />
--------<br />
輸出格式<br />
<br />
無檔案輸出<br />
--------<br />
輸入範例<br />
<br />
無檔案輸入<br />
--------<br />
輸出範例<br />
<br />
無檔案輸出<br />
----------
<img src ="http://www.blogjava.net/temptation/aggbug/335952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/temptation/" target="_blank">外包工</a> 2010-10-23 09:47 <a href="http://www.blogjava.net/temptation/archive/2010/10/23/335952.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程式設計(14)--作业1：猜數字(二分逼近法)</title><link>http://www.blogjava.net/temptation/archive/2010/10/23/335951.html</link><dc:creator>外包工</dc:creator><author>外包工</author><pubDate>Sat, 23 Oct 2010 01:46:00 GMT</pubDate><guid>http://www.blogjava.net/temptation/archive/2010/10/23/335951.html</guid><wfw:comment>http://www.blogjava.net/temptation/comments/335951.html</wfw:comment><comments>http://www.blogjava.net/temptation/archive/2010/10/23/335951.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/temptation/comments/commentRss/335951.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/temptation/services/trackbacks/335951.html</trackback:ping><description><![CDATA[<pre>問題敘述
猜數字遊戲(二分逼近法)是一種兩人玩的小游戲,其規則如下所述。
假設兩人玩此遊戲,兩人先各在心中默想個數字(介於1~100間)
數字,然後兩人互猜對方所想數字,若數字正確則結束遊戲,
若不正確,需告訴對方答案為比較大或較小。然後兩人輪留猜
直到某人猜對為止。
例:使用者默想一數字27
電腦猜:50(答案較大請輸入1,答案較小請輸入2,猜對請輸入3)
使用者回答:2
電腦猜:25(答案較大請輸入1,答案較小請輸入2,猜對請輸入3)
使用者回答:1
電腦猜:37(答案較大請輸入1,答案較小請輸入2,猜對請輸入3)
使用者回答:2
電腦猜:31(答案較大請輸入1,答案較小請輸入2,猜對請輸入3)
使用者回答:2
電腦猜:28(答案較大請輸入1,答案較小請輸入2,猜對請輸入3)
使用者回答:2
電腦猜:26(答案較大請輸入1,答案較小請輸入2,猜對請輸入3)
使用者回答:2
電腦猜:27(答案較大請輸入1,答案較小請輸入2,猜對請輸入3)
使用者回答:3
Bingo!猜對了,共猜了7次.
遊戲結束.
--------
條件限制
1.使用者在心中默想一個數(1~100)
2.電腦以二分逼近的方式來猜使用者所想的數字,
使用者需告訴電腦所猜數字是否正確,若不正確,
需告訴電腦答案為較大或較小(可用1,2,3代碼表示大小或猜對)。
3.猜中後結束程式,並顯示所猜次數.
--------
輸出格式
無檔案輸入
--------
輸出格式
無檔案輸出
--------
輸入範例
無檔案輸入
--------
輸出範例
無檔案輸出
----------
</pre>
<br />
<br />
/*<br />
low:下限<br />
high:上限<br />
guess: 電腦猜的數字<br />
result: 電腦猜的結果(該調大或調小)<br />
可用數字代表:<br />
例: 1=&gt;大,2=&gt;小,3=&gt;猜對<br />
<br />
下列提示之問號請自行將程式碼補上<br />
*/<br />
<br />
int guess,result;<br />
int low=0,high=100;<br />
<br />
//當結果不為猜對時,迴圈重複執行<br />
while(result!=?)<br />
{<br />
//所猜的數字=上限加下限除以2;<br />
guess=(low+high);<br />
//印出所猜的數字<br />
printf("%d",guess);<br />
//讀取結果<br />
scanf("%d",&amp;result);<br />
<br />
//如果要調大<br />
if(result==?)<br />
// 將下限調大<br />
low=?<br />
//如果調小<br />
else if(result==?)<br />
// 將上限調小<br />
high=?<br />
//猜對了<br />
else if(result==)<br />
// 印出猜對訊息<br />
printf?<br />
}<br />
<img src ="http://www.blogjava.net/temptation/aggbug/335951.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/temptation/" target="_blank">外包工</a> 2010-10-23 09:46 <a href="http://www.blogjava.net/temptation/archive/2010/10/23/335951.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程式設計(13)--堆疊與佇列 stack&amp;queue II</title><link>http://www.blogjava.net/temptation/archive/2010/10/23/335950.html</link><dc:creator>外包工</dc:creator><author>外包工</author><pubDate>Sat, 23 Oct 2010 01:42:00 GMT</pubDate><guid>http://www.blogjava.net/temptation/archive/2010/10/23/335950.html</guid><wfw:comment>http://www.blogjava.net/temptation/comments/335950.html</wfw:comment><comments>http://www.blogjava.net/temptation/archive/2010/10/23/335950.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/temptation/comments/commentRss/335950.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/temptation/services/trackbacks/335950.html</trackback:ping><description><![CDATA[1.堆疊應用:計算後序式(postfix)之四則運算<br />
<br />
&nbsp; 當我們在計算四則運算時,所用的式子稱為中序式(infix)。中序式,是因為運算符號<br />
&nbsp; 被夾在兩個運算數字的中間(如 1+2 或 3*4),但是當多筆數字及運算符號在同一個式<br />
&nbsp; 子時,便會有運算符號優先順序的問題。請看下面兩個算式:<br />
<br />
&nbsp; 1*2+3*4=14,答案是對的(依照先加減後乘除的順序計算)<br />
&nbsp; 1*2+3*4=24,若依照先加減後乘除的順序,則答案是錯的,但反之則是對的。<br />
<br />
&nbsp; 為了避免這種運算符號優先順序不同造成的困擾，當我們在計算時有時會加上括號<br />
&nbsp; 明確的表明運算順序。(例: 1*(2+3)*4 )<br />
<br />
&nbsp; 若利用程?茬B理四則運算的話,中序式雖然容易被人類判讀,但對程?茖市o會造<br />
&nbsp; 成上述的困擾與麻煩,而用後序?茬B理則不必考慮運算符號順序的問題。<br />
<br />
&nbsp; 後序式的規則是將兩運算數字排在前,運算符號排在最後。例:<br />
<br />
&nbsp; 前序式&nbsp; =&gt;&nbsp; 後序式<br />
&nbsp; 1*2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12*<br />
&nbsp; 1*2+3*4&nbsp;&nbsp;&nbsp;&nbsp; 12*34*+<br />
&nbsp; 1*(2+3)*4&nbsp;&nbsp; 123+*4*<br />
&nbsp; 1+2*3+4&nbsp;&nbsp;&nbsp;&nbsp; 123*+4+<br />
<br />
&nbsp; 利用堆疊來計算四則運算:<br />
&nbsp; <br />
&nbsp; (1)先將中序式:a*b+c*d 轉換成 後序式:ab*cd*+ <br />
&nbsp; (2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由左至右掃描整個後序式,若遇到數字則放入堆疊;若遇到運算符號,則從堆疊內取 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 出兩個數字作運算,再將結果放入堆疊。重覆處理到式子結束。<br />
<br />
&nbsp; (3)取出堆疊內的最後筆資料,即為結果。<br />
<br />
&nbsp; 處理流程:<br />
<br />
&nbsp; postfix:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stack:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; comment:&nbsp; <br />
<br />
&nbsp; ab*cd*+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 原始算式&nbsp; <br />
&nbsp; b*cd*+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 放入a至堆疊<br />
&nbsp; *cd*+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ab&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 放入b<br />
&nbsp; cd*+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a*b)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 運算*,取出b,a 並將(a*b)結果放入堆疊<br />
&nbsp; d*+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a*b)c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 放入c<br />
&nbsp; *+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a*b)cd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 放入d<br />
&nbsp; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a*b)(c*d)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 運算*,取出d,c 並將(c*d)結果放入堆疊<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a*b)+(c*d)&nbsp;&nbsp;&nbsp;&nbsp; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 運算+,取出(c*d),(a*b)並將(a*b)+(c*d)放入堆疊 <br />
<br />
<br />
&nbsp; 故以程式計算四則運算的流程如後:<br />
&nbsp; <br />
&nbsp; 中序式=&gt;後序式=&gt;運算處理<br />
<br />
&nbsp; (中序式轉換為後序式的作法因為需要較多篇幅,在此先省略。)<br />
&nbsp;&nbsp; <br />
2.佇列應用:走迷宮<br />
<br />
&nbsp; 走迷宮是一種考驗計憶力的遊戲。(not yet!)<br />
<img src ="http://www.blogjava.net/temptation/aggbug/335950.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/temptation/" target="_blank">外包工</a> 2010-10-23 09:42 <a href="http://www.blogjava.net/temptation/archive/2010/10/23/335950.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程式設計(12)--堆疊與佇列 stack&amp;queue I</title><link>http://www.blogjava.net/temptation/archive/2010/10/23/335949.html</link><dc:creator>外包工</dc:creator><author>外包工</author><pubDate>Sat, 23 Oct 2010 01:41:00 GMT</pubDate><guid>http://www.blogjava.net/temptation/archive/2010/10/23/335949.html</guid><wfw:comment>http://www.blogjava.net/temptation/comments/335949.html</wfw:comment><comments>http://www.blogjava.net/temptation/archive/2010/10/23/335949.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/temptation/comments/commentRss/335949.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/temptation/services/trackbacks/335949.html</trackback:ping><description><![CDATA[<p>1.堆疊處理資料的方式都是在同一邊進行，也就是由一端插入，也由同一端刪除,</p>
<br />
<p>&nbsp; 因此，堆疊處理資料的順序為後進先出(Last In First Out,LIFO)；平日生活中,也有</p>
<br />
<p>&nbsp; 資些堆疊的例子，如堆積木、蓋房子...等，都是一層一層的堆上去，如果要拆下來</p>
<br />
<p>&nbsp; 的話，也只能從最上面卸下來。</p>
<br />
<p>&nbsp;</p>
<br />
<p>&nbsp; 堆疊範例:</p>
<br />
<p>&nbsp;</p>
<br />
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3 </p>
<br />
<p>&nbsp; 放入1&nbsp; &nbsp;&nbsp; 放入2&nbsp;&nbsp; 2&nbsp;&nbsp; 放入3&nbsp;&nbsp; 2&nbsp; 取出3&nbsp; 2&nbsp; 取出2&nbsp; &nbsp; 取出1</p>
<br />
<p>&nbsp; &nbsp;&nbsp; =&gt;&nbsp; 1&nbsp; &nbsp;&nbsp; =&gt;&nbsp;&nbsp; 1&nbsp; &nbsp; &nbsp; =&gt;&nbsp;&nbsp; 1&nbsp; &nbsp;&nbsp; =&gt;&nbsp; 1&nbsp; &nbsp;&nbsp; =&gt;&nbsp; 1&nbsp; &nbsp; =&gt;</p>
<br />
<p>&nbsp;</p>
<br />
<p>2.佇列和堆疊處理資料方式是不大一樣的，佇列是屬於先進先出（First In First</p>
<br />
<p>&nbsp; Out,FIFO）的觀念，在平日生活中可以看到很多屬於佇列的例子，如排隊上公車、</p>
<br />
<p>&nbsp; 排隊買電影票或是超市排隊付賬等，皆是先到達的先處理、後到的後處理。</p>
<br />
<p>&nbsp;</p>
<br />
<p>&nbsp; 佇列範例:</p>
<br />
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3 </p>
<br />
<p>&nbsp; 放入1&nbsp; &nbsp;&nbsp; 放入2&nbsp;&nbsp; 2&nbsp;&nbsp; 放入3&nbsp;&nbsp; 2&nbsp; 取出1&nbsp; 3&nbsp; 取出2&nbsp; &nbsp; 取出3</p>
<br />
<p>&nbsp; &nbsp;&nbsp; =&gt;&nbsp; 1&nbsp; &nbsp;&nbsp; =&gt;&nbsp;&nbsp; 1&nbsp; &nbsp; &nbsp; =&gt;&nbsp;&nbsp; 1&nbsp; &nbsp;&nbsp; =&gt;&nbsp; 2&nbsp; &nbsp;&nbsp; =&gt;&nbsp; 3&nbsp; &nbsp; =&gt;</p>
<br />
<p>&nbsp;</p>
<br />
<p>3.堆疊與佇列的實作可以陣列或串列的方?荍@。其基本操作的部份可分為放入</p>
<br />
<p>&nbsp; (push）、取出（pop）、查詢（retrieve）、檢查是否滿溢（isfull）、</p>
<br />
<p>&nbsp; 檢查是否為空（isempy）</p>
<br />
<img src ="http://www.blogjava.net/temptation/aggbug/335949.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/temptation/" target="_blank">外包工</a> 2010-10-23 09:41 <a href="http://www.blogjava.net/temptation/archive/2010/10/23/335949.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程式設計(11)--排序sort </title><link>http://www.blogjava.net/temptation/archive/2010/10/23/335948.html</link><dc:creator>外包工</dc:creator><author>外包工</author><pubDate>Sat, 23 Oct 2010 01:40:00 GMT</pubDate><guid>http://www.blogjava.net/temptation/archive/2010/10/23/335948.html</guid><wfw:comment>http://www.blogjava.net/temptation/comments/335948.html</wfw:comment><comments>http://www.blogjava.net/temptation/archive/2010/10/23/335948.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/temptation/comments/commentRss/335948.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/temptation/services/trackbacks/335948.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 汽泡排序法（Bubble Sort）︰如同汽泡由下逐漸往上升，越大的汽泡上升越快。說明：假設現有資料如下，欲將其由小排列至大。(若有N筆資料,則共需N-1回合)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 小&nbsp; =&gt; =&gt; =&gt; 排序方向 =&...&nbsp;&nbsp;<a href='http://www.blogjava.net/temptation/archive/2010/10/23/335948.html'>阅读全文</a><img src ="http://www.blogjava.net/temptation/aggbug/335948.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/temptation/" target="_blank">外包工</a> 2010-10-23 09:40 <a href="http://www.blogjava.net/temptation/archive/2010/10/23/335948.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程式設計(10)--搜尋與排序search &amp; sort </title><link>http://www.blogjava.net/temptation/archive/2010/10/23/335947.html</link><dc:creator>外包工</dc:creator><author>外包工</author><pubDate>Sat, 23 Oct 2010 01:38:00 GMT</pubDate><guid>http://www.blogjava.net/temptation/archive/2010/10/23/335947.html</guid><wfw:comment>http://www.blogjava.net/temptation/comments/335947.html</wfw:comment><comments>http://www.blogjava.net/temptation/archive/2010/10/23/335947.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/temptation/comments/commentRss/335947.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/temptation/services/trackbacks/335947.html</trackback:ping><description><![CDATA[<p>1&nbsp;&nbsp;&nbsp;&nbsp; 搜尋︰<br />
</p>
<p>1.1&nbsp;&nbsp;&nbsp;&nbsp; 循序搜尋（線性搜尋）︰<br />
</p>
<p>將資料重頭到尾檢查過一遍，即為循序搜尋。</p>
<p>&nbsp;</p>
<p>eg.假設有以下十筆資料,欲找數字7</p>
<p>&nbsp;</p>
<p>1 2 3 4 5 6 7 8 9 10</p>
<p>&nbsp;</p>
<p>=&gt; 由左至右，共需比對7次。</p>
<p>&nbsp;</p>
<p>若考慮一般情形的話，循序搜尋N筆資料所須比對的次數最大為N，最小為1，故平均起來需要比對(1+N)/2次。</p>
<p>&nbsp;</p>
<p>範例程式</p>
<p>
<p style="margin-left: 48px"></p>
<table class="prg" width="700">
    <tbody>
        <tr>
            <td>
            <p>&nbsp;</p>
            <p>int data[10]={1,2,3,4,5,6,7,8,9,10};</p>
            <font color="orange">//target為要找的資料 </font>
            <p>int target=7;</p>
            <font color="orange">//found=0為預設值,若找到則將其設為1 </font>
            <p>int found=0;</p>
            <p>for(int i=0;i&lt;10;i++)</p>
            <p>&nbsp; if(target==data[i]){</p>
            <p>&nbsp; &nbsp; found=1;</p>
            <p>&nbsp; &nbsp; printf("found!at %d position\n",i);</p>
            &nbsp; <font color="orange">//break可以中斷for迴圈 </font>
            <p>&nbsp; &nbsp; break;</p>
            <p>}</p>
            <p>&nbsp;</p>
            <p>if(found==0)</p>
            <p>&nbsp; printf("not found!\n");</p>
            <p>&nbsp;</p>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>1.2&nbsp;&nbsp;&nbsp;&nbsp; 二元搜尋 (Binary Search)<br />
</p>
<p>二元搜尋法所使用的時機是當資料以經排好順序後，我們先從中間值開始找起。若目標值比中位數來的小，則往小的另一半繼續找；反之則往大的另一邊找。如此尋找的次數便可有效地降低，最多不會超過log2(N)+1次。</p>
<p>&nbsp;</p>
<p>eg. 假設有以下10筆資料，欲找數字7，共需比對4次!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<table>
    <p>&nbsp;</p>
    <p>
    <tbody>
        <tr>
            <td>1</td>
            <td>2</td>
            <td>3</td>
            <td>4</td>
            <td>5</td>
            <td>6</td>
            <td>7</td>
            <td>8</td>
            <td>9</td>
            <td>10</td>
            <td>=&gt;一開始先找中間值5(亦可先找6)，未找到。
            <td></td>
            <p>&nbsp;</p>
            <p>&nbsp;</p>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td>6</td>
                <td>7</td>
                <td>8</td>
                <td>9</td>
                <td>10</td>
                <td>=&gt;將範圍縮小成右半邊，再找其中間值8，未找到。</td>
            </tr>
            <p>&nbsp;</p>
            <p>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td>6</td>
                <td>7</td>
                <td></td>
                <td></td>
                <td></td>
                <td>=&gt;將範圍縮小成左半邊，再找其中間值6，未找到。</td>
            </tr>
            </p>
            <p>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td>7</td>
                <td></td>
                <td></td>
                <td></td>
                <td>=&gt;將範圍縮小成右半邊，只剩下7，Bingo找到了!</td>
            </tr>
            </p>
            <p>&nbsp;</p>
            <p>&nbsp;</p>
            <p>&nbsp;</p>
            </p>
        </table>
        <p>&nbsp;</p>
        <p>&nbsp;</p>
        <p>&nbsp;</p>
        <p>範例程式</p>
        <p>
        <p style="margin-left: 48px"></p>
        <table class="prg" width="700">
            <tbody>
                <tr>
                    <td>
                    <p>&nbsp;</p>
                    <p>int data[10]={1,2,3,4,5,6,7,8,9,10};</p>
                    <font color="orange">//target為要找的資料，found=0為尚未找到，found=1為找到。 </font>
                    <p>int target=7,found=0;</p>
                    <font color="orange">//low為左邊界索引值，high為右邊界索引值，mid為中間值索引值 </font>
                    <p>int low=0,high=9,mid;</p>
                    <font color="orange">//當左邊界小於或等於右邊界 及 尚未找到資料時，重覆執行 </font>
                    <p>while(low &lt;= high &amp;&amp; found==0){</p>
                    <p>&nbsp; &nbsp; mid=(low+high)/2;</p>
                    <p>&nbsp; &nbsp; if(target==data[mid]){</p>
                    <p>&nbsp; &nbsp; &nbsp; &nbsp; found=1;</p>
                    <p>&nbsp; &nbsp; &nbsp; &nbsp; printf("found!at %d position\n",mid);</p>
                    <p>&nbsp; &nbsp; }</p>
                    <p>&nbsp; &nbsp; else if(target &gt; data[mid])</p>
                    <p>&nbsp; &nbsp; &nbsp; &nbsp; low=mid+1;//重設左邊界</p>
                    <p>&nbsp; &nbsp; else if(target &lt; data[mid])</p>
                    <p>&nbsp; &nbsp; &nbsp; &nbsp; high=mid-1;//重設右邊界</p>
                    <p>}</p>
                    <p>&nbsp;</p>
                    <p>if(found==0)</p>
                    <p>&nbsp; &nbsp; printf("not found!\n");</p>
                    <p>&nbsp;</p>
                    </td>
                </tr>
            </tbody>
        </table>
        <p>&nbsp;</p>
        <p>&nbsp;</p>
        <p>&nbsp;</p>
        <p>3&nbsp;&nbsp;&nbsp;&nbsp; 想想看</p>
        <p>3.1&nbsp;&nbsp;&nbsp;&nbsp; 若將以上二分搜尋法的程式碼while(low&lt;=high&amp;&amp;found==0)中的low&lt;=high移除，請問執行結果會有何影響?(提示：可分為找到資料與找不到資料兩種狀況來討論)</p>
        <p>3.2&nbsp;&nbsp;&nbsp;&nbsp; 請修改以上範例程式碼，使其可以將比對次數印出來。</p>
        <p>3.3&nbsp;&nbsp;&nbsp;&nbsp; 想想看：請寫一程式，比較當處理不同的資料數量時(10、100、10000)，線性搜尋與二元搜尋法執行的效率。並請將效率量化。</p>
<img src ="http://www.blogjava.net/temptation/aggbug/335947.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/temptation/" target="_blank">外包工</a> 2010-10-23 09:38 <a href="http://www.blogjava.net/temptation/archive/2010/10/23/335947.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>