107年地方特考四等程式設計概要

三、請用下列程式回答下列問題。(每小題5分,共25分)

()num[ ] 一維陣列最多可儲存幾個正整數?

()若依序輸入1, 2, 3, …, 99, 0,請說明 num[0] 值為何。

()若依序輸入99, 98, …, 2, 1, 0,請說明 num[0] 值為何。

()輸入99個亂數產生的正整數後再輸入0,請說明 num[0] 值為何。

()請說明 reorder( ) 遞迴函數的功用為何。

int num[100] = {0};

int n = 0;

void reorder(int k) {

int temp;

if((k != 0) && (books[k] > books[k/2])) {

temp = books[k]; books[k] = books[k/2]; books[k/2] = temp;

reorder(k/2);

}

}

int main( ) {

int i = 0;

scanf (“%d”, &num[i]);

while (i != 0) {

reorder(i);

i = i+1;

scanf (“%d”, &num[i]);

}

}

答:

題目有誤,reorder( ) 函式中 books 陣列應該改為 num 陣列。

#include <stdio.h>

int num[100] = {0};

int count = 0; // 用來記錄已輸入的數量

void printData( ) {

    for (int i = 0; i <= count; i++) {

        printf("%d, ", num[i]);

    }

    printf("\n");

}

void reorder(int k) {

    int temp;

    printData( );

    if ((k != 0) && (num[k] > num[k / 2])) {

        temp = num[k];

        num[k] = num[k / 2];

        num[k / 2] = temp;

        reorder(k / 2);

    }

}

int main() {

    int i = 0;

    scanf_s("%d", &num[i]);

    while (num[i] != 0) {

        reorder(i);

        i = i + 1;

        count = i;

        scanf_s("%d", &num[i]);

    }

    return 0;

}

執行結果:

5

5,

12

5, 12,

12, 5,

3

12, 5, 3,

15

12, 5, 3, 15,

12, 15, 3, 5,

15, 12, 3, 5,

7

15, 12, 3, 5, 7,

15, 12, 7, 5, 3,

8

15, 12, 7, 5, 3, 8,

15, 12, 8, 5, 3, 7,

0

()num[ ]一維陣列最多可儲存幾個正整數?

num 陣列是定義為 int num[100]。因此,最多可以儲存100個正整數。

()若依序輸入1, 2, 3, …, 99, 0,請說明num[0]值為何。

每當輸入一個新的數字時,reorder 函數會被呼叫以確保陣列保持在一種特定的順序。從程式的邏輯來看,reorder 函數的作用是確保陣列成為一個最大堆積,也就是每個元素都比其子節點大。因此,每當輸入一個新的數字,如果它比它的父節點大,它就會向上移動。給定輸入1, 2, 3, , 99, 0num[0] 會是最大的數字,即99

()若依序輸入99, 98, …, 2, 1, 0,請說明num[0]值為何。

因為第一個輸入值是 99,它將被放在 num[0]。但後續的數字都比99小,所以 num[0] 不會改變。因此,給定輸入99, 98, , 2, 1, 0num[0] 的值會是99

()輸入99個亂數產生的正整數後再輸入0,請說明 num[0] 值為何。

reorder( ) 函數確保 num[ ] 陣列維持為最大堆積的結構,這意味著 num[0] 始終儲存當前輸入的最大數字。

()請說明 reorder( ) 遞迴函數的功用為何。

reorder( ) 函數的主要目的是保持陣列的結構為最大堆積。當一個新的數字被加入到陣列時,這個函數確保該數字在陣列中的正確位置,使得父節點的值始終大於或等於子節點的值。如果當前節點的值大於其父節點的值,它們會交換,然後函數遞迴地檢查新的父節點,直到整個陣列成為一個最大堆積或直到當前節點不再大於其父節點。

arrow
arrow
    文章標籤
    地方特考四等程式設計概要
    全站熱搜
    創作者介紹
    創作者 jacksaleok 的頭像
    jacksaleok

    國考資訊處理工作室(高考二級資訊處理/高考三級資訊處理/調查局三等/關務人員三等/地方特考三等)

    jacksaleok 發表在 痞客邦 留言(0) 人氣()