Re: [語法] 呼叫函數
看板C_and_CPP (C/C++)作者littleshan (我要加入劍道社!)時間16年前 (2009/05/03 10:45)推噓1(1推 0噓 18→)留言19則, 4人參與討論串2/3 (看更多)
※ 引述《chrisjon (隨機數能吃嗎?)》之銘言:
: ===========程式內容==================
: #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);
寫程式不要這樣縮排,很容易以為你的 printf 也是迴圈的一部份
一般的良好寫法是這樣:
for(i = 0; i < 5; i++)
lcga();
printf("%d\n", Lcg_seed);
: return 0;
: }
[deleted]
: 我仿書上把lcg_seed在全區宣告,但是不知道為什麼
: 呼叫lcga,在lcga列印lcg_seed是 0;在main列印lcg_seed是12345不會變
: 所以試著用 static ,結果可以,但是變得無法在main print....(紅色那行)
應該是其它地方寫錯了,請附上完整程式碼
: 另外,我的程式中
: lcg_seed = (lcg_a*lcg_seed) % lcg_p;
: 照道理來講,求出來的餘數應該永遠是正的
: 怎麼會出現負的答案呢...~.~??
: 我用Maple程式去跑答案,只有第一個答案是正確的,之後沒有一個正確
: 程式哪裡有問題呢??
因為 int 一般來說大小為 32bit 儲存範圍是 -2147483648 ~ 2147483647
你的計算已經超過了它的範圍,當然會得到錯誤的結果
C99 的標準有提供 64bit 的整數型別 int64_t
如果你的 compiler 有支援,這是最簡單的解決方法
: ========================================
: 另外
: int main(void)
: {
: unif01_Gen *gen;
: gen = ulcg_CreateLcg (2147483647, 397204094, 0, 12345);
: retuen 0
: }
: 我執行過相同的 ulcg_CreateLcg函數(包含後方的參數)
: 它能產生不同的數字
: 我該如何 寫出像這樣的函數呢?
它可能用了 64bit 整數
或是自己去處理大數運算
: 是否直接用.txt寫好,存成.c 就可以用#include "lcga.c"呼叫了呢?
: 感恩
不行,這不是正確用法。
正確的方法是把函式的宣告寫在 .h 內,函式的實作寫在 .c 內,
然後讓你的主程式去連結函式的實作
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.217.34.43
推
05/03 15:09, , 1F
05/03 15:09, 1F
→
05/03 15:20, , 2F
05/03 15:20, 2F
→
05/03 15:33, , 3F
05/03 15:33, 3F
→
05/03 15:34, , 4F
05/03 15:34, 4F
→
05/03 15:35, , 5F
05/03 15:35, 5F
→
05/03 15:39, , 6F
05/03 15:39, 6F
→
05/03 15:40, , 7F
05/03 15:40, 7F
→
05/03 16:14, , 8F
05/03 16:14, 8F
→
05/03 16:18, , 9F
05/03 16:18, 9F
→
05/03 16:19, , 10F
05/03 16:19, 10F
→
05/03 16:20, , 11F
05/03 16:20, 11F
→
05/03 16:20, , 12F
05/03 16:20, 12F
→
05/03 16:21, , 13F
05/03 16:21, 13F
→
05/03 16:23, , 14F
05/03 16:23, 14F
→
05/03 16:24, , 15F
05/03 16:24, 15F
→
05/03 16:24, , 16F
05/03 16:24, 16F
→
05/03 16:25, , 17F
05/03 16:25, 17F
→
05/03 16:26, , 18F
05/03 16:26, 18F
→
05/04 12:00, , 19F
05/04 12:00, 19F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章