資料處理 程設題型種類 - 考試
By Adele
at 2018-06-17T17:55
at 2018-06-17T17:55
Table of Contents
※ 引述《lensfill (undo)》之銘言:
: 輸入一個數字
: 解一個答案
: https://photos.app.goo.gl/rhQLYra1P2QJR6h8A
: 要怎樣思維關鍵在哪?
第一題的程式碼如下:
#include <stdio.h>
int bar(int value){
static int tmp=0;
tmp++;
value++;
return value + tmp;}
int main(void) {
int x=5;
printf("%d\n",bar(x));
printf("%d\n",bar(bar(x)));
}
說明:
bar 副程式的 tmp 為 static 型態,
也就是說 tmp 這一個變數要等程式結束後才會歸還記憶體。
printf("%d\n",bar(x)); ←印出7,說明如下
int bar(int value){ ←這裡的value帶入5
static int tmp=0;
tmp++; ←此時這裡的tmp是1 (後++)
value++; ←value是6
return value + tmp;←傳回7}
printf("%d\n",bar(bar(x)));←印出12,說明如下
先解內部的bar(x)
int bar(int value){ ←這裡的value帶入5
static int tmp=0; ←這裡的tmp是1
tmp++; ←此時這裡的tmp是2 (後++)
value++; ←value是6
return value + tmp;← 6+2 = 8 ,傳回8}
再算外部的bar(bar(x)),內部的bar(x)是8,
因此bar(bar(x))等同bar(8),
int bar(int value){ ←這裡的value帶入8
static int tmp=0; ←這裡的tmp是2
tmp++; ←此時這裡的tmp是3 (後++)
value++; ←value是9
return value + tmp;← 9+3=12, 傳回12}
第二題的程式碼如下:
(鍵盤輸入100)
#include <stdio.h>
int foo(int v)
{return (v/10+v%10);}
int main(void) {
int v1,v2;
scanf("%d",&v1);
v2=foo(foo(foo(v1)));
printf("%d\n",v2);
}
這一題的思維跟上一題一樣,
v2=foo(foo(foo(v1)));
printf("%d\n",v2);←印出 1 ,理由如下
先拆解,先解最內層的foo(v1),
最內層解完後再代入第二層的foo(),
第二層解完後再代入最外層的foo(),
最內層的foo(v1)
int foo(int v)←v代入100
{return (v/10+v%10);} ← 10+0 = 10,傳回 10
第二層的foo(10) ←將內部層的結果代入第二層
int foo(int v)←帶入10
{return (v/10+v%10);} ← 1+0 = 1,傳回 1
最外層的foo(1) ←將第二層的結果代入最外層
int foo(int v)←帶入1
{return (v/10+v%10);} ← 0+1 = 1,傳回 1
結論,只要拆開分析計算就很快解決了...
以上如果說明有誤,煩請各位先進留言補充,謝謝。
--
: 輸入一個數字
: 解一個答案
: https://photos.app.goo.gl/rhQLYra1P2QJR6h8A
: 要怎樣思維關鍵在哪?
第一題的程式碼如下:
#include <stdio.h>
int bar(int value){
static int tmp=0;
tmp++;
value++;
return value + tmp;}
int main(void) {
int x=5;
printf("%d\n",bar(x));
printf("%d\n",bar(bar(x)));
}
說明:
bar 副程式的 tmp 為 static 型態,
也就是說 tmp 這一個變數要等程式結束後才會歸還記憶體。
printf("%d\n",bar(x)); ←印出7,說明如下
int bar(int value){ ←這裡的value帶入5
static int tmp=0;
tmp++; ←此時這裡的tmp是1 (後++)
value++; ←value是6
return value + tmp;←傳回7}
printf("%d\n",bar(bar(x)));←印出12,說明如下
先解內部的bar(x)
int bar(int value){ ←這裡的value帶入5
static int tmp=0; ←這裡的tmp是1
tmp++; ←此時這裡的tmp是2 (後++)
value++; ←value是6
return value + tmp;← 6+2 = 8 ,傳回8}
再算外部的bar(bar(x)),內部的bar(x)是8,
因此bar(bar(x))等同bar(8),
int bar(int value){ ←這裡的value帶入8
static int tmp=0; ←這裡的tmp是2
tmp++; ←此時這裡的tmp是3 (後++)
value++; ←value是9
return value + tmp;← 9+3=12, 傳回12}
第二題的程式碼如下:
(鍵盤輸入100)
#include <stdio.h>
int foo(int v)
{return (v/10+v%10);}
int main(void) {
int v1,v2;
scanf("%d",&v1);
v2=foo(foo(foo(v1)));
printf("%d\n",v2);
}
這一題的思維跟上一題一樣,
v2=foo(foo(foo(v1)));
printf("%d\n",v2);←印出 1 ,理由如下
先拆解,先解最內層的foo(v1),
最內層解完後再代入第二層的foo(),
第二層解完後再代入最外層的foo(),
最內層的foo(v1)
int foo(int v)←v代入100
{return (v/10+v%10);} ← 10+0 = 10,傳回 10
第二層的foo(10) ←將內部層的結果代入第二層
int foo(int v)←帶入10
{return (v/10+v%10);} ← 1+0 = 1,傳回 1
最外層的foo(1) ←將第二層的結果代入最外層
int foo(int v)←帶入1
{return (v/10+v%10);} ← 0+1 = 1,傳回 1
結論,只要拆開分析計算就很快解決了...
以上如果說明有誤,煩請各位先進留言補充,謝謝。
--
Tags:
考試
All Comments
By Oscar
at 2018-06-21T15:18
at 2018-06-21T15:18
By Ula
at 2018-06-23T15:48
at 2018-06-23T15:48
By Frederic
at 2018-06-26T01:06
at 2018-06-26T01:06
By Charlie
at 2018-06-30T19:36
at 2018-06-30T19:36
By Jessica
at 2018-07-03T07:43
at 2018-07-03T07:43
By Sandy
at 2018-07-07T19:32
at 2018-07-07T19:32
Related Posts
三法修法
By Ida
at 2018-06-17T11:05
at 2018-06-17T11:05
梁傑普化2017-2018正課講義
By Eden
at 2018-06-17T01:12
at 2018-06-17T01:12
6/24高點會計師 稅法題庫班 即將開課!!
By Kama
at 2018-06-17T00:56
at 2018-06-17T00:56
交換-曾正生物學歷屆解析換英文歷屆試題解析
By Agatha
at 2018-06-16T17:57
at 2018-06-16T17:57
高醫生物生化推文討論區
By Harry
at 2018-06-16T17:46
at 2018-06-16T17:46