阿摩線上測驗 登入

申論題資訊

試卷:110年 - 110 關務特種考試_四等_資訊處理:程式設計概要#98238
科目:程式設計
年份:110年
排序:0

申論題內容

二、請問下列程式碼之輸出結果為何? 
608683960faca.jpg

詳解 (共 1 筆)

詳解 提供者:Triple w.
 

#include <stdio.h> #include <stdlib.h>

int function(int num);

int main() { int var1 = 1; int sum = 0; for (var1 = 1; var1 <= 9; var1++) { sum += function(var1); if (var1 == 3) { printf("output1:%d\n", function(var1)); } } printf("output2:%d", sum); return 0; }

int function(int input) { if (input == 9) return 1; return 2 * function(input + 1); }

我們可以看到,main 函數中有一個迴圈,var1 從1迭代到9。在每次迴圈中,它會呼叫 function(var1),並將結果加到 sum 變數中。此外,當 var1 等於3時,會輸出 function(var1) 的結果。迴圈結束後,會輸出 sum 的結果。

我們現在來分析 function(int input) 函數。這是一個遞迴函數:

c
 
int function(int input) { if (input == 9) return 1; return 2 * function(input + 1); }

當 input 等於9時,函數返回1。否則,它會返回 2 * function(input + 1)。

我們從 input = 1 開始計算遞迴:

  1. function(1):
    • 2 * function(2)
  2. function(2):
    • 2 * function(3)
  3. function(3):
    • 2 * function(4)
  4. function(4):
    • 2 * function(5)
  5. function(5):
    • 2 * function(6)
  6. function(6):
    • 2 * function(7)
  7. function(7):
    • 2 * function(8)
  8. function(8):
    • 2 * function(9)
  9. function(9):
    • 返回1

現在,我們可以往回推導出每個函數調用的結果:

  • function(9) = 1
  • function(8) = 2 * 1 = 2
  • function(7) = 2 * 2 = 4
  • function(6) = 2 * 4 = 8
  • function(5) = 2 * 8 = 16
  • function(4) = 2 * 16 = 32
  • function(3) = 2 * 32 = 64
  • function(2) = 2 * 64 = 128
  • function(1) = 2 * 128 = 256

因此,當 var1 等於3時,function(3) 的輸出是64。所以,output1 是64。

在整個迴圈中,sum 會累加這些值:

  • sum = 256 + 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 511

所以,最終的 output2 是511。

總結:

plaintext
 
output1:64 output2:511