修改程式範例: Ch5-4-1.c 為 Ch5-4-1e.c
1. 請使用堆疊方式找出走出迷宮的路,如下所示:
2. 可走的路自行設定。
2011年6月11日 星期六
EX18. 使用陣列建立佇列
修改程式範例: Ch6-2-1.c 為 Ch6-2-1e.c
1.請使用陣列方式建立佇列
2.請於程式中加入功能如下: [1]存入 [2]取出 [3]顯示全部…
[1]存入 : 詢問輸入存入值
[2]取出 : 顯示取出佇列元素
[3]顯示全部 :顯示輸入佇列的元素/取出佇列的元素/剩下佇列的元素
3.功能參考(ch6-2-2.c)
1.請使用陣列方式建立佇列
2.請於程式中加入功能如下: [1]存入 [2]取出 [3]顯示全部…
[1]存入 : 詢問輸入存入值
[2]取出 : 顯示取出佇列元素
[3]顯示全部 :顯示輸入佇列的元素/取出佇列的元素/剩下佇列的元素
3.功能參考(ch6-2-2.c)
EX17. 河內塔問題
修改程式範例: Ch5-5.c 為 Ch5-5e.c
1.請建立遞迥函數解出5個盤子的河內塔問題
2.請參考如下方式用Excel寫出所有完整的遞迥呼叫的執行過程
3.執行過程Excel檔請在Google 文件設為共用並將url置於網頁上
點我
1.請建立遞迥函數解出5個盤子的河內塔問題
2.請參考如下方式用Excel寫出所有完整的遞迥呼叫的執行過程
3.執行過程Excel檔請在Google 文件設為共用並將url置於網頁上
點我
2011年6月10日 星期五
EX14. 鏈結串列的應用- 多項式表示法
修改程式範例: Ch4-6.c 為 Ch4-6e.c
請使用含開頭節點的環狀串列結構儲存下列多項式,如下所示:
(1) f(x) = X4+5X3+4X+3
(2) g(x) = 5X2+2X+5
請使用含開頭節點的環狀串列結構儲存下列多項式,如下所示:
(1) f(x) = X4+5X3+4X+3
(2) g(x) = 5X2+2X+5
2011年5月31日 星期二
EX13. 雙向鏈結串列
修改程式範例: Ch4-5-3.c 為 Ch4-5-3e.c
1.將雙向鏈結串列的所有操作整合
2.整合的功能如下:
[F] 往下移動
[B] 往前移動
[A] 新增節點
[D] 刪除節點
[R] 重設
[V] 節點值
[E] 離開
3.參考Ch4-5-1.c Ch4-5-2.c Ch4-5-3.c
1.將雙向鏈結串列的所有操作整合
2.整合的功能如下:
[F] 往下移動
[B] 往前移動
[A] 新增節點
[D] 刪除節點
[R] 重設
[V] 節點值
[E] 離開
3.參考Ch4-5-1.c Ch4-5-2.c Ch4-5-3.c
2011年5月20日 星期五
EX12. 鏈結串列insertNode
修改程式範例: Ch4-3-3.c 為 Ch4-3-3e.c
修改 Ch4-3-3.c 中include的 “insertNode.c”程式
將”情況2: 插入最後一個節點”及”情況3: 插入成為中間節點 “的程式碼判斷改為同時指向ptr->next.
修改 Ch4-3-3.c 中include的 “insertNode.c”程式
將”情況2: 插入最後一個節點”及”情況3: 插入成為中間節點 “的程式碼判斷改為同時指向ptr->next.
2011年5月7日 星期六
EX11. 鏈結串列DELETENODE
修改程式範例: Ch4-3-2.c 為 Ch4-3-2e.c
1.修改 Ch4-3-2.c 中include的 “deleteNode.c”程式
2.將”情況2: 刪除最後一個節點”及”情況3: 刪除中間節點 “的程式碼判斷改為同時指向 ptr->next.
1.修改 Ch4-3-2.c 中include的 “deleteNode.c”程式
2.將”情況2: 刪除最後一個節點”及”情況3: 刪除中間節點 “的程式碼判斷改為同時指向 ptr->next.
2011年4月14日 星期四
EX10.指標與字串
修改程式範例: Ch3-4-1.c 為 Ch3-4-1e.c
1. 將字串複製:
於while程式段中的ptr1修改為如ptr的遞增運算方式
2. 如:
加法運算 遞增運算
*(ptr1+i) ; *ptr1++;
1. 將字串複製:
於while程式段中的ptr1修改為如ptr的遞增運算方式
2. 如:
加法運算 遞增運算
*(ptr1+i) ; *ptr1++;
EX09.指標與結構
修改程式範例: Ch3-3.c 為 Ch3-3e.c
1.增加電話結構的宣告
struct phone /* phone結構 */
{
char phone1[15];
char phone2[15];
}
2.將 struct label 增加phone結構成員:
struct phone callno;
3.使用結構變數和指標來存取
1.增加電話結構的宣告
struct phone /* phone結構 */
{
char phone1[15];
char phone2[15];
}
2.將 struct label 增加phone結構成員:
struct phone callno;
3.使用結構變數和指標來存取
2011年4月2日 星期六
Ex08.指標與二維陣列
修改程式範例: Ch3-2-2.c 為 Ch3-2-2e.c
1.將程式改為完整的九九乘法表
2.增加顯示 i, j, i+1, j+1 及 i*COLS+j 的值如下:
i | j | i+1 | j+1 | i*COLS+j |
0 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | 2 | 1 |
0 | 2 | 1 | 3 | 2 |
… | … | … | … | … |
2011年3月29日 星期二
2011年3月24日 星期四
2011年3月5日 星期六
Ex03.陣列程式
Ex03.陣列程式
修改程式範例: Ch2-1-2.c 為Ch2-1-2e.c
1.增加成績對調的功能
2.於選單增加”成績對調”選項
3.詢問欲對調成績的學生學號
4.將輸入的學生學號對應的成績執行對調
對調方式:
temp=scores[std1];
scores[std1]=scores[std2];
scores[std2]=temp;
ANS:
#include <stdio.h>
#include <stdlib.h>
/* 主程式 */
int main() {
/* 學生成績陣列 */
int scores[10] = {76,85,90,67,59,79,82,95,91,65};
int num; /* 學號 */
int grade; /* 成績 */
int i, choice; /* 選項 */
int n,temp; /* 對調 */
int doit = 1;
/* 執行操作的主迴圈 */
while ( doit ) {
printf("----選單----\n");
printf("1: 查詢成績\n");
printf("2: 修改成績\n");
printf("3: 成績對調\n");
printf("4: 顯示成績\n");
printf("5: 離開作業\n");
printf("請輸入選項( 1 到 5 ). ==> ");
scanf("%d", &choice);
if (choice < 4 ) {
printf("請輸入學生學號( 0 到 9). ==> ");
scanf("%d", &num); /* 讀入學號 */
}
switch( choice ) {
case 1: /* 查詢成績 */
grade = scores[num]; /* 取得成績 */
printf("學生成績: %d\n", grade);
break;
case 2: /* 修改成績 */
grade = scores[num];
printf("原來學生成績: %d\n", grade);
printf("輸入新成績. ==> ");/* 讀取新成績 */
scanf("%d", &grade);
scores[num] = grade; /* 更新成績 */
break;
case 3: /* 成績對調 */
grade = scores[num]; /* 取得成績 */
printf("請輸入欲對調學生之學號. ==> ");
scanf("%d", &n); /* 讀入欲對調學生之學號 */
temp = scores[num];
scores[num] = scores[n];
scores[n] = temp;
break;
case 4: /* 顯示成績 */
printf("學生成績: \n");
for ( i = 0; i < 10; i++ )
printf("%d:%d ", i, scores[i]);
printf("\n");
break;
case 5: /* 結束作業 */
doit = 0;
break;
}
}
system("PAUSE");
return 0;
}
修改程式範例: Ch2-1-2.c 為Ch2-1-2e.c
1.增加成績對調的功能
2.於選單增加”成績對調”選項
3.詢問欲對調成績的學生學號
4.將輸入的學生學號對應的成績執行對調
對調方式:
temp=scores[std1];
scores[std1]=scores[std2];
scores[std2]=temp;
ANS:
#include <stdio.h>
#include <stdlib.h>
/* 主程式 */
int main() {
/* 學生成績陣列 */
int scores[10] = {76,85,90,67,59,79,82,95,91,65};
int num; /* 學號 */
int grade; /* 成績 */
int i, choice; /* 選項 */
int n,temp; /* 對調 */
int doit = 1;
/* 執行操作的主迴圈 */
while ( doit ) {
printf("----選單----\n");
printf("1: 查詢成績\n");
printf("2: 修改成績\n");
printf("3: 成績對調\n");
printf("4: 顯示成績\n");
printf("5: 離開作業\n");
printf("請輸入選項( 1 到 5 ). ==> ");
scanf("%d", &choice);
if (choice < 4 ) {
printf("請輸入學生學號( 0 到 9). ==> ");
scanf("%d", &num); /* 讀入學號 */
}
switch( choice ) {
case 1: /* 查詢成績 */
grade = scores[num]; /* 取得成績 */
printf("學生成績: %d\n", grade);
break;
case 2: /* 修改成績 */
grade = scores[num];
printf("原來學生成績: %d\n", grade);
printf("輸入新成績. ==> ");/* 讀取新成績 */
scanf("%d", &grade);
scores[num] = grade; /* 更新成績 */
break;
case 3: /* 成績對調 */
grade = scores[num]; /* 取得成績 */
printf("請輸入欲對調學生之學號. ==> ");
scanf("%d", &n); /* 讀入欲對調學生之學號 */
temp = scores[num];
scores[num] = scores[n];
scores[n] = temp;
break;
case 4: /* 顯示成績 */
printf("學生成績: \n");
for ( i = 0; i < 10; i++ )
printf("%d:%d ", i, scores[i]);
printf("\n");
break;
case 5: /* 結束作業 */
doit = 0;
break;
}
}
system("PAUSE");
return 0;
}
2011年2月26日 星期六
Ex02. 頻率計數
(1)
for ( i = 0 ; i < n ; i ++ ) n+1
for ( j = 0 ; j < n ; j ++ ) n(n+1)
for ( k = 0 ; k < n ; k ++ ) n2(n+1)
a = a + 1 ; n3
頻率計數:2n3+2n2+2n+1
(2)
i = 1 ; 1
while ( i <= n ) n+1
{
a = a + 1 ; n
i ++ ; n
}
頻率計數: 3n+2
for ( i = 0 ; i < n ; i ++ ) n+1
for ( j = 0 ; j < n ; j ++ ) n(n+1)
for ( k = 0 ; k < n ; k ++ ) n2(n+1)
a = a + 1 ; n3
頻率計數:2n3+2n2+2n+1
(2)
i = 1 ; 1
while ( i <= n ) n+1
{
a = a + 1 ; n
i ++ ; n
}
頻率計數: 3n+2
Ex01. 迴圈
EX.01 迴圈
EX.01 迴圈
請說明
遞迴是什麼?
ANS:一個問題的內涵是由本身所定義的話,稱之為遞迴。
遞迴函數是由上而下分析方法的一種特殊的情況,因為子問題本身和原來問題擁有相同的特性,只是範圍改變,範圍逐漸縮小到一個終止條件。
遞迴擁有哪些特性?
ANS:1.函數在每次呼叫時,都可以使問題範圍逐漸縮小。
2.函數需要擁有一個終止條件,以便結束遞迴函數的執行,否遞迴函
數並不會結束,而是持續的呼叫自己,類似無窮迴圈。
遞迴分為哪兩種?
ANS:1.直接遞迴
遞迴函數是在遞迴函數本身的程式碼進行呼叫
也就是自己呼叫自己,稱為直接遞迴,例如:
Void a()
{
…
A();
…
}
2.間接遞迴
至少需要2個函數A() 和 B(),在函數A()的程式碼呼叫函數B();
函數B()的程式碼呼叫函數A(),此情況的遞迴呼叫稱為間接遞迴
例如:
Void A()
{
…
B();
…
}
Void B()
{
…
A()
…
}
請說明
遞迴是什麼?
ANS:一個問題的內涵是由本身所定義的話,稱之為遞迴。
遞迴函數是由上而下分析方法的一種特殊的情況,因為子問題本身和原來問題擁有相同的特性,只是範圍改變,範圍逐漸縮小到一個終止條件。
遞迴擁有哪些特性?
ANS:1.函數在每次呼叫時,都可以使問題範圍逐漸縮小。
2.函數需要擁有一個終止條件,以便結束遞迴函數的執行,否遞迴函
數並不會結束,而是持續的呼叫自己,類似無窮迴圈。
遞迴分為哪兩種?
ANS:1.直接遞迴
遞迴函數是在遞迴函數本身的程式碼進行呼叫
也就是自己呼叫自己,稱為直接遞迴,例如:
Void a()
{
…
A();
…
}
2.間接遞迴
至少需要2個函數A() 和 B(),在函數A()的程式碼呼叫函數B();
函數B()的程式碼呼叫函數A(),此情況的遞迴呼叫稱為間接遞迴
例如:
Void A()
{
…
B();
…
}
Void B()
{
…
A()
…
}
2011年2月19日 星期六
資料結構 學習上的期望與建議
1. 個人對於資訊相關課程之學習經驗與問題分析.
(Ex.曾學習過之相關電腦文書處理、程式語言、網路等;較有心得及較無心得之科目,請分析一下原因?)
高職唸的是商業類Word、Excel、PowerPoint都懂一些基本的
較有心得的科目是進專才接觸到的c++
較無心得的科目應該是沒有
因為我覺得資訊類的理解很重要
也是要花時間練習看書和上課注意聽
較有心得的科目是進專才接觸到的c++
較無心得的科目應該是沒有
因為我覺得資訊類的理解很重要
也是要花時間練習看書和上課注意聽
2. 個人對本課程學習上的想法、期望、與建議.
(Ex.如上課方式、教材內容等)
上課能像c++的課一樣
多一點實際操作機會
做中學我覺得比較快能理解
上課能像c++的課一樣
多一點實際操作機會
做中學我覺得比較快能理解
訂閱:
文章 (Atom)