《C語言程序設計 》課件-第3章_第1頁
《C語言程序設計 》課件-第3章_第2頁
《C語言程序設計 》課件-第3章_第3頁
《C語言程序設計 》課件-第3章_第4頁
《C語言程序設計 》課件-第3章_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

項目三循環(huán)程序設計——打魚還是曬網(wǎng)任務一while語句任務二do…while語句任務三for語句任務四實例體驗任務五算法歸納任務六流程圖任務七項目實現(xiàn)任務八項目擴展思考與練習

中國有句俗語叫“三天打魚兩天曬網(wǎng)”。某人從1990年1月1日起開始“三天打魚兩天曬網(wǎng)”,問這個人在1994年3月1日這一天是在“打魚”,還是在“曬網(wǎng)”?

根據(jù)題意可以將解題過程分為以下三步:

(1)計算從1990年1月1日開始至1994年3月1日共有多少天。

(2)由于“打魚”和“曬網(wǎng)”的周期為5天,所以將計算出的天數(shù)用5去除。

(3)根據(jù)余數(shù)判斷他是在“打魚”還是在“曬網(wǎng)”。

若余數(shù)為1,2,3,則他是在“打魚”,否則是在“曬網(wǎng)”。

在這三步中,關鍵是第一步。求從1990年1月1日至1994年3月1日有多少天,要判斷經(jīng)歷年份中是否有閏年,閏月為29天,平月為28天。閏年的方法可以用以下偽語句描述。

如果某個年份能被4除盡且不能被100除盡或能被400除盡,則該年是閏年,否則不是閏年。

任務一while語句

while語句的一般形式為

while(表達式)語句;

其中表達式是循環(huán)條件,語句為循環(huán)體。

while語句的語義是計算表達式的值,當值為真(非0)時,執(zhí)行循環(huán)體語句;當值為假(0)時,結束循環(huán)。其執(zhí)行過程可用圖3.1表示。圖3.1while語句執(zhí)行過程

【例3-1】用while語句實現(xiàn)階乘5!,如圖3.2所示。

main()

{

inti;

ints;

i=1;

s=1;

while(i<=5)

{

s=s*i;

i++;

}

printf("5!結果為:%d\n",s);

}

圖3.2用while語句實現(xiàn)5!

本例程序將執(zhí)行n次循環(huán),每執(zhí)行一次,n值減1。

循環(huán)體如包含有一個以上的語句,則必須用{}括起來,組成復合語句。

任務二do…while語句

do…while語句的一般形式為

do

{語句}

while(表達式);

while語句先測試控制表達式的值再執(zhí)行循環(huán)體,而do…while語句先執(zhí)行循環(huán)體再測試控制表達式的值。如果控制表達式的值一開始就是假,while語句的循環(huán)體一次都不執(zhí)行,而do…while語句的循環(huán)體則先執(zhí)行循環(huán)中的語句,然后再判斷表達式是否為真,如果為真則繼續(xù)循環(huán);如果為假,則終止循環(huán)。因此,do…while循環(huán)至少要執(zhí)行一次循環(huán)語句。其執(zhí)行過程可用圖3.3表示。

圖3.3do…while執(zhí)行示意圖

【例3-3】用do…while語句實現(xiàn)階乘5!。

其流程圖如圖3.4所示。

圖3.4用do…while語句實現(xiàn)5!

任務三for語句

在C語言中,for語句使用最為靈活,它完全可以取代while語句。它的一般形式為for(表達式1;表達式2;表達式3)語句

它的執(zhí)行過程如下:

①求解表達式1。

②求解表達式2,若其值為真(非0),則執(zhí)行循環(huán)體,然后執(zhí)行下面第③步;若其值為假(0),轉到第⑤步。

③求解表達式3。

④轉回上面第②步。

⑤循環(huán)結束,執(zhí)行for語句下面的一個語句。

其執(zhí)行過程可用圖3.5表示。

圖3.5for語句執(zhí)行過程

【例3-4】用for語句實現(xiàn)階乘5!。

其流程圖如圖3.6所示。

圖3.6用for語句實現(xiàn)5!

注意以下幾點:

①for循環(huán)中的“表達式1?(循環(huán)變量賦初值)”、“表達式2?(循環(huán)條件)”和“表達式3?(循環(huán)變量增量)”都是選擇項,即可以缺省,但“;”不能缺省。

②省略了“表達式1?(循環(huán)變量賦初值)”,表示不對循環(huán)控制變量賦初值。

③省略了“表達式2?(循環(huán)條件)”,則不做其他處理時便成為死循環(huán)。

④省略了“表達式3?(循環(huán)變量增量)”,則不對循環(huán)控制變量進行操作,這時可在語句體中加入修改循環(huán)控制變量的語句。

任務四實例體驗

在設計完整的項目之前,先演示一個具體的例子,從這個例子可以體會本項目的處理過程。比如要計算1994年3月15日是在打魚還是在曬網(wǎng),其步驟如下。

任務五算法歸納

根據(jù)上一節(jié)的分析基礎和實例體驗,我們可以設計以下幾步實現(xiàn)功能,這些步驟即可稱為算法。

任務六流程圖

項目簡要流程圖如圖3.7所示?,F(xiàn)將“統(tǒng)計從1990-1-1到y(tǒng)ear-month-date的天數(shù)到day_count”這部分進行細化,流程圖如圖3.8所示。圖3.7打魚還是曬網(wǎng)流程簡圖圖3.8打魚還是曬網(wǎng)程序流程圖

任務七項目實現(xiàn)

用while語句實現(xiàn)項目的代碼如下。

#include"stdio.h"

#include"conio.h"

main()

用do…while實現(xiàn)項目的代碼如下:

用for實現(xiàn)項目的代碼如下:

編譯成功后,出現(xiàn)如圖3.9所示的提示輸入界面。

圖3.9提示輸入界面

輸入1994-3-15后的運行結果如圖3.10所示。

圖3.10運行結果

任務八項目擴展

通過對項目的學習和相關知識的回顧,可知C語言的循環(huán)就是在給定條件成立時,反復執(zhí)行某程序段,直到條件不成立為止。但是有時候只有一個循環(huán)是遠遠不夠的。例如,電影院的座位由若干行組成,每一行又由若干列組成,為了確定每一個座位,必須確定它的行和列,單獨只用一個循環(huán)語句是很難實現(xiàn)的,必須用兩個循環(huán)語句來實現(xiàn),這就是循環(huán)語句的嵌套,其基本格式為

循環(huán)嵌套:一個循環(huán)(稱為“外循環(huán)”)的循環(huán)體內包含另一個完整循環(huán)(稱為“內循環(huán)”)。內循環(huán)中還可以包含循環(huán),形成多層循環(huán)。(循環(huán)嵌套的層數(shù)理論上無限制。)

說明:

(1)嵌套的循環(huán)控制變量不能相同。(循環(huán)控制變量是控制循環(huán)次數(shù)的,如內外相同,程序就無法判斷以哪一個為準了。)

(2)內循環(huán)變化快,外循環(huán)變化慢。(外:執(zhí)行一次;內:從頭到尾全部循環(huán)一次。)

(3)正確確定循環(huán)體。

(4)循環(huán)控制變量常與求解的問題掛鉤。(循環(huán)控制變量是控制循環(huán)次數(shù)的,它經(jīng)常能與求解的問題掛鉤。也就是說,如果控制變量的趨勢與求解問題的某一個量吻合的話,就經(jīng)常用控制變量充當求解問題當中的某一個量。

(5)執(zhí)行過程如下。

第1步:執(zhí)行表達式1,一般是給變量賦值;

第2步:執(zhí)行表達式2,一般是條件判斷,如果成立則執(zhí)行表達式4,否則就會結束該雙重循環(huán);

第3步:如果表達式2成立則執(zhí)行表達式4,一般是給內循環(huán)的變量賦初值;

第4步:判斷表達式5是否成立,如果不成立則轉到表達式2執(zhí)行,否則執(zhí)行循環(huán)體內的語句;

第5步:執(zhí)行完語句后,接著執(zhí)行表達式6,然后執(zhí)行表達式3,這兩個表達式一般是使循環(huán)變量發(fā)生變化。

(6)程序流程圖如圖3.11所示。圖3.11程序流程圖

思?考?與?練?習

一、選擇題

1.下列運算符中優(yōu)先級最高的是()。

A.?: B.&&

C.+ D.!=

2.以下描述中正確的是()。

A.由于do…while循環(huán)中循環(huán)體語句只能是一條可執(zhí)行語句,所以循環(huán)體內不能使用復合語句

B.do…while循環(huán)由do開始,while(表達式)后面不能寫分號

C.在do…while循環(huán)體中,一定要有能使while后面表達式的值變?yōu)榱?“假”)的操作

D.do…while循環(huán)中,根據(jù)情況可以省略while

3.在C語言中,當while語句中的條件為()時,結束該循環(huán)。

A.0

B.1

C.false

D.非0

4.下面有關for循環(huán)的描述正確的是()。

A.for循環(huán)只能用于循環(huán)次數(shù)已經(jīng)確定的情況

B.for循環(huán)先執(zhí)行循環(huán)體語句,后判斷表達式

C.在for循環(huán)中,不能用break語句跳出循環(huán)

D.for循環(huán)體中,可以包含多條語句,但要用花括號括起來

5.運行程序段intn=0;while(n++<=2);printf(“%d”,n);的結果是()。

A.2 B.3

C.4 D.有語法錯

6.設有程序段

intk=10;

while(k=0)k=k-1;

則下面描述中正確的是()。

A.while循環(huán)執(zhí)行10次 B.循環(huán)是無限循環(huán)

C.循環(huán)體語句一次也不執(zhí)行 D.循環(huán)體語句執(zhí)行一次

7.以下能正確計算1*2*3*…*10的程序段是()。

8.設有如下程序段,則()。

intx=0,s=0;

while(!x!=0)s+=++x;

printf("%d",s);

A.運行程序段后輸出0

B.運行程序段后輸出1

C.程序段中的控制表達式是非法的

D.程序段執(zhí)行無限次

9.語句while(!E);中的表達式!E等價于()。

A.E==0 B.E!=1

C.E!=0 D.E==1

10.以下不是無限循環(huán)的語句是()。

A.for(y=0,x=1;x>++y;x=i++)i=x;

B.for(;;x++=i)

C.while(1){x++;}

D.for(i=10;;i--)sum+=i;

11.下面程序的功能是將從鍵盤輸入的一對數(shù),由小到大排序輸出。當輸入一對相等數(shù)時結束循環(huán),請選擇填空。橫線處應填()。

12.下面程序的功能是從鍵盤輸入的一組字符中統(tǒng)計出大寫字母的個數(shù)m和小寫字母的個數(shù)n,并輸出m、n中的較大者,請選擇填空。橫線處【1】應填(),【2】應填()。

【1】A.c=getchar()

B.getchar()

C.c==getchar()

D.scanf(“%c”,c);

【2】A.n:m

B.m:n

C.n,m

D.m,n

二、填空題

1.下面程序段是從鍵盤輸入的字符中統(tǒng)計數(shù)字字符的個數(shù),用換行符結束循環(huán)。請?zhí)羁铡?/p>

2.有1020個西瓜,第一天賣一半多兩個,以后每天賣剩下的一半多兩個,問幾天以后能賣完?請?zhí)羁铡?/p>

3.執(zhí)行以下程序后的輸出結果是______________。

4.下面程序的功能是計算1~10的奇數(shù)之和及偶數(shù)之和。

5.下面程序的功能是計算1-3+5-7+…-99+101的值,請?zhí)羁铡?/p>

6.當運行以下程序時,從鍵盤輸入right?<CR>(<CR>代表回車),則下面程序的運行結果是

7.執(zhí)行下面程序段后,k的值是

。

k=1;n=263;

do{k*=n%10;n/=10;}while(n);

8.當運行以下程序時,從鍵盤輸入-10<CR>(<CR>代表回車),則下面程序的運行結果是

。

9.下面程序段的功能是找出整數(shù)的所有因子,請?zhí)羁铡?/p>

10.雞兔共有30只,腳共有90個,下面程序段是計算雞兔各有多少只,請?zhí)羁铡?/p>

11.下面程序的功能是求出用數(shù)字0~9可以組成多少個沒有重復的三位偶數(shù),請?zhí)羁铡?/p>

12.下面程序的功能是輸出1~100每位數(shù)的乘積大于每位數(shù)的和的數(shù),請?zhí)羁铡?/p>

三、編程題

1.輸入一行字符,輸出其中字母的個數(shù)。例如,輸入“Et2f5F218”,輸出結果為4。

2.編寫一個程序,對用戶輸入的任意一組字符,如{3,1,4,7,2,1,1,2,2},輸出其中出現(xiàn)次數(shù)最多的字符,并顯示其出現(xiàn)次數(shù)。如果有多個字符出現(xiàn)次數(shù)均為最大且相等,則輸出最先出現(xiàn)的那個字符和它出現(xiàn)的次數(shù)。例如,上面輸入的字符集合中,“1”和“2”都出現(xiàn)了3次,均為最大出現(xiàn)次數(shù),因為“1”先出現(xiàn),則輸出字符“1”和它出現(xiàn)的次數(shù)3次。

3.使用循環(huán)語句打印出如下圖案,其中行數(shù)由鍵盤輸入,并嘗試輸出其他的圖案。

*

***

*****

*******

4.編寫程序:從3個紅球、5個白球、6個黑球中任意取出8個球,且其中必須有白球,輸出所有可能的方案。

5.輸出階梯形的9*9口訣表。

6.編程實現(xiàn)判斷一個整數(shù)是否為“水仙花數(shù)”。所謂“水仙花數(shù)”是指一個三位的整數(shù),其各位數(shù)字的立方和等于該數(shù)本身。例如:153是一個“水仙花數(shù)”,因為153=13+53+33。

7.有一分數(shù)序列:2/1,3/2,5/3,8/5,13/8,21/13…,求出這個數(shù)列的前20項之和。

8.一個人很倒霉,不小心打碎了一位婦女的一籃子雞蛋。為了賠償便詢問籃子里有多少雞蛋。那婦女說,她也不清楚,只記得每次拿兩個則剩一個,每次拿三個則剩兩個,每次拿五個則剩四個,若每個雞蛋1元,請你幫忙編程,計算最少應賠多少錢?

9.編寫一個程序,找出100~1000的所有姐妹素數(shù)。姐妹素數(shù)是指相鄰兩個奇數(shù)均為素數(shù)。

10.孫悟空在大鬧蟠桃園的時候,第一天吃掉了所有桃子總數(shù)的一半多一個,第二天又將剩下的桃子吃掉一半多一個,以后每天吃掉前一天剩下的一半多一個,到第N天準備吃的時候只剩下一個桃子。這下可把神仙們心疼壞了,請幫忙計算一下,孫悟空第一天開始吃桃子的時候桃園一共有多少個桃子。其中N從鍵盤輸入。

11.一個球從100?m高度自由落下,每次落地后反彈回原高度的一半,再落下,再反彈。求它在第十次落地時,共經(jīng)過多少米?第十次反彈多高?

12.某班同學上體育課,從1開始報數(shù),共38人,老師要求按1,2,3…重復報數(shù),報數(shù)為1的同學往前走一步,報數(shù)為2的同學往后退一步,試分別將往前走一步和往后退一步的同學的序號打印出來。

13.從鍵盤輸入一個整數(shù)N,統(tǒng)計出1~N能被7整除的整數(shù)的個數(shù),以及這些能被7整除的數(shù)的和。

屏幕提示樣例如下:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論