阿摩線上測驗 登入

申論題資訊

試卷:99年 - 四等資訊處理_程式設計概要#12246
科目:程式設計
年份:99年
排序:0

申論題內容

二、請回答下列C語言程式問題: (一)定義函式int foo(int x) { x *= 2; return x;}。請問int x = 6; printf(“%d\n”, foo(x) + foo(x)); 輸出為何?(5分) (二)請問下列程式的輸出為何?(5分) void sp(int value) { if(value / 10) { printf("%d\n", value % 10); sp(value / 10); }else { printf("%d\n", value); } } void main() {sp(728); }

詳解 (共 2 筆)

詳解 提供者:Angus Yang
(一) 24
(二)8
2
詳解 提供者:hchungw

int foo(int x) 函數會將其參數 x 的值乘以2然後返回。當 foo 被呼叫兩次並且結果被相加時,需要注意的是C語言中函數參數的求值順序是未定義的,意味著 foo(x) 中的 x 可能在第一次呼叫之前或之後被求值。但由於每次呼叫 foo 都是傳值呼叫,並且原始的 x 值並沒有在 foo 中被改變,因此每次呼叫 foo 都會用 x 的原始值6進行計算。

 

int foo(int x) { x *= 2; return x; }

// ...

int x = 6; printf(“%d\n”, foo(x) + foo(x));

所以, foo(x) 每次呼叫都會返回 12(6 * 2),並且 foo(x) + foo(x) 的結果會是 24(12 + 12)。

(二) 函數 sp 是一個遞迴函數,它先打印出一個整數值的最後一位數字(value % 10),然後再遞迴調用自己,除以10的結果(value / 10)。

給定 sp(728); 的呼叫,以下是函數的行為:

  • sp(728) 會先打印 8 然後遞迴呼叫 sp(72)
  • sp(72) 會打印 2 然後遞迴呼叫 sp(7)
  • sp(7) 會打印 7 然後因為 value / 10 的結果為0,所以不會進行更多遞迴呼叫

因此,該程序的輸出將會是:

Copy code
8 2 7

這就是在給定的問題中C語言程式的輸出。