\n"); for(i=0;i \n"); for(i=0;i

Presentation is loading. Please wait.

Presentation is loading. Please wait.

Q1(a) 小偉打算編寫一個程序。該程序把兩個44的表內的數字相加。表3內的數字是由表1和表2應格子內的數字相加而成。例如:

Similar presentations


Presentation on theme: "Q1(a) 小偉打算編寫一個程序。該程序把兩個44的表內的數字相加。表3內的數字是由表1和表2應格子內的數字相加而成。例如:"— Presentation transcript:

1 Q1(a) 小偉打算編寫一個程序。該程序把兩個44的表內的數字相加。表3內的數字是由表1和表2應格子內的數字相加而成。例如:
5 + = 6 7 8 The sum of these two tables is > Enter the row 1 elements of Table 1 : Enter the row 2 elements of Table 1 : Enter the row 3 elements of Table 1 : Enter the row 4 elements of Table 1 : Enter the row 1 elements of Table 2 : Enter the row 2 elements of Table 2 : Enter the row 3 elements of Table 2 : Enter the row 4 elements of Table 2 : CS1999

2 int table1[MAX][MAX], table2[MAX][MAX], i, j;
#define MAX 4 int table1[MAX][MAX], table2[MAX][MAX], i, j; void output(){ printf ("\nThe sum of these tables is >\n"); for(i=0;i<MAX;i++){ for(j=0;j<MAX;j++) printf("%d\t",table2[i][j]); printf("\n"); } main(){ printf("Enter two %dx%d matrix: \n\n", MAX,MAX); input1(); input2(); process(); output(); } CS1999

3 for(i=0;i<MAX;i++){
void input1(){ for(i=0;i<MAX;i++){ printf("Enter the row %d elements of Table 1: ",i); for(j=0;j<MAX;j++) scanf("%d", &table1[i][j]); } void input2(){ for(i=0;i<MAX;i++){ printf("Enter the row %d elements of Table 2: ",i); for(j=0;j<MAX;j++) scanf("%d", &table2[i][j]); } void process(){ for(i=0;i<MAX;i++) for(j=0;j<MAX;j++) table2[i][j] += table1[i][j]; } CS1999

4 Q2. 某學生編寫了以下的C程序,把用戶輸入的兩位正整數排序。
#define NUM 5 const int digit=2; int bin[10][NUM], data[NUM]; int key, pass, i,j,k, empty; main(){ printf("No.of positive integers to be sorted: %d\n", NUM); for(i=0; i<NUM; i++){ printf("Enter a %d-digit integer: ",digit); scanf("%d",&data[i]); } for(pass=1; pass<=digit; pass++){ printf("After pass %d :\n", pass); for(i=0;i<NUM;i++) printf("%d\t",data[i]); printf("\n"); 2 CS1999

5 [7][0] [3][0] [2][0] [3][1] [2][1] [0][0] [4][0] [5][0] [1][0] [3][0]
bin[i][j] for(pass=1;pass<=digit;pass++){ for(i=0; i<10; i++) for(j=0;j<NUM;j++) bin[i][j]=0; } 1 2 3 4 5 6 7 8 9 15 20 23 37 43 20 23 43 15 37 5 5 for(i=0; i<NUM; i++){ switch (pass){ case 1: key=data[i]%10; break; case 2: key=data[i]/10; break; } k=empty=0; bin[key][k] = data[i]; 個位 十位 do{ if(bin[key][k]>0) k++; else empty=1; }while (empty==0); k data[k] 37 1 23 2 43 3 20 4 15 [7][0] k data[k] 20 1 23 2 43 3 15 4 37 k=0; for(i=0; i<10; i++) for(j=0;j<NUM;j++) if (bin[i][j]>0){ data[k]=bin[i][j]; k++; } [7][0] [3][0] [3][1] [0][0] [5][0] k data[k] 15 1 20 2 23 3 37 4 43 [2][0] [2][1] [4][0] [1][0] [3][0] 5 CS1999

6 請小心細閱程序並回答以下各問題。附加在程序中之行號只作參考用。 (a) 指出哪一行決定須排序的正整數數目。
(b) 在280行至300行之間的嵌套for循環有什麼作用? (c) 考慮260行、280行及290行。300行會執行多少次? (d) 假設用戶把整數37、23、43、20、15順序輸入至程序中。 #define NUM 5 初始化 bin[i][j] 為0 (i) 當Pass = 1,每次剛執行完340行時Key之值為何?試填寫下表。 I Key 1 7 2 3 4 5 (ii) 當Pass = 1,下表顯示輸入的各整數在Bin中貯存的位置。試寫出程序在250行至550行之輸出。 3 5 輸入的整數 整數在Bin中貯存的位置 37 23 43 20 15 Bin[7][0] Bin[3][0] Bin[3][1] Bin[0][0] Bin[5][0] CS1999

7 (e) (i) 當Pass = 2,每次剛執行完350行時Key之值為何?試填寫下表。
1 2 3 4 5 (ii) 當Pass = 2,填寫下表以顯示輸入的各整數剛在520行之前在Bin中貯存的位置。 輸入的整數 整數在Bin中貯存的位置 37 23 43 20 15 4 1 3 20 23 43 15 37 Bin[2][0] Bin[2][1] Bin[4][0] Bin[1][0] Bin[3][0] (iii) 當Pass = 2, 寫出程序在520行至550行之輸出。 const int digit=3; switch (pass){ case 1: key=data[i]%10; break; case 2: key=data[i]/10%10; break; case 3: key=data[i]/100; break; } (f) 建議如何修改此程序, 使此算法可將三位正整數排序。 CS1999

8 Q3 彼得以C語言編寫一電腦遊戲程序。此遊戲的規格說明如下: I 此遊戲由玩者和電腦對奕。 II 此遊戲使用六個圍成一個圈的格子,
分別稱為box[1]、box[2]、box[3]、box[4]、box[5]、box[6] III 開始遊戲時,每個格都有一數值2。 IV 遊戲由玩者開始。玩者和電腦輪流擲骰。 每次擲出的隨機數n會根據下列規則用來更新某些格子之值: 規則甲:box n之值會增加2。 規則乙:旁邊兩格之值會各減少1。 III 若擲骰後有任何格子之值變為負數,則對方勝。 n = rand()… x = n-1 y = n+1 n=1 2 box 2 box 3 box 6 box 5 box 4 box 1 例如: 如果n=3, 則box 3會加2, 而box 2和box 4會各自減1。 如果n=1, 則box 1會加2, 而box 2和box 6會各自減1, 餘此類推。 y=2 x=6 x=2 n=3 y=4 CS1999

9 輸出例二: 輸出例一: Box # : 1 2 3 4 5 6 Box # : 1 2 3 4 5 6
Value : 按任意鍵...擲骰 玩者擲了4. Value : 電腦擲了1. Value : 玩者擲了3. Value : 電腦擲了6. Value : Value : 電腦勝. 輸出例一: Box # : Value : 按任意鍵...擲骰 玩者擲了4. Value : 電腦擲了6. Value : 玩者擲了2. Value : Value : 玩者勝. CS1999

10 #include <stdio.h>
1 #include <stdio.h> 2 int box[7]; // 只用box[1]...box[6] 3 int n, turn; 4 main() { 變量 描述 box[] 貯存六個格子之值的陣列 turn 貯存輪到哪方的變量 (0=電腦; 1=玩者) n 貯存擲骰所得之值的變量 CS1999

11 (a) 試編寫一子程序init,對六個格子賦初始值。 (b) 試編寫一子程序rules,落實遊戲規格說明中的規則甲和規則乙。
void rules(int num) (c) 試編寫一子程序displaybox,以下面的格式顯示各個格子的內容: Box # : Value : X X X X X X 其中X為各格子中的值。 void displaybox() (d) 試編寫一子程序endgame,若任何一格子負值時回輸1,否則回輸0。 int endgame() (e) 使用(a)至(d)中的子程序編寫主程序。 CS1999

12 for(i=0;i<6;i++) box[i]=2; }
int box[6]; char turn[10]; void init(){ int i; srand(time(NULL)); for(i=0;i<6;i++) box[i]=2; } void applyRules(int n){ int x=n-1,y=n+1; if(x<0) x=5; if(y>5) y=0; box[x]--; box[n]+=2; box[y]--; } void displayBox(){ int i; printf("Box#: \n"); printf("Value"); for(i=0;i<6;i++) printf("%3d",box[i]); printf("\n"); } CS1999

13 if(box[i]<0) theEnd=1; return theEnd; }
int endGame(){ int i, theEnd=0; for(i=0;i<6;i++) if(box[i]<0) theEnd=1; return theEnd; } void changePlayer(){ if(strcmp(turn,"Player")==0) strcpy(turn,"Computer"); else strcpy(turn,"Player"); } CS1999

14 printf("\n%s rolls a %d.\n", turn,n); applyRules(n); changePlayer(); }
main(){ int n; init(); displayBox(); strcpy(turn,"Player"); while(!endGame()){ n = rand()%6; printf("\n%s rolls a %d.\n", turn,n); applyRules(n); changePlayer(); } printf("%s wins.\n",turn); if(strcmp(turn,"Player")==0){ printf("Press any key to roll the dice.\n"); getch(); } CS1999


Download ppt "Q1(a) 小偉打算編寫一個程序。該程序把兩個44的表內的數字相加。表3內的數字是由表1和表2應格子內的數字相加而成。例如:"

Similar presentations


Ads by Google