implement a SwapAndAdd function exam questions

 以下的 C 程式碼需要實作一個 SwapAndAdd function。SwapAndAdd()要達成

的功能是交換兩個變數,然後建立一個新的整數變數,將兩個變數相加存在該變數

之後,回傳新的變數位址讓呼叫端來使用。以下的 main()顯示如何使用這個

SwapAndAdd() function。

int main() {

int x, y, *result ;

x = 100 ;

y = 50 ;

result= SwapAndAdd(......);

// 請填寫參數 x,y 應如何傳遞來使用 SwapAndAdd

printf(“%d %d %d”, x, y,(*result));

}

在這個 main()中,我們會將 x,y 變數作為參數傳到 SwapAndAdd()。如果

SwapAndAdd()實作正確,這個 main()會印出

50 100 150

請以 C 語言完成 SwapAndAdd()的程式碼,並且將 main()當中的呼叫參數填入。(25 分

我的回答

函式使用堆疊動態變數(stack dynamic variable),會自動分配或釋放其區域變數記憶體。所以不能使用堆疊動態變數來儲存運算結果,可以用靜態變數(static variable)或者外顯堆積動態變數(explicit heap dynamic variable)。

下列程式碼運行在Online C Compiler - online editor (onlinegdb.com)

(一)使用靜態變數

靜態變數的特性為程式預先指派變數記憶體,在程式結束後才釋放記憶體。優點是可以在函式之間保留狀態,缺點是可能占用記憶體。

#include <stdio.h>

int* SwapAndAdd(int * x, int* y){

    int t=0;

    t=*x;

    *x=*y;

    *y=t;

    static int r=0;

    r=*x+*y;

    return &r;

}

int main() {

int x, y, *result ;

x = 100 ;

y = 50 ;

result= SwapAndAdd(&x,&y);

// 請填寫參數 x,y 應如何傳遞來使用 SwapAndAdd

printf("%d %d %d", x, y,(*result));

}


(二)使用外顯堆積動態變數

開發者可以手動分配記憶體與釋放記憶體。優點:使用記憶體具備彈性,缺點:記憶體使用不當,可能造成記憶體洩漏或記憶體提早釋放的問題。要使用malloc需要#include <stdlib.h>

#include <stdio.h>

#include <stdlib.h>

int* SwapAndAdd(int * x, int* y){

    int t=0;

    t=*x;

    *x=*y;

    *y=t;

    int* r=(int*)malloc(sizeof(int));

    *r=*x+*y;

    return r;

}

int main() {

int x, y, *result ;

x = 100 ;

y = 50 ;

result= SwapAndAdd(&x,&y);

// 請填寫參數 x,y 應如何傳遞來使用 SwapAndAdd

printf("%d %d %d", x, y,(*result));

}


chatgpt的回答

以下是 C 語言中 SwapAndAdd 函數的程式碼,並且將 main 函數中的呼叫參數填入:


```c

#include <stdio.h>


int* SwapAndAdd(int* a, int* b) {

    int temp = *a;

    *a = *b;

    *b = temp;


    int* result = (int*)malloc(sizeof(int));

    *result = *a + *b;

    

    return result;

}


int main() {

    int x, y, *result;

    x = 100;

    y = 50;

    

    result = SwapAndAdd(&y, &x);  // 注意 x 和 y 的順序交換

    printf("%d %d %d", y, x, (*result));

    free(result);


    return 0;

}

```


這個程式中,SwapAndAdd 函數接受兩個指向整數的指針,然後進行 x 和 y 的交換,並建立一個新的整數變數 result,將 x 和 y 相加的結果存入 result 中。最後,該函數返回 result 的指針。在 main 函數中,我們將 y 和 x 的地址傳遞給 SwapAndAdd 函數,以達到交換並相加的效果。


Comments

Popular posts from this blog

How to write data into a excel file using vbscript

Format date as yyyy-mm-dd using vbscript