很多人認為c語言是一門很深奧很複雜很不容易學習的計算機程式語言,尤其看到他大面積的程式設計**,很快就為之卻步了,但是對我來說,說c語言深奧我覺得我認同,但是複雜和不容易學的部分我覺得就是需要一些技巧了。
c語言入門
才剛剛開始不要緊,不要認為學c就要很多的數學知識!
最要緊的,你要明白c語言是多麼的好玩.
跟著下面的例子,你寫完後會很有成就感.以後學起來就輕鬆了.
我們現在來做乙個《猜數字》遊戲...
遊戲規則參照文曲星裡的猜數字:
輸入四入不重複的數字(中間用空格隔開)按《回車》後結果顯示在後邊,
形式為 " ? a ? b", 四個數中位置和數字都正確為 a,數字相同位置不同為 b,
當 4 a 0 b 時為猜對,每一局有8次機會.
如:原四個數為1234,則
1234 4 a 0 b
5678 0 a 0 b 沒有乙個對.
1243 2 a 2 b 3,4雖對但位置錯.
明白了規則後,下手就容易了,也許你還沒頭緒,沒關係,一步一步來.
1.首先明白自己的遊戲要做什麼?
由玩家輸入四個數字,驗證這四個數和正確答案的關係,提供乙個" x a x b"的
提示給玩家,再輸入...直至玩家猜對或到達八次.
2.遊戲需要什麼資源?
這個遊戲並不需要什麼特別的,只要乙個printf,和scanf獲得輸入.
所以程式開頭:
#include
加入標準輸入輸出,沒有它turbo c不知道printf和scanf在哪來.
好,程式設計開始...
main()
先把這個函式寫下來,這個叫主函式,乙個程式就只有乙個,也稱為程式入口函式,
你的程式就是從這裡開始執行的.(是不是有點廢話?)
(以下操作都在main()中)
設定四個變數儲存正確答案:(也可以結個初值)
int a1,a2,a3,a4;
再設定四個變數諸存玩家的輸入:
int b1,b2,b3,b4;
設定乙個變數諸存猜的次數並賦初值:
int n = 0;
設定兩個變數諸存結果a,b的個數:
int ca,cb;
準備工作完成,設定正確答案:
a1 = 3;
a2 = 5;
a3 = 9;
a4 = 7;
(當然你會抱怨正確答案是固定的,不要緊,下面會告訴你怎麼產生隨機的效果,慢慢來.)
仔細想一想整個遊戲流程...
大概是這樣的:
迴圈執行:
輸入;
對比正確答案;
輸出提示;
判斷是否猜對;
是:顯示勝利並退出迴圈,否:不理會;
次數加1;
判斷次數是否超出;
是:顯示失敗並退出迴圈;
迴圈結束;
那麼,為了更容易理解,我們使用死迴圈,但要注意一點:裡面必須有使迴圈結束的語句!
break;就是這個語句.
那麼:
while(1)
就寫下吧.while(xx)是這樣工作的:
xx是不是0 (真)
不是:
執行 yyyy
是:退出迴圈
再檢查xx是不是不為0
不過你必須明確:break;會強制退出迴圈.
好,就這樣:
printf("\n\t guess numbers!\n\n"); /*列印一點提示資訊*/
while(1)
/*次數加一*/
n++;
/*判斷次數*/
if(n > 7) }
整個遊戲過程完成.
整理一下:
/*guess.c*/
#include
main()
n++;
if(n > 7) }
} 這樣乙個簡單的猜數字遊戲就做成了.
不過你可能得意不起來,因為這樣規定正確答案實在不能算個遊戲,你說呢?
另外,我們還需驗證玩家的輸入是不是符合規定的"不重複"和"不出界".
於是我們來給這個遊戲潤色潤色.
(以下部分要多一點c語言知識,如簡單陣列)
第一:取得隨機的不重複的答案.
c語言標準函式庫stdlib裡有兩個預定義的函式:
randomize() 復位隨機發生器.
int random(num) 生成乙個0到num-1的隨機數.
好,說幹就幹!
可問題就來了,要怎麼產生呢?
我們不能保證隨機產生的四個數都不同啊?
不過你可能會想,每次都隨機產生乙個數直至與現有的不同,不就可以了麼?
這的確是個不錯的想法,用在這裡是不會產生問題的.
不過這種想法不符合程式設計的思想...我們無法確定這個過程在什麼時候完成,
因為有可能三分鐘內沒有"生"出與其它不同的數,雖然可能性近乎不可能...
另外,如果要在1億個數中挑出5000萬個,怎麼辦?顯然這是不可行的...
下面演示了乙個新的演算法:
1.建立乙個諸存著0,1,2,...,9的陣列.(10個元素)
2.打散這個數.
3.取陣列的前四個(其它的也可以,不過是固定的)
打散陣列可以這樣表達:
隨機取得陣列的兩個位置,然後交換.當然做一兩次效果不明顯,我們讓它做500次或更多
就"看起來很無規律"了.
下面是**:
#include /*要用到隨機發生函式*/
在main()裡:
int arr[10]=
a1=arr[0];
a2=arr[1];
a3=arr[2];
a4=arr[3]; /*取出前四個作為問題的答案,當然不一定前四個*/
下面解決玩家的"不守規距"問題.
玩家的輸入有時是不可預料的,也就是說,我們必須檢測並在有錯時讓玩家重輸.
重輸的話,超過這重迴圈,直接進入下一層迴圈而不往下執行 就行了,因為我們用的是死迴圈.
他再怎麼錯都不怕迴圈會用完,並且次數本身不會被改.
首先,在玩家輸入之前給b1~b4,重新賦值,使其不合法.
b1=11;
b2=11;
b3=11;
b4=11;
在玩家輸入之後:
(這裡又要用到窮舉法了,當然還有其它的方法,自己想)
if(b1==b2 || b1==b3 || b1==b4 || b2==b3 || b2==b4 || b3==b4)
if(b1<0 || b1>9 || b2<0 || b2>9 || b3<0 || b3>9 || b4<0 || b4>9)
這樣的話,我們的**就這樣了:
/*guess.c*/
#include
#include
main();
int i,index1,index2;
int temp;
randomize();
for(i=0;i<500;i++)
a1=arr[0];
a2=arr[1];
a3=arr[2];
a4=arr[3];
printf("\n\t guess numbers!\n\n");
while(1)
if(b1<0 || b1>9 || b2<0 || b2>9 || b3<0 || b3>9 || b4<0 || b4>9)
ca=0;
cb=0;
if(a1 == b1) ca++;
if(a2 == b2) ca++;
if(a3 == b3) ca++;
if(a4 == b4) ca++;
if(a1 == b2 || a1 == b3 || a1 == b4) cb++;
if(a2 == b1 || a2 == b3 || a2 == b4) cb++;
if(a3 == b1 || a3 == b2 || a3 == b4) cb++;
if(a4 == b1 || a4 == b2 || a4 == b3) cb++;
printf("\t\t%d a %d b\n",ca,cb);
if(ca == 4)
n++;
if(n > 7) }
} 終於有點規模了...
好,就說到此,如果理解了,就給這個遊戲加上乙個顯示正確數字的功能(投降),另外,讓其能猜多幾局也是個不錯的主意.
(其實,能改進的還很多,你自己思考吧)
專案管理的20條錦囊妙計
即使在最完美的條件下,管理乙個軟體專案也是很困難的。不幸的是,許多新專案經理實質上沒有受到任何就職培訓。這裡有20個成功的管理經驗供專案經理參考。不過,只依靠某一兩條 妙計 是無法順利完成專案的。1.定義專案成功的標準?在專案的開始,要保證各方對於判斷專案是否成功有統一的認識。通常,跟緊預定的進度是...
IT專案管理的20條錦囊妙計
即使在最完美的條件下,管理乙個軟體專案也是很困難的。不幸的是,許多新專案經理實質上沒有受到任何就職培訓。這裡有 20個成功的管理經驗供專案經理參考。不過,只依靠某一兩條 妙計 是無法順利完成專案的。1.定義專案成功的標準 在專案的開始,要保證各方對於判斷專案是否成功有統一的認識。通常,跟緊預定的進度...
專案管理的20條錦囊妙計
即使在最完美的條件下,管理乙個軟體專案也是很困難的。不幸的是,許多新專案經理實質上沒有受到任何就職培訓。這裡有20個成功的管理經驗供專案經理參考。不過,只依靠某一兩條 妙計 是無法順利完成專案的。1.定義專案成功的標準 在專案的開始,要保證各方對於判斷專案是否成功有統一的認識。通常,跟緊預定的進度是...