#include <stdio.h>
void f1(int *, int);
void (*p[2])(int *, int);
int main(void)
{
int a = 0, b = 0;
p[0] = f1;
p[1] = f1;
a = 5;
b = 10;
p[0](&a, b);
printf("%d\t %d\t", a, b);
p[1](&a, b);
printf("%d\t %d\t", a, b);
return 0;
}
void f1(int *p, int q) {
int tmp = 0;
tmp = *p;
*p = q;
q = tmp;
return;
}
Answer: 這一題是在測驗C語言中,Call by Value和Call by Reference的觀念;在這一道題目中要注意到:b傳進去的"值"是5,但儲存'b'此一變數的記憶體位址裡的"值"並未被改變,所以b的值永遠不會被改變。結果為:10 10 10 10
5. 寫出主程式的輸出為何??
#include <stdio.h>
void foo(int);
int main(void)
{
int a = 3;
foo(a);
return 0;
}
void foo(int n) {
if (n > 0) {
foo(--n);
printf("%d \n", n);
foo(n--);
}
printf("\n");
return;
}
Answer: 說真的,個人覺得這一題很無聊,居然在測驗遞迴 (Recursive)?? 記得以前學生時代,老師有教過寫程式時,盡量少用遞迴和goto (goto就是會在程式中跳來跳去),因為會增加debug的困難‧遞迴只應天上有,人間應當用迴圈....@@6. 寫出主程式的輸出為何??
#include <stdio.h>
void foo(int *, int, int);
int main(void)
{
int i = 0, j = 0, n = 10, b[10] = {4, 7, 1, 5, 15, 12, 9, 6, 3, 8};
n--;
for (i = (n - 1) / 2; i >= 0; i--)
foo(b, i, n);
for (j = 0; j < 10; j++)
printf("%d\t", b[j]);
printf("\n");
return 0;
}
void foo(int *a, int r, int n) {
int k = a[r], j = 0;
for (j = 2 * r + 1; j <= n; j = j * 2 + 1) {
if ( j < n ) {
if ( a[j + 1] > a[j] )
j++;
}
if ( k >= a[j] )
break;
a[(j - 1) / 2] = a[j];
}
a[(j - 1) / 2] = k;
return;
}
Answer: 這一題更無聊!! 在測驗你的數學邏輯觀念!! 直接把源代碼Copy-Paste到開發環境上執行一次不就可以知道答案了??相關文章:C語言測驗 (1)
(To be continue....)
沒有留言:
張貼留言