免費開始練習
地特四等申論題 111年 [資訊處理] 程式設計概要

第 三 題

針對以下 C 程式,其輸出為下列表格,說明 compress 函式的功能,並完
成程式碼(I)、(II)、(III)、(IV),使之執行正確。(25 分)
程式輸出
2 4
6 5
2 4 6
6 5 4
1 4 8
3 5
4 6

#include
#define SIZE 10
int op(int data[][SIZE], int x, int y, int n) {
int value = 0;
for (int i = x; i < x+n; i++)
for (int j = y; j < y+n; j++)
value = value + data[i][j];
return value/(n*n);
}
void print(int target[][SIZE], int size) {
for (int x = 0; x < size; x++) {
for (int y = 0; y < size; y++)
printf("%d ", target[x][y]);
printf("\n");
}
}
void compress(int data[][SIZE], int (I) [][SIZE],
int size, int n) {
int cSize = (II) ;
for (int x=0; x< cSize; x++)
for (int y=0; ytarget (III) =op(data, x*n, y*n, n);
(IV) (target, cSize);
}
int main() {
int data[][SIZE] = {{1, 2, 3, 4, 5, 6},
{3, 4, 5, 6, 7, 8},
{5, 6, 1, 2, 3, 4},
{7, 7, 9, 9, 5, 5},
{2, 2, 4, 4, 8, 8},
{1, 1, 5, 5, 9, 9}};
int target[SIZE][SIZE];
compress(data, target, 4, 2);
compress(data, target, 6, 2);
compress(data, target, 6, 3);
return 0;
}
📝 此題為申論題

思路引導 VIP

本題主要測驗陣列操作與函式呼叫的理解。解題時請先從 main 函式的呼叫與程式輸出結果反推,觀察 compressop 的數學關係,即可得知這是在實作「二維陣列的區塊平均(Average Pooling)」。接著透過變數名稱與上下文(如宣告、迴圈索引),就能精準填出對應的語法與變數。

🤖
AI 詳解 AI 專屬家教

【破題】 本題測驗二維陣列的參數傳遞、迴圈控制以及模組化函式呼叫。透過分析 op 函式的邏輯與 main 中的呼叫,可知這是一個實作「矩陣區塊平均壓縮(Average Pooling)」的程式。 【論述】

▼ 還有更多解析內容

🏷️ 相關主題

C/C++ 程式設計:語法、指標與記憶體管理
查看更多「[資訊處理] 程式設計概要」的主題分類考古題