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
Post a Comment