Board logo

標題: 2022/04/02 作業練習 [打印本頁]

作者: ray    時間: 2022-4-2 12:27     標題: 2022/04/02 作業練習

本帖最後由 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.         }
作者: 劉愷恩    時間: 2022-4-2 15:51

此帖僅作者可見
作者: 李知易    時間: 2022-4-2 19:27

此帖僅作者可見
作者: ray    時間: 2022-4-2 20:19

此帖僅作者可見




歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://seed.istak.org.tw/) Powered by Discuz! 7.2