版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第5章章 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)* *考點(diǎn)考點(diǎn)01:while語(yǔ)句語(yǔ)句 5.1 while語(yǔ)句及用語(yǔ)句及用while語(yǔ)句構(gòu)成的語(yǔ)句構(gòu)成的循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)(當(dāng)型當(dāng)型) 1. 形式:形式:while(表達(dá)式表達(dá)式) 語(yǔ)句語(yǔ)句(循環(huán)體循環(huán)體)例如例如 while(i0) printf(*) ; i+; 。 2. 說(shuō)明:說(shuō)明:while是是C語(yǔ)言的關(guān)鍵字,表達(dá)式的語(yǔ)言的關(guān)鍵字,表達(dá)式的值數(shù)據(jù)類(lèi)型任意,用于控制循環(huán)體是否執(zhí)行。值數(shù)據(jù)類(lèi)型任意,用于控制循環(huán)體是否執(zhí)行。3. 執(zhí)行執(zhí)行 S1. 計(jì)算表達(dá)式的值,當(dāng)值非計(jì)算表達(dá)式的值,當(dāng)值非0, 執(zhí)行執(zhí)行S2;值為;值為0執(zhí)行執(zhí)行S4。S2. 執(zhí)行循環(huán)體中的語(yǔ)句。執(zhí)
2、行循環(huán)體中的語(yǔ)句。S3. 轉(zhuǎn)去執(zhí)行轉(zhuǎn)去執(zhí)行S1。S4. 退出退出while循環(huán)循環(huán)。例例5-1 求求2+4+6+98+100=? main( ) int sum,i; sum=0;i=2; while(i0) x1=(x2+1)*2; /*第第1天的桃子數(shù)是第天的桃子數(shù)是第2天桃子數(shù)加天桃子數(shù)加1后的后的2倍倍*/ x2=x1; day-; printf(The total is %d !n,x1); 運(yùn)行結(jié)果為:運(yùn)行結(jié)果為:The total is 1534 !運(yùn)行例運(yùn)行例5-3注意:注意:(1) “當(dāng)當(dāng)”型是指當(dāng)循環(huán)條件滿(mǎn)足時(shí),就執(zhí)行循型是指當(dāng)循環(huán)條件滿(mǎn)足時(shí),就執(zhí)行循 環(huán);環(huán);“直到直到”
3、型指執(zhí)行循環(huán)直到不滿(mǎn)足循環(huán)條型指執(zhí)行循環(huán)直到不滿(mǎn)足循環(huán)條件為止。件為止。(2) 如果在第一次進(jìn)入循環(huán)時(shí),表達(dá)式的值為如果在第一次進(jìn)入循環(huán)時(shí),表達(dá)式的值為0,循環(huán)一次也不執(zhí)行。循環(huán)一次也不執(zhí)行。(3) 循環(huán)控制變量是在循環(huán)條件中控制條件是真循環(huán)控制變量是在循環(huán)條件中控制條件是真是假的變量。要編寫(xiě)正確的循環(huán)結(jié)構(gòu),需對(duì)循是假的變量。要編寫(xiě)正確的循環(huán)結(jié)構(gòu),需對(duì)循環(huán)控制變量做環(huán)控制變量做3個(gè)工作:循環(huán)控制變量正確賦個(gè)工作:循環(huán)控制變量正確賦初值、將循環(huán)控制變量寫(xiě)入正確的循環(huán)條件、初值、將循環(huán)控制變量寫(xiě)入正確的循環(huán)條件、循環(huán)控制變量的更新、調(diào)整。循環(huán)控制變量的更新、調(diào)整。(4) 在循環(huán)體中一定要有使循環(huán)趨
4、于結(jié)束在循環(huán)體中一定要有使循環(huán)趨于結(jié)束的操作,否則形成死循環(huán)的操作,否則形成死循環(huán)(循環(huán)條件永遠(yuǎn)循環(huán)條件永遠(yuǎn)滿(mǎn)足滿(mǎn)足),這時(shí)循環(huán)將永遠(yuǎn)進(jìn)行下去,只有,這時(shí)循環(huán)將永遠(yuǎn)進(jìn)行下去,只有Ctrl+Break(Pause)強(qiáng)制退出。強(qiáng)制退出。(5) 在循環(huán)體中,語(yǔ)句的先后位置必須符在循環(huán)體中,語(yǔ)句的先后位置必須符合邏輯,如合邏輯,如i+這樣的循環(huán)控制變量更新這樣的循環(huán)控制變量更新的語(yǔ)句位置必須正確,否則運(yùn)算過(guò)程中的語(yǔ)句位置必須正確,否則運(yùn)算過(guò)程中可能會(huì)漏掉一項(xiàng)多加一項(xiàng),如例可能會(huì)漏掉一項(xiàng)多加一項(xiàng),如例5-1中的中的i+=2在前則結(jié)果為在前則結(jié)果為2650。歷年真題精解歷年真題精解1. 有以下程序有以下程
5、序 main() int a=1,b=2; while(a6) b+=a; a+=2; b%=10; printf(%d,%dn,a,b); 程序運(yùn)行后的輸出結(jié)果是程序運(yùn)行后的輸出結(jié)果是(1009)A) 5,11 B) 7,1 C) 7,11 D) 6,1答案:答案: B解析:解析: 16執(zhí)行循環(huán),執(zhí)行循環(huán),b=b+a=2+1=3、a=a+2=3、b=b%10=3%10=3;36繼續(xù)循環(huán),繼續(xù)循環(huán),b=3+3=6、a=3+2=5、b=6%10=6;56結(jié)束循環(huán)。結(jié)束循環(huán)。 2. 有以下程序有以下程序 main() int y=10; while(y-); printf(y=%dn,y); 程序
6、執(zhí)行后的輸出結(jié)果是程序執(zhí)行后的輸出結(jié)果是(1009)A) y=0 B) y=-1 C) y=1 D) while構(gòu)成無(wú)限循環(huán)構(gòu)成無(wú)限循環(huán)答案:答案: B解析:解析: 要結(jié)束循環(huán),表達(dá)式要結(jié)束循環(huán),表達(dá)式y(tǒng)-值值為為0;-在后,故在后,故y后減后減1=-1。 3. 有以下程序有以下程序 main() int n=2,k=0; while(k+&n+2); printf(%d %dn,k,n); 程序運(yùn)行后的輸出結(jié)果是程序運(yùn)行后的輸出結(jié)果是(0909) A) 0 2 B) 1 3 C) 5 7 D) 1 2答案:答案: D解析:解析: 先計(jì)算表達(dá)式先計(jì)算表達(dá)式k+的值為的值為0,則,則求值
7、短路,求值短路,n+2沒(méi)有執(zhí)行;沒(méi)有執(zhí)行;循環(huán)沒(méi)有執(zhí)行,但此時(shí)循環(huán)沒(méi)有執(zhí)行,但此時(shí)k為為1,所以選所以選D。 4. 有以下程序有以下程序 main( ) char c1,c2; scanf(%c,&c1); while(c190) scanf(%c,&c1); c2=c1+32; printf(%c,%cn,c1,c2); 程序運(yùn)行輸入程序運(yùn)行輸入65回車(chē)后,能否輸出結(jié)果、結(jié)束回車(chē)后,能否輸出結(jié)果、結(jié)束運(yùn)行(請(qǐng)回答能或不能)運(yùn)行(請(qǐng)回答能或不能)(0903) 。答案:答案: 不能不能解析:解析: 因?yàn)橐驗(yàn)閏1為字符變量,所以輸入為字符變量,所以輸入65等價(jià)于輸?shù)葍r(jià)于輸入入6和和
8、5,6的的ASCII碼值為碼值為54,滿(mǎn)足循,滿(mǎn)足循環(huán)條件,故系統(tǒng)繼續(xù)讀入環(huán)條件,故系統(tǒng)繼續(xù)讀入5,5的的ASCII碼值為碼值為53,仍然滿(mǎn)足循環(huán)條件,仍然滿(mǎn)足循環(huán)條件,n的的ASCII碼值為碼值為10,仍然滿(mǎn)足循環(huán)條件,故,仍然滿(mǎn)足循環(huán)條件,故系統(tǒng)會(huì)等待下一個(gè)數(shù)據(jù)的輸入。只有繼續(xù)系統(tǒng)會(huì)等待下一個(gè)數(shù)據(jù)的輸入。只有繼續(xù)輸入直到不滿(mǎn)足循環(huán)條件為止,才能有輸輸入直到不滿(mǎn)足循環(huán)條件為止,才能有輸出結(jié)果。出結(jié)果。 5. 下列程序運(yùn)行時(shí),若輸入下列程序運(yùn)行時(shí),若輸入labced12df 輸出結(jié)果為輸出結(jié)果為(0903) #include void main( ) char a=0,ch; while(ch
9、=getchar()!=n ) if(a%2!=0&(ch=a &ch=z ) ch=ch-a +A ; a+;putchar(ch); printf(n); 答案:答案: lAbCdE12dF 解析:解析: 循環(huán)結(jié)束條件為輸入回車(chē);第一次循環(huán)時(shí)循環(huán)結(jié)束條件為輸入回車(chē);第一次循環(huán)時(shí)a%2為為0,則直接執(zhí)行則直接執(zhí)行a+;putchar(ch);輸輸出出l且且a為為1;第二次;第二次a%2為為1,且且a為小寫(xiě)為小寫(xiě)字母字母,則將則將ch轉(zhuǎn)換成轉(zhuǎn)換成A, 輸出輸出A且且a為為2;至;至此可得規(guī)律,輸入的第此可得規(guī)律,輸入的第1、3、5、7、9字字符原樣輸出,而第符原樣輸出,而第2、
10、4、6、10字符小寫(xiě)字符小寫(xiě)變大寫(xiě)輸出,第變大寫(xiě)輸出,第8字符為字符為2不滿(mǎn)足不滿(mǎn)足&右側(cè)右側(cè)條件,故原樣輸出。條件,故原樣輸出。 6. 有以下程序有以下程序 main() int k=5; while(-k) printf(%d,k-=3); printf(n); 執(zhí)行后的輸出結(jié)果是執(zhí)行后的輸出結(jié)果是(0609) A) 1 B) 2 C) 4 D) 死循環(huán)死循環(huán)答案:答案: A解析:解析: -k為為4非非0輸出輸出k-=3表達(dá)式表達(dá)式(k=4-3)的值為的值為1,再判斷,再判斷-k為為0,結(jié)束循環(huán)。結(jié)束循環(huán)。 * *考點(diǎn)考點(diǎn)02:do-while語(yǔ)句語(yǔ)句1. 形式:形式: do 語(yǔ)句
11、語(yǔ)句(循環(huán)體循環(huán)體) while(表達(dá)式表達(dá)式);例如例如 do i+;s+=i; while (i10);。;。5.2 do-while語(yǔ)句及用語(yǔ)句及用do-while語(yǔ)句構(gòu)成的循環(huán)結(jié)構(gòu)語(yǔ)句構(gòu)成的循環(huán)結(jié)構(gòu)(直到型直到型) 2. 說(shuō)明:說(shuō)明: do是是C語(yǔ)言的關(guān)鍵字,必須與語(yǔ)言的關(guān)鍵字,必須與while聯(lián)聯(lián)合使用。循環(huán)由合使用。循環(huán)由do開(kāi)始,到開(kāi)始,到while結(jié)束;結(jié)束;必須注意必須注意while(表達(dá)式表達(dá)式)后的后的“;”不能不能缺少,它代表缺少,它代表do-while語(yǔ)句的結(jié)束。語(yǔ)句的結(jié)束。 3. 執(zhí)行執(zhí)行 S1. 執(zhí)行執(zhí)行do后面循環(huán)體中的語(yǔ)句。后面循環(huán)體中的語(yǔ)句。S2. 計(jì)算表達(dá)
12、式的值,當(dāng)值非計(jì)算表達(dá)式的值,當(dāng)值非0,執(zhí)行,執(zhí)行S1; 否則退出否則退出do-while循環(huán)。循環(huán)。 例例5-4 輸入并輸出一串字符,遇輸入并輸出一串字符,遇“!”結(jié)束。結(jié)束。 #include void main() char c; do c=getchar(); putchar(c); while(c!=!); 運(yùn)行例運(yùn)行例5-4例例5-5 輸入一個(gè)正整數(shù),然后按反向輸出。比如輸入輸入一個(gè)正整數(shù),然后按反向輸出。比如輸入123456則輸出則輸出654321。 分析:個(gè)位上的數(shù)通過(guò)模分析:個(gè)位上的數(shù)通過(guò)模10得到得到,十位上的數(shù)通過(guò)除十位上的數(shù)通過(guò)除10再模再模10得到得到,其余依此類(lèi)推其
13、余依此類(lèi)推;循環(huán)條件為商不等于循環(huán)條件為商不等于0。 main() long n; printf(Please input a integer: ); scanf(%ld,&n);printf(The reverse order is: ); do printf(%ld, n%10); n/=10; while(n); printf(n); 運(yùn)行例運(yùn)行例5-5注意注意:(1) do-while與與while的區(qū)別是的區(qū)別是 do-while是先執(zhí)行循環(huán)再判斷循環(huán)是先執(zhí)行循環(huán)再判斷循環(huán)條件,所以無(wú)論表達(dá)式的值是條件,所以無(wú)論表達(dá)式的值是0還是還是非非0,循環(huán)體至少要被執(zhí)行一次。,循環(huán)體至
14、少要被執(zhí)行一次。(2) 與與while語(yǔ)句一樣,在循環(huán)體中一語(yǔ)句一樣,在循環(huán)體中一定要有使循環(huán)趨于結(jié)束的操作。定要有使循環(huán)趨于結(jié)束的操作。歷年真題精解歷年真題精解1. 下程序運(yùn)行后的輸出結(jié)果是下程序運(yùn)行后的輸出結(jié)果是(0909) main() int a=1,b=7; do b=b/2; a+=b; while (b1); printf(%dn,a); 答案:答案: 5解析:解析: 第一次循環(huán)第一次循環(huán)b=3,a=4,31執(zhí)行執(zhí)行第二次循環(huán);第二次循環(huán);b=1,a=5,1不大不大于于1,結(jié)束循環(huán)。,結(jié)束循環(huán)。 * *考點(diǎn)考點(diǎn)03:for語(yǔ)句語(yǔ)句1. 形式:形式: for (表達(dá)式表達(dá)式1;表達(dá)
15、式表達(dá)式2;表達(dá)式表達(dá)式3) 語(yǔ)句語(yǔ)句(循環(huán)體循環(huán)體);例如例如 for(k=0;k10;k+) printf(*); 。5.3 for語(yǔ)句及用語(yǔ)句及用for語(yǔ)句語(yǔ)句構(gòu)成的循環(huán)結(jié)構(gòu)構(gòu)成的循環(huán)結(jié)構(gòu)(當(dāng)型當(dāng)型) 2. 說(shuō)明:說(shuō)明:for是是C語(yǔ)言的關(guān)鍵字。表達(dá)式語(yǔ)言的關(guān)鍵字。表達(dá)式1通常用來(lái)給循環(huán)控制變量賦初值,也允通常用來(lái)給循環(huán)控制變量賦初值,也允許在許在for語(yǔ)句前給循環(huán)控制變量賦初值語(yǔ)句前給循環(huán)控制變量賦初值;表達(dá)式表達(dá)式2通常是循環(huán)條件;表達(dá)式通常是循環(huán)條件;表達(dá)式3通常通常用來(lái)更新循環(huán)控制變量的值。用來(lái)更新循環(huán)控制變量的值。3. 執(zhí)行執(zhí)行S1. 計(jì)算表達(dá)式計(jì)算表達(dá)式1的值。的值。S2.
16、計(jì)算表達(dá)式計(jì)算表達(dá)式2的值,若值非的值,若值非0則執(zhí)行循則執(zhí)行循環(huán)體一次,環(huán)體一次, 否則跳出循環(huán)。否則跳出循環(huán)。S3. 計(jì)算表達(dá)式計(jì)算表達(dá)式3的值,轉(zhuǎn)回的值,轉(zhuǎn)回S2重復(fù)執(zhí)行。重復(fù)執(zhí)行。 注意注意:(1) for語(yǔ)句中的各表達(dá)式都可省略,但語(yǔ)句中的各表達(dá)式都可省略,但“;”不不能少。如能少。如for(;表達(dá)式表達(dá)式;表達(dá)式表達(dá)式)、for(表達(dá)式表達(dá)式;表達(dá)式表達(dá)式)、for(表達(dá)式表達(dá)式;表達(dá)式表達(dá)式;)、 for(;)。(2) 要省略表達(dá)式要省略表達(dá)式1,則應(yīng)在循環(huán)前給循環(huán)控制,則應(yīng)在循環(huán)前給循環(huán)控制變量賦初值;要省略表達(dá)式變量賦初值;要省略表達(dá)式2,則應(yīng)在循環(huán)體,則應(yīng)在循環(huán)體內(nèi)有使循環(huán)
17、結(jié)束的條件;要省略表達(dá)式內(nèi)有使循環(huán)結(jié)束的條件;要省略表達(dá)式3,則,則應(yīng)將表達(dá)式應(yīng)將表達(dá)式3作為循環(huán)體的最后一條語(yǔ)句。作為循環(huán)體的最后一條語(yǔ)句。(3) 直接省略表達(dá)式直接省略表達(dá)式2或表達(dá)式或表達(dá)式3,很可能造成,很可能造成死循環(huán)。死循環(huán)。例例5-6 一位百萬(wàn)富翁遇到一個(gè)陌生人,陌生人找一位百萬(wàn)富翁遇到一個(gè)陌生人,陌生人找他談一個(gè)換錢(qián)計(jì)劃:我每天給你十萬(wàn)元,而你他談一個(gè)換錢(qián)計(jì)劃:我每天給你十萬(wàn)元,而你第一天只需給我一分錢(qián);第二天我仍給你十萬(wàn)第一天只需給我一分錢(qián);第二天我仍給你十萬(wàn)元,你給我二分錢(qián);第三天我仍給你十萬(wàn)元,元,你給我二分錢(qián);第三天我仍給你十萬(wàn)元,你給我四分錢(qián)你給我四分錢(qián)你每天給我的錢(qián)
18、是前一天的你每天給我的錢(qián)是前一天的兩倍,直到滿(mǎn)一個(gè)月兩倍,直到滿(mǎn)一個(gè)月(30天天)。百萬(wàn)富翁很高興,。百萬(wàn)富翁很高興,欣然接受了這個(gè)契約。請(qǐng)編寫(xiě)一個(gè)程序計(jì)算這欣然接受了這個(gè)契約。請(qǐng)編寫(xiě)一個(gè)程序計(jì)算這一個(gè)月中陌生人給了百萬(wàn)富翁多少錢(qián),百萬(wàn)富一個(gè)月中陌生人給了百萬(wàn)富翁多少錢(qián),百萬(wàn)富翁給了陌生人多少錢(qián)。翁給了陌生人多少錢(qián)。 分析:等差數(shù)列和等比數(shù)列。陌生人的增量為分析:等差數(shù)列和等比數(shù)列。陌生人的增量為1000000,百萬(wàn)富翁為,百萬(wàn)富翁為2倍,循環(huán)控制變量倍,循環(huán)控制變量230。 main() int n,i; long s=1,k=1,t=100000; for(i=2;i=30;i+) k*=
19、2; s+=k; t+=100000; s=s/100; /*將以分為單位換為以元為單位將以分為單位換為以元為單位*/ printf(millionaire give stranger: %ld$n stranger give millionaire: %ld$n,s,t); 運(yùn)行例運(yùn)行例5-6例例5-7 古典問(wèn)題:有一對(duì)兔子,從出生后古典問(wèn)題:有一對(duì)兔子,從出生后第第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一對(duì)兔子,長(zhǎng)到第三個(gè)月后每個(gè)月又生一對(duì)兔子,假如兔子都不死,問(wèn)每個(gè)月的兔子總對(duì)假如兔子都不死,問(wèn)每個(gè)月的兔子總對(duì)數(shù)為多少?(斐波那契數(shù)列)
20、數(shù)為多少?(斐波那契數(shù)列) 分析:使用遞推法。每個(gè)月兔子總對(duì)數(shù)分析:使用遞推法。每個(gè)月兔子總對(duì)數(shù)為為1,1,2,3,5從第三個(gè)月開(kāi)始,從第三個(gè)月開(kāi)始,每項(xiàng)是前兩項(xiàng)之和;循環(huán)控制變量每項(xiàng)是前兩項(xiàng)之和;循環(huán)控制變量120。main() long f1=1,f2=1; int i; for(i=1;i=20;i+) printf(%12ld%12ld,f1,f2); if(i%2=0) printf(n); /*控制輸出,每行四個(gè)控制輸出,每行四個(gè)*/ f1=f1+f2; /*前兩個(gè)月加起來(lái)賦值給第三個(gè)月前兩個(gè)月加起來(lái)賦值給第三個(gè)月*/ f2=f1+f2; /*前兩個(gè)月加起來(lái)賦值給第三個(gè)月前兩個(gè)月加
21、起來(lái)賦值給第三個(gè)月*/ 運(yùn)行例運(yùn)行例5-7例例5-8 打印出所有的打印出所有的“水仙花數(shù)水仙花數(shù)”,所謂所謂“水仙花數(shù)水仙花數(shù)”是指一個(gè)三位是指一個(gè)三位數(shù),其各位數(shù)字立方和等于該數(shù)數(shù),其各位數(shù)字立方和等于該數(shù)本身。如本身。如153是一個(gè)是一個(gè)“水仙花數(shù)水仙花數(shù)”,因?yàn)橐驗(yàn)?53=13+53+33。 分析:每個(gè)數(shù)要分解出個(gè)位,十分析:每個(gè)數(shù)要分解出個(gè)位,十位,百位,然后用位,百位,然后用if進(jìn)行判斷;控進(jìn)行判斷;控制變量制變量100999。 main() int i,j,k,n; printf(Water flower number is: ); for(n=100;n1000;n+) i=n/
22、100; /*分解出百位分解出百位*/ j=(n-i*100)/10; /*分解出十位分解出十位*/ k=n%10; /*分解出個(gè)位分解出個(gè)位*/ if(i*i*i+j*j*j+k*k*k=n) printf(%d ,n); printf(n); 運(yùn)行例運(yùn)行例5-8歷年真題精解歷年真題精解1. 有以下程序有以下程序 main() int f,f1,f2,i; f1=0; f2=1; printf(%d%d,f1,f2); for(i=3;i=5;i+) f=f1+f2; printf(%d,f); f1=f2; f2=f; printf(n); 程序運(yùn)行后的輸出結(jié)果是程序運(yùn)行后的輸出結(jié)果是(0
23、909)答案:答案: 01123解析:解析: 首先輸出首先輸出f1、f2的值的值01,然后執(zhí),然后執(zhí)行第一次循環(huán),輸出行第一次循環(huán),輸出f的值的值1,f1變變成成1、f2還是還是1;第二次循環(huán),輸;第二次循環(huán),輸出出f的值的值2,f1還是還是1、f2變成變成2;第;第三次循環(huán),輸出三次循環(huán),輸出f的值的值3。 2. 有以下程序有以下程序main( ) int c=0,k; for(k=1;k0;y-) if(y%3=0) printf(%d,-y); 程序的運(yùn)行結(jié)果是程序的運(yùn)行結(jié)果是(0709)A) 741 B) 963 C) 852 D) 875421答案:答案: C解析:解析: 滿(mǎn)足滿(mǎn)足y
24、%3=0的只有的只有9、6、3,所以輸出為所以輸出為8、5、2(-y)。* *考點(diǎn)考點(diǎn)04:循環(huán)結(jié)構(gòu)的嵌套循環(huán)結(jié)構(gòu)的嵌套1. while() for() 2. do for() while();2. for() while() 4. for() for() 5.4 循環(huán)結(jié)構(gòu)的嵌套循環(huán)結(jié)構(gòu)的嵌套 例例5-9 輸出輸出9*9口訣。口訣。分析:先打印分析:先打印*123456789再分行與列考慮,共再分行與列考慮,共9行行9列,列,i控制行,控制行,j控制列??刂屏?。main() int i,j; printf(*); for(i=1;i10;i+) printf(%6d,i); printf(n)
25、; for(i=1;i10;i+) printf(%d,i); for(j=1;j10;j+) printf(%6d,i*j); printf(n); 運(yùn)行例運(yùn)行例5-9 例例5-10 百錢(qián)買(mǎi)百雞問(wèn)題。公元錢(qián)五世紀(jì),我國(guó)百錢(qián)買(mǎi)百雞問(wèn)題。公元錢(qián)五世紀(jì),我國(guó)古代數(shù)學(xué)家張丘建在古代數(shù)學(xué)家張丘建在算經(jīng)算經(jīng)一書(shū)中提出了一書(shū)中提出了“百雞問(wèn)題百雞問(wèn)題”:雞翁一值錢(qián)五,雞母一值錢(qián)三,:雞翁一值錢(qián)五,雞母一值錢(qián)三,雞雛三值錢(qián)一。百錢(qián)買(mǎi)百雞,問(wèn)雞翁、雞母、雞雛三值錢(qián)一。百錢(qián)買(mǎi)百雞,問(wèn)雞翁、雞母、雞雛各幾何?雞雛各幾何? 分析:根據(jù)題意,雞翁最多為分析:根據(jù)題意,雞翁最多為19(100/5),雞,雞母最多母最多3
26、3(100/3),雞雛的個(gè)數(shù)為,雞雛的個(gè)數(shù)為100-雞翁個(gè)雞翁個(gè)數(shù)數(shù)-雞母?jìng)€(gè)數(shù),所以使用二重循環(huán),外循環(huán)為雞雞母?jìng)€(gè)數(shù),所以使用二重循環(huán),外循環(huán)為雞翁翁0-19窮舉、內(nèi)循環(huán)為雞母窮舉、內(nèi)循環(huán)為雞母0-33窮舉,內(nèi)循環(huán)窮舉,內(nèi)循環(huán)體為雞雛賦值語(yǔ)句、使用體為雞雛賦值語(yǔ)句、使用if來(lái)控制輸出的為滿(mǎn)來(lái)控制輸出的為滿(mǎn)足條件的百雞個(gè)數(shù)。足條件的百雞個(gè)數(shù)。 main( ) int cocks,hens,chicks; for(cocks=1;cocks=19;cocks+) for(hens=1;hens=33;hens+) chicks=100-cocks-hens; if(5*cocks+3*hens+c
27、hicks/3=100& chicks%3=0) printf(%d,%d,%dn,cocks,hens,chicks); 運(yùn)行例運(yùn)行例5-10歷年真題精解歷年真題精解1. 以下程序中的變量已正確定義以下程序中的變量已正確定義 for(i=0;i4;i+,i+) for(k=1;k=1;i-) for(j=1;j=2;j+) printf(%d,i+j); printf(n); 程序的運(yùn)行結(jié)果是程序的運(yùn)行結(jié)果是(0809)A) 2 3 4 B)4 3 2 C)2 3 D)4 5 3 4 5 5 4 3 3 4 3 4 4 5 2 3答案:答案: D解析:解析: 外循環(huán)共執(zhí)行外循環(huán)共執(zhí)行
28、3次次(i由由3到到1),內(nèi)循,內(nèi)循環(huán)執(zhí)行環(huán)執(zhí)行2次次(j由由1到到2) ,且外循環(huán),且外循環(huán)最好一條語(yǔ)句為換行,所以輸出最好一條語(yǔ)句為換行,所以輸出結(jié)果有結(jié)果有3行,每行有兩個(gè)數(shù)據(jù)。而行,每行有兩個(gè)數(shù)據(jù)。而第一次第一次3+1=4、3+2=5,故選,故選D。3. 以下程序的輸出結(jié)果是以下程序的輸出結(jié)果是(0809) #include void main() int i,j,sum; for(i=3;i=1;i-) sum=0; for(j=1;j=i;j+) sum+=i*j; printf(%dn,sum); 答案:答案: 1解析:解析: 外循環(huán)共執(zhí)行外循環(huán)共執(zhí)行3次次(i由由3到到1),內(nèi)
29、循,內(nèi)循環(huán)隨環(huán)隨i遞減次數(shù)依次為遞減次數(shù)依次為3、2、1(j=i) ,且每次外循環(huán)開(kāi)始,且每次外循環(huán)開(kāi)始sum被重新賦值為被重新賦值為0,故只需要分析最,故只需要分析最后一次外循環(huán)。后一次外循環(huán)。sum+=1*1,故答,故答案為案為1。4. 有以下程序有以下程序(0809) #include void main() int i,j,m=55; for(i=1;i=3;i+) for(j=3;j=i;j+) m=m%j; printf(%dn,m); 程序的運(yùn)行結(jié)果是程序的運(yùn)行結(jié)果是(0709)A) 0 B) 1 C) 2 D) 3答案:答案: B解析:解析: 當(dāng)外循環(huán)當(dāng)外循環(huán)i的值為的值為1、
30、2時(shí),內(nèi)循時(shí),內(nèi)循環(huán)一次也不執(zhí)行環(huán)一次也不執(zhí)行 ,當(dāng)外循環(huán),當(dāng)外循環(huán)i的的值為值為3時(shí),內(nèi)循環(huán)執(zhí)行一次,時(shí),內(nèi)循環(huán)執(zhí)行一次,m=m%3,所以,所以m的值為的值為1。* *考點(diǎn)考點(diǎn)05:break語(yǔ)句語(yǔ)句1. 只能在循環(huán)體內(nèi)和只能在循環(huán)體內(nèi)和switch語(yǔ)句內(nèi)使用語(yǔ)句內(nèi)使用break語(yǔ)句。語(yǔ)句。 2. 當(dāng)當(dāng)break出現(xiàn)在循環(huán)體中的出現(xiàn)在循環(huán)體中的switch語(yǔ)句語(yǔ)句體內(nèi)時(shí),其作用只是跳出該體內(nèi)時(shí),其作用只是跳出該switch語(yǔ)句語(yǔ)句體;當(dāng)出現(xiàn)在循環(huán)體中,但并不在體;當(dāng)出現(xiàn)在循環(huán)體中,但并不在switch語(yǔ)句體內(nèi)時(shí),則在執(zhí)行語(yǔ)句體內(nèi)時(shí),則在執(zhí)行break后,后,跳出本層循環(huán)體跳出本層循環(huán)體。 5
31、.5 break語(yǔ)句和語(yǔ)句和continue語(yǔ)句語(yǔ)句例例5-11 用用break語(yǔ)句改寫(xiě)例語(yǔ)句改寫(xiě)例5-4:輸入并輸出一:輸入并輸出一個(gè)字符,遇個(gè)字符,遇“!”結(jié)束。結(jié)束。 #include main() char c; for(;) c=getchar(); putchar(c); if(c=!) break; 運(yùn)行例運(yùn)行例5-11 例例5-12 求求1+2+3+n=?,當(dāng)該值大于,當(dāng)該值大于5000時(shí)提前結(jié)束。時(shí)提前結(jié)束。 main() int i,s; s=0; for(i=1;i;i+) s=s+i; if(s5000) break; printf(s=%dn,s); 運(yùn)行例運(yùn)行例5-
32、12歷年真題精解歷年真題精解1. 有以下程序有以下程序main() int i,j,m=1; for(i=1;i0;j-) if(i*j3) break; m*=i*j; printf(m=%dn,m); 程序運(yùn)行后的輸出結(jié)果是程序運(yùn)行后的輸出結(jié)果是(1003)。A) m=6 B) m=2 C) m=4 D) m=5答案:答案: A解析:解析: 外循環(huán)控制變量外循環(huán)控制變量i由由13,內(nèi)循環(huán),內(nèi)循環(huán)控制變量控制變量j由由31;故當(dāng);故當(dāng)i為為2、j為為3時(shí)時(shí)(2*33),即外循環(huán)執(zhí)行第二,即外循環(huán)執(zhí)行第二次、內(nèi)循環(huán)執(zhí)行第一次時(shí)循環(huán)提次、內(nèi)循環(huán)執(zhí)行第一次時(shí)循環(huán)提前結(jié)束。此時(shí)前結(jié)束。此時(shí)m=m*i
33、*j=1*1*3*1*2*1*1=6。 2. 有以下程序有以下程序 main() int i=5; do if(i%3=1) if(i%5=2) printf(*%d,i); break; i+; while(i!=0); printf(n); 程序的運(yùn)行結(jié)果是程序的運(yùn)行結(jié)果是(0809)A) *7 B)*3*5 C)*5 D)*2*6答案:答案: A解析:解析: 只有同時(shí)滿(mǎn)足只有同時(shí)滿(mǎn)足i%3=1和和i%5=2才能執(zhí)行才能執(zhí)行break使循使循環(huán)結(jié)束,故最小為環(huán)結(jié)束,故最小為7(i+),故,故輸出結(jié)果為輸出結(jié)果為*7。* *考點(diǎn)考點(diǎn)06:continue語(yǔ)句語(yǔ)句1. 在在while和和do-
34、while循環(huán)中,循環(huán)中,continue語(yǔ)語(yǔ)句使句使 得流程直接跳到循環(huán)控制條件的測(cè)得流程直接跳到循環(huán)控制條件的測(cè)試部分,然后決定循環(huán)是否繼續(xù)進(jìn)行。試部分,然后決定循環(huán)是否繼續(xù)進(jìn)行。2. 在在for循環(huán)中,遇到循環(huán)中,遇到continue后,跳過(guò)循后,跳過(guò)循環(huán)體中余下的語(yǔ)句,而去對(duì)環(huán)體中余下的語(yǔ)句,而去對(duì)for語(yǔ)句中的語(yǔ)句中的表達(dá)式表達(dá)式3求值,然后進(jìn)行表達(dá)式求值,然后進(jìn)行表達(dá)式2的條件的條件測(cè)試,最后根據(jù)表達(dá)式測(cè)試,最后根據(jù)表達(dá)式2的值來(lái)決定的值來(lái)決定for循循環(huán)是否執(zhí)行。環(huán)是否執(zhí)行。 例例5-13 把輸入串中除小寫(xiě)元音字母以外的字符把輸入串中除小寫(xiě)元音字母以外的字符打印出來(lái)。打印出來(lái)。#
35、include main() char c; while(c=getchar()!=n) if(c=a|c=e|c=i|c=o|c=u) continue; putchar(c); 運(yùn)行例運(yùn)行例5-131. 以下程序運(yùn)行后的輸出結(jié)果是以下程序運(yùn)行后的輸出結(jié)果是(0903) main( ) int k=1,s=0; do if(k%2)!=0) continue; s+=k;k+; while(k10); printf(s=%dn,s); 歷年真題精解歷年真題精解答案:答案: s=0解析:解析: 進(jìn)入循環(huán),進(jìn)入循環(huán),k為為1,k%2=1故執(zhí)故執(zhí)行行continue,判斷循環(huán)條件,判斷循環(huán)條件k0;x-) if(x%3) printf(%d,x-); continue; printf(%d,-x); 程序的運(yùn)行結(jié)果是程序的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 河南省信陽(yáng)市(2024年-2025年小學(xué)五年級(jí)語(yǔ)文)統(tǒng)編版課后作業(yè)((上下)學(xué)期)試卷及答案
- 2024年《高等數(shù)學(xué)2》教案設(shè)計(jì):案例分析與啟示
- 2024年20加減法課件:提升教學(xué)效果的策略
- 2024年人力資源管理創(chuàng)新思維教案
- 2024年《條據(jù)》公開(kāi)課教案:提升學(xué)生學(xué)習(xí)能力
- 2024年市場(chǎng)營(yíng)銷(xiāo)學(xué)課件:創(chuàng)新與趨勢(shì)
- 河南省南陽(yáng)市2024-2025學(xué)年高三上學(xué)期11月期中考試 語(yǔ)文 含答案
- 2024年教案:深度解析20以?xún)?nèi)加減法的教學(xué)方法與技巧
- 2024保護(hù)環(huán)境人人有責(zé)主題演講稿(31篇)
- 2024年《剪窗花》教學(xué)課件
- 2024年共青團(tuán)入團(tuán)積極分子結(jié)業(yè)考試題庫(kù)及答案
- 湖北省武漢市部分學(xué)校2022-2023學(xué)年高一上學(xué)期期中調(diào)研考試物理試題(含解析)
- FX5U PLC應(yīng)用技術(shù)項(xiàng)目教程 課件 項(xiàng)目四 FX5UPLC模擬量控制與通信的編程及應(yīng)用
- 肥胖患者麻醉管理專(zhuān)家共識(shí)2023年版中國(guó)麻醉學(xué)指南與專(zhuān)家共識(shí)
- (正式版)JBT 14449-2024 起重機(jī)械焊接工藝評(píng)定
- 2024年中國(guó)大唐集團(tuán)浙江大唐烏沙山發(fā)電公司招聘筆試參考題庫(kù)含答案解析
- 2024年共青團(tuán)入團(tuán)考試題目及答案
- 兩癌篩查年度工作計(jì)劃
- 幼兒園《春天的電話(huà)》
- 通信工程大三學(xué)生就業(yè)能力展示
- 音樂(lè)劇院演出商業(yè)計(jì)劃書(shū)
評(píng)論
0/150
提交評(píng)論