[語法] 呼叫函數

看板C_and_CPP (C/C++)作者 (隨機數能吃嗎?)時間16年前 (2009/05/03 06:42), 編輯推噓2(202)
留言4則, 3人參與, 最新討論串1/3 (看更多)
簡易流程圖 (迴圈) 做 5次←──┐  ↓ │ 呼叫lcga函數┘ ↓( 5次) 結束程式 ===========程式內容================== #include <stdio.h> void lcga(void) { static int Lcg_seed = 12345; int lcg_a,lcg_p; lcg_p = 2147483647; lcg_a = 16807; lcg_seed = (lcg_a*lcg_seed) % lcg_p; printf("%d\n", Lcg_seed); } int main(void) { int i; for(i=0; i<5;i++) lcga(); printf("%d\n", Lcg_seed); return 0; } ======================================== 刪除紅色那行,執行結果是 207482415 -356495447 -139599809 -1201846247 -198680241 ======================================== 而書上的範例是 ===============範例===================== int a =0; void func(void) { int b=0; static int c=0; printf("變數a為%d,變數b為%d,變數c為%d\n", a,b,c); a++; b++; c++; } int main(void) { int i; for (i=0;i<5;i++) func(); return 0; } ==============結果====================== a=0 b=0 c=0 a=1 b=0 c=1 a=2 b=0 c=2 … ======================================== 我仿書上把lcg_seed在全區宣告,但是不知道為什麼 呼叫lcga,在lcga列印lcg_seed是 0;在main列印lcg_seed是12345不會變 所以試著用 static ,結果可以,但是變得無法在main print....(紅色那行) 另外,我的程式中 lcg_seed = (lcg_a*lcg_seed) % lcg_p; 照道理來講,求出來的餘數應該永遠是正的 怎麼會出現負的答案呢...~.~?? 我用Maple程式去跑答案,只有第一個答案是正確的,之後沒有一個正確 程式哪裡有問題呢?? ======================================== 另外 int main(void) { unif01_Gen *gen; gen = ulcg_CreateLcg (2147483647, 397204094, 0, 12345); retuen 0 } 我執行過相同的 ulcg_CreateLcg函數(包含後方的參數) 它能產生不同的數字 我該如何 寫出像這樣的函數呢? 是否直接用.txt寫好,存成.c 就可以用#include "lcga.c"呼叫了呢? 感恩 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.195.128.31 ※ 編輯: chrisjon 來自: 123.195.128.31 (05/03 06:53)

05/03 08:45, , 1F
lcg_seed有給初始值嗎?
05/03 08:45, 1F

05/03 12:54, , 2F
主程式本來就沒辦法呼叫function裡面宣告的靜態變數吧?
05/03 12:54, 2F

05/03 12:55, , 3F
還是可以...
05/03 12:55, 3F

05/03 15:06, , 4F
在static已經宣告為12345了
05/03 15:06, 4F
文章代碼(AID): #19_CnjGK (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 1 之 3 篇):
2
4
文章代碼(AID): #19_CnjGK (C_and_CPP)