輕鬆入門c語言的錦囊妙計

2021-06-17 00:30:44 字數 4353 閱讀 2264

很多人認為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.定義專案成功的標準 在專案的開始,要保證各方對於判斷專案是否成功有統一的認識。通常,跟緊預定的進度是...