程序員考試筆記五:循環(huán)語(yǔ)句
今天是離散學(xué)禮的最后一天了,我的成績(jī)嘛,當(dāng)然也不會(huì)高得去那里了,還很有可能第一呢(倒數(shù)啊)。都怪自己不好,不過(guò)也不能全怪。因?yàn)閷W(xué)校本來(lái)的電腦課程也不少了,可就是全部都在教圖形方面呢,什么PS 、CW都要我們編程班的去學(xué),真有點(diǎn)不爽。
好了,也不說(shuō)太多自己學(xué)校的羞事了。那么下面我們就開(kāi)始來(lái)學(xué)習(xí)今天的知識(shí)吧,很多朋友都是我整天在打字,可我自己覺(jué)得打一篇這些也不是浪費(fèi)很多時(shí)間,而且收益的更多(早上聽(tīng)完,晚上復(fù)習(xí))。故語(yǔ)有云"溫故知新",我覺(jué)得這句特別有道理的,因?yàn)橥ǔN以诳磿?shū)里也看不到老師在課堂里向我們提出的問(wèn)題。好了好了,我還是趕緊說(shuō)說(shuō)今天的學(xué)習(xí)吧。昨天老師布置的我們一道答,我昨天都給忙了做,而是今天突然想起才沖沖的趕著做,是這樣的一道題:
給一個(gè)不多于5位的正整數(shù),要求:1,這個(gè)數(shù)有幾位2,打印每一位的數(shù),3逆序打印,比如321 輸出 123。
好在這答也不難,用了一會(huì)兒時(shí)間就做完了。
main()
{
int n; int num;
int i=0,a[5];
printf("請(qǐng)輸入不大于5位的正整數(shù)";
scanf("%d",&num);
do
{
do[i] =num % 10;
num /=10;
i++;
}while(num!=0);
n=i;
printf("LEN%d",n);
for(i=n-1;i>=0;i--)
printf("%d",a[ i ]);
for(i=0;i
}
做這題時(shí)我也用到了昨天老師教的畫(huà)圖方法作了驗(yàn)算,不過(guò)還是要上機(jī)求正否,這樣一來(lái)可以鍛練一下編寫(xiě)程序。我們大家都各有各的方法,有些是很長(zhǎng)(用Switch語(yǔ)句呢),我也不知道他怎么想的了,不過(guò)不同人有不同思想是正確的,編程這玩意沒(méi)有完全統(tǒng)一的答案的。那么你們想想你們有什么方法做呢,好吧,就給五分鐘你們做做吧。……好了,時(shí)間到了,下面我再說(shuō)說(shuō)我的另一位同學(xué)做的方法吧,他是用字符數(shù)組的,也很簡(jiǎn)單方便可以實(shí)現(xiàn)。你們做的怎么了?如果有好的方法也可以大家交流啊,因?yàn)槲覍?xiě)這些都是為了大家(也為了自己)。大家應(yīng)該都看得明白我的程序吧,因?yàn)槲业乃枷刖褪沁@么單純。
老師說(shuō)完了昨天的作業(yè)后就開(kāi)始說(shuō)今天要講的課程了。今天的主題是循環(huán)語(yǔ)句,其實(shí)C語(yǔ)言里也只是這么幾條循環(huán)語(yǔ)句嗎?相比QB來(lái)說(shuō)真的可以算是見(jiàn)大場(chǎng)面了,因?yàn)镼B里單是循環(huán)語(yǔ)句已經(jīng)有七八種之種,至于有那些我也記不太清了。那么下面講講C語(yǔ)言的好了。C語(yǔ)言的循環(huán)語(yǔ)句一共有三種,先說(shuō)說(shuō)比較簡(jiǎn)單的前兩種吧!
While ( 條件 ) { 語(yǔ)句;} 和 do { 語(yǔ)句;}
while ( 條件 );
這里我想重復(fù)一下老師給我們說(shuō)的一個(gè)笑話,就是有一個(gè)小女孩問(wèn)媽媽拿糖的小故事。有一個(gè)很乖的小女孩總是先問(wèn)媽媽可不可以吃糖,如果得么批準(zhǔn)了就拿一粒來(lái)吃??墒怯幸淮嗡秃苣弥涣3灾?,跟著才問(wèn)媽媽我可不可吃糖啊,如果可以當(dāng)然就是繼續(xù)可以吃了,否則就不準(zhǔn)了,不過(guò)已經(jīng)有一粒在口了。這個(gè)剛好可以比喻這兩個(gè)循環(huán)語(yǔ)句,第一個(gè)循環(huán)語(yǔ)句是先當(dāng)條件真才可以繼續(xù)下去,否則退出。而第二個(gè)呢,就是直運(yùn)行里面的程序先,跟著才到條件里看是否可以再繼續(xù)運(yùn)行多一次。好了這兩個(gè)比較簡(jiǎn)單的就看看C語(yǔ)言里特有的一個(gè)for循環(huán)語(yǔ)句,這個(gè)循環(huán)比較特別,如第五天圖一
它的結(jié)構(gòu)也比較特別,而且里面三個(gè)表達(dá)式是非常靈活的。這里隨便給出一個(gè)程序讓大家看看:
int i=0;
for(; if(i++>10) break;
printf("%d",i);
這說(shuō)這里i是多少呢?這里就關(guān)系到這個(gè)運(yùn)算符了++遞增運(yùn)算符,可以有兩種方式,一種是i++就像上面的那樣,至于另一種就是++i,這里的答案是前者等于12,而后者就等于11。這里全是因?yàn)?+遞增的兩個(gè)方式所至,那么我們要好好掌握一下這個(gè),你自己試試動(dòng)手上機(jī)編一下。另一個(gè)程序好讓看出這個(gè)遞增運(yùn)算符的:
int i=0;
if (i++) printf("a"; /* 如果這里為真的就輸出a */
else printf("b"; /*否則就是輸出b */
自己試試看,是不是很明顯可以知道這個(gè)遞增符的原理呢,這里說(shuō)一下吧,其實(shí)i++這個(gè)呢就是先那i比較后才運(yùn)算++的,所以很自然就是0那么結(jié)果當(dāng)然就是輸出b了,則那個(gè)++i就是先把i加1才比較,那么真就輸出a了,好了,那么++遞增和- -遞減都是同一性質(zhì)的。不過(guò)要注意的是這兩個(gè)遞增遞減運(yùn)算符都是要變量才行的,不可以和常量運(yùn)算。
好了,說(shuō)完了循環(huán)語(yǔ)句當(dāng)然就是要懂得去運(yùn)用在編程里了啊!所以老師馬上出了一道題讓我們想想,不過(guò)相信有些人都是研究過(guò)的了,就是"魔方陣",可是老師說(shuō)雖然這個(gè)魔方陣雖然有直接的算法可以運(yùn)算出來(lái),但是要讓我們思考用循環(huán)做這題,利用計(jì)算機(jī)的能力來(lái)完成,但看到要排列這么多的數(shù),循環(huán)也更不要說(shuō)要很多了,所以我根本沒(méi)法想下去了(開(kāi)始頭暈起來(lái))。最后還是沒(méi)有一個(gè)能做出,只好聽(tīng)老師說(shuō)了,不過(guò)老師也沒(méi)有完全說(shuō)完,只是給了我們一個(gè)結(jié)構(gòu),如第五天圖二讓我們自己有興趣就去完成它吧,我對(duì)數(shù)學(xué)這東西最沒(méi)有FEEL的了。
好了,接著繼續(xù)第二題,也是一個(gè)排列組合的問(wèn)題,你們手頭上應(yīng)該都有老潭的《C程序語(yǔ)言第二版》了,那么請(qǐng)大家翻翻書(shū)到第121頁(yè),6.15題,這題就是排列組合的題目了。這其實(shí)也是有一個(gè)規(guī)律可以找到的,不過(guò)不是我們找到的而是老師給我們說(shuō),今天這堂課真的有太多的難題了,至少對(duì)于我來(lái)說(shuō)。下面我也沒(méi)有什么好插嘴的了,只好示出老師的方法吧,程序也在下。
char xyz[]=['X','Y',"Z'};
int i,j,k;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(j==i0 continue;
for(k=0;k<3;k++)
if(k==i || k==j) continue;
printf("A-%c\n",xyz[i]);
prihtf("B-%c\n",xyz[j]);
prihtf("C-%c\n",xyz[k]);
讓大家自己看明白了。好了,今天我的頭也特別的暈,肩膀也特別的酸。不過(guò)我還是要努力的!