本帖最後由 ray 於 2022-4-2 12:35 編輯
(1)
下列程式輸出為何?
void foo (int i){
if (i <= 8) {
printf ("foo: %d\n", i);
}
else{
bar(i - 12);
}
}
void bar (int i){
if (i <= 12) {
printf ("bar: %d\n", i);
}
else {
foo(i - 8);
}
}
void main(){
foo(14107);
bar(2083);
foo(5582);
}
-------------------------------------------------------------------------------------------------
(2)
定義 a[n] 為一陣列(array),陣列元素的指標為0 至n-1。若要將陣列中a[n-1]的元素移到a[0],程式片段空白處該填入何運算?
int i, temp, n;
…
for (i=n-1; i>=____; i=i-1) {
temp = a;
a = a[i-1];
a[i-1] =temp;
}
-------------------------------------------------------------------------------------------------
(3)
給定右側函式 f1() 及 f2()。f1(3)運算過程中,以下敘述哪些是對的?
void f1 (int m){
if (m <2) {
printf ("%d\n", m);
return;
}
else {
printf ("%d\n", m);
f2(m+1);
printf ("%d\n", m);
}
}
void f2 (int n){
if (n<2){
printf ("%d\n", n);
return;
}
else {
printf ("%d\n", n);
f1(n-2);
printf ("%d\n", n);
}
}
(A) 印出的數字最小的是0
(B) f1 一共被呼叫3次
(C) f2 一共被呼叫2次
(D) 最後印出的數字是2
-------------------------------------------------------------------------------------------------
(4)
程式片段擬以輾轉除法求 i 與 j 的最大公因數。請問while 迴圈內容何者正確?
x = 46;
y= 28;
while (x % y) != 0) {
z=x%y;
(a)________________
(b)________________
}
printf ("%d\n", y);
答案:
(a)_____________ (b)_______________
-------------------------------------------------------------------------------------------------
(5)
若以f(20)呼叫f()函式,總共會印出哪些數字?
1. void f(int n)
2. {
3. printf (“%d\n”, n);//印出n
4. while (n != 1)//進入迴圈
5. {
6. if ((n%2)==1)//若n是奇數
7. {
8. n = 3*n-3;
9. }
10. else
11. {
12. n = n / 2-2;//若n是偶數
if(n<0)
n = 3;
13. }
14. printf ("%d\n", n);
15. }
16. }
-------------------------------------------------------------------------------------------------
(6)
1. void main (){
2. int count = 5;
3. if (count > 1){
4. count = 6;
5. }
6. if (count > 2){
7. count = 8;
8. if (count % 4== 3){
9. count = 0;
10. }
11. else{
12. count = 1;
13. }
14. }
15. else if (count > 5){
16. count = 7;
17. }else{
18. count = 9;
19. }
20. if (count){
21. count = 3;
22. }else{
23. count = 2;
24. }
25. printf ("%d\n", count);
26. }
下列程式執行時,哪幾行不會被執行到?
最後執行結果是多少?
-------------------------------------------------------------------------------------------------
(7)
#define TRUE 1 //指定用TRUE表示1
#define FALSE 0 //指定用FALSE表示0
int d[6], val, allBig;
…
scanf (“%d”, &val); //輸入第1個整數val
for (int i=1; i<=5; i=i+1){ //輸入5個整數
scanf (“%d”, &d);
}
allBig = TRUE;
For (int i=1; i<=5; i=i+1){
if (val> d) {
allBig = TRUE;
} else {
allBig = FALSE;
}
}
if (allBig == TRUE){
printf ("%d is the biggest.\n", val);
}else{
printf ("%d is not the biggest.\n", val);
}
程式片段主要功能為:輸入六個整數,檢測並印出最前一個數字是否為六個數字中最大的值。然而,這個程式是錯誤的。
Q1以下哪一組測試資料可以測試出程式有誤?
(A) 21 12 13 14 15 3
(B) 26 12 13 14 25 20
(C) 23 15 18 20 11 12
(D) 21 17 19 24 15 16
Q2這個程式犯了什麼錯誤?
-------------------------------------------------------------------------------------------------
(8)會被程式編譯器,發現的是哪一種錯誤?
-------------------------------------------------------------------------------------------------
(9)
大部分程式語言都是以列為主的方式儲存陣列。在一個6x5 的陣列(array) A 裡,若每個元素需要兩單位的記憶體大小,且若A[0][0]的記憶體位址為 108
(十進制表示),則A[2][1]的記憶體位為何?請畫出陣列圖再作答
-------------------------------------------------------------------------------------------------
(10)
下列為一個計算n 階層的函式,請問該如何修改才會得到正確的結果?
1. int fun (int n) {
2. int fac = 1;
3. if (n >= 1) {
4. fac = n * fun(n+1);
5. }
6. return fac;
1. } |