111年地方特考三等程式設計

一、有關 C 程式設計,回答下列問題:

    ()下列程式執行結果為何?(13分)

        pic01.png

    ()下列程式執行結果為何?(10分)

        pic02.png

答:

()

#include <stdio.h>

int func1(int a, int b) {

    printf("%3d %3d\n", a, b);

    if (b == 0) return a;

    else if (a%2 && b%2)

        return func1((a+b)/2, (a-b)/2);

    else if (a%2 && !b%2)

        return func1(a, b/2);

    else if (!a%2 && b%2)

        return func1(a/2, b);

    else

        return 2*func1(a/2, b/2);

}

int main(void) {

    int x = 19, y = 2;

    printf("%3d", func1(x, y));

}

執行結果:

 19   2

  9   1

  5   4

  2   2

  1   1

  1   0

  8

說明:

print 19 2

func1(19, 2)

19%2 = 9 … 1, 2%2 = 1 … 0

2*func1(a/2, b/2) = 2*func1(19/2, 2/2) = 2*func1(9, 1)

print 9 1

9%2 = 4 … 1, 1%2 = 0 … 1

func1((a+b)/2, (a-b)/2) = func1((9+1)/2, (9-1)/2) = func1(5, 4)

print 5 4

5%2 = 2 … 1, 4%2 = 2 … 0

2*func1(a/2, b/2) = 2*func1(5/2, 4/2) = 2*func1(2, 2)

print 2 2

2%2 = 1 … 0, 2%2 = 1 … 0

2*func1(a/2, b/2) = 2*func1(2/2, 2/2) = 2*func1(1, 1)

print 1 1

1%2 = 0 … 1, 1%2 = 0 … 1

func1((1+1)/2, (1-1)/2) = func1(1, 0)

print 1 0

return 1

2*2*2 = 8

print 8

()

#include <stdio.h>

#include <stdbool.h>

int func2(int A[ ], int x, int y) {

    if (x > y) return false;

    else {

        int m = (x+y)/2;

        printf("%3d %3d %3d\n", x, m, y);

        if (A[m] == m) return true;

        else if (A[m] > m) return func2(A, x, m-1);

        else return func2(A, m+1, y);

    }

}

int main(void) {

    int a[ ] = {35, 60, 45, 7, 10, 22, 2, 50, 14, 3, 66};

    printf("%3d", func2(a, 1, 10));

}

執行結果:

  1   5  10

  1   2   4

  1   1   1

  0

說明:

func2(int A[ ], int x, int y) = func2(a, 1, 10)

x < y 1 < 10

m = (x+y)/2 = (1+10)/2 = 5

printf("%3d %3d %3d", x, m, y)

print 1 5 10

A[m] = A[5] = 22

A[m] > m 22 > 5

func2(A, x, m-1) = func2(A, 1, 4)

func2(int A[ ], int x, int y) = func2(a, 1, 4)

x < y 1 < 4

m = (1+4)/2 = (1+4)/2 = 2

printf("%3d %3d %3d", x, m, y)

print 1 2 4

A[m] = A[2] = 45

A[m] > m 45 > 2

func2(A, x, m-1) = func2(A, 1, 1)

func2(int A[ ], int x, int y) = func2(a, 1, 1)

x == y 1 == 1

m = (x+y)/2 = (1+1)/2 = 1

printf("%3d %3d %3d", x, m, y)

print 1 1 1

A[m] = A[1] = 35

A[m] > m 35 > 1

func2(A, x, m-1) = func2(A, 1, 0)

func2(int A[ ], int x, int y) = func2(a, 1, 0)

x > y 1 > 0

return false

arrow
arrow
    文章標籤
    111年地方特考三等程式設計
    全站熱搜

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