版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第4章〓循環(huán)結(jié)構(gòu)4.1〓知識要點回顧循環(huán)結(jié)構(gòu)是程序中一種很重要的結(jié)構(gòu),其特點是:在給定條件成立時,反復(fù)執(zhí)行某程序段,直到條件不成立為止。給定的條件稱為循環(huán)條件,反復(fù)執(zhí)行的程序段稱為循環(huán)體。在C語言中有三種可以構(gòu)成循環(huán)結(jié)構(gòu)的循環(huán)語句:while,do-while和for。本章主要掌握的知識要點:(1)while循環(huán)結(jié)構(gòu)。(2)do-while循環(huán)結(jié)構(gòu)。(3)for循環(huán)結(jié)構(gòu)。4.1.1〓while語句表4-1列出了while語句的語句形式以及對應(yīng)的邏輯流程圖。表4-1〓while語句的語句形式語句形式流程圖while(表達(dá)式){〓語句段}其中,表達(dá)式是循環(huán)條件,語句為循環(huán)體。while語句的執(zhí)行過程是:首先計算表達(dá)式的值,當(dāng)值為真(非0)時,執(zhí)行循環(huán)體語句;然后再判斷表達(dá)式是否為真,如果為真,再執(zhí)行循環(huán)體語句,如此循環(huán)直到表達(dá)式的值為假為止。由以上執(zhí)行過程可知,while后面括號中表達(dá)式的值決定了循環(huán)體是否將被執(zhí)行。因此,進(jìn)入while循環(huán)后,一定要有能使此表達(dá)式的值變?yōu)?的操作,否則循環(huán)將會無限制地進(jìn)行下去,成為無限循環(huán)(死循環(huán))。若此表達(dá)式的值不變,則循環(huán)體內(nèi)應(yīng)有在某種條件下強(qiáng)行終止循環(huán)的語句(如break等)。說明:(1)while語句的循環(huán)體可能一次都不執(zhí)行,因為while后面括號中的表達(dá)式可能一開始就為0。(2)不要把由if語句構(gòu)成的分支結(jié)構(gòu)與由while語句構(gòu)成的循環(huán)結(jié)構(gòu)混同起來。若if后條件表達(dá)式的值為非0,其后的if子句只可能執(zhí)行一次;而while后條件表達(dá)式的值為非0時,其后的循環(huán)體語句可能重復(fù)執(zhí)行。在設(shè)計循環(huán)時,通常應(yīng)在循環(huán)體內(nèi)改變條件表達(dá)式中有關(guān)變量的值,使條件表達(dá)式的值最終變成0,以便能結(jié)束循環(huán)。下面的while語句便是死循環(huán):x=2;while(x<10){〓sum+=x;//死循環(huán),因為x的值沒有變化,永遠(yuǎn)小于10}printf("%d",sum);(3)當(dāng)循環(huán)體需要無條件循環(huán),條件表達(dá)式可以設(shè)為1(恒為真),但在循環(huán)體內(nèi)要有帶條件的非正常出口(break等)。例如,1+2+3+…+100的程序可以這樣設(shè)計:i=1;sum=0;while(1){〓if(i>100)break;〓sum+=i;〓i++;}(4)如果在執(zhí)行循環(huán)體的過程中,遇見了continue語句,則循環(huán)體重continue語句后面的其他語句將被跳過語句不通!,而直接進(jìn)入下一輪循環(huán)。將上例中的1+2+3+…+100的程序改寫成:語句不通!i=1;sum=0;while(1){〓sum+=i;〓i++;〓if(i<=100)continue;〓break;}(5)在循環(huán)體中,語句的先后位置必須符合邏輯,否則將會影響運(yùn)算結(jié)果。例如,將上例中的1+2+3+…+100的程序改寫成:i=1;sum=0;while(i<=100){〓i++;//縣計算i++,再計算sum值〓sum+=i;}while語句執(zhí)行結(jié)束以后,sum=5049,因為在執(zhí)行的過程中少加了第一項的值1。4.1.2〓do-while語句表4-2列出了do-while語句的語句形式以及對應(yīng)的邏輯流程圖。表4-2〓do-while語句的語句形式語句形式流程圖do{〓語句段}while(表達(dá)式);do-while語句的執(zhí)行過程是:先執(zhí)行循環(huán)中的語句,然后再判斷表達(dá)式是否為真,如果為真則繼續(xù)循環(huán);如果為假,則終止循環(huán)。因此,do-while循環(huán)至少要執(zhí)行一次循環(huán)語句。說明:(1)do是C語言的關(guān)鍵字,必須和while聯(lián)合使用。(2)do-while循環(huán)由do開始,至while結(jié)束。必須注意的是:在while(表達(dá)式)后的“;”不可丟,它表示do-while語句的結(jié)束。(3)while后一對括號中的表達(dá)式,可以是C語言中任意合法的表達(dá)式,由它控制循環(huán)是否執(zhí)行。(4)和while語句一樣,在使用do-while時,不要忘記初始化循環(huán)控制變量,否則程序的結(jié)果實不可預(yù)知的。(5)要在do-while語句的某處(表達(dá)式或循環(huán)體內(nèi))改變循環(huán)控制變量的值,否則極易造成死循環(huán)。(6)如果在執(zhí)行循環(huán)體的過程中遇見了break,則跳出do-while循環(huán)。(7)如果在執(zhí)行循環(huán)體的過程中,遇見了continue語句,則循環(huán)體重continue語句后面的其他語句將被跳過,??而直接進(jìn)入下一輪循環(huán)。??4.1.3〓for語句在C語言中,for語句使用最為靈活,它完全可以取代while語句。表4-3列出了for語句的語句形式以及對應(yīng)的邏輯流程圖。表4-3〓for語句的語句形式語句形式流程圖for(表達(dá)式1;表達(dá)式2;表達(dá)式3){〓語句段}它的執(zhí)行過程如下:求解表達(dá)式1。求解表達(dá)式2,若其值為真(非0),則執(zhí)行for語句中指定的內(nèi)嵌語句,然后執(zhí)行下面第(3)步;若其值為假(0),則結(jié)束循環(huán),轉(zhuǎn)到第(5)步。求解表達(dá)式3。轉(zhuǎn)回上面第(2)步繼續(xù)執(zhí)行。循環(huán)結(jié)束,執(zhí)行for語句下面的一個語句。說明:表達(dá)式1、表達(dá)式2、表達(dá)式3可以是任何類型的表達(dá)式。表達(dá)式1、表達(dá)式2、表達(dá)式3之間必須用分號隔開,表達(dá)式1只被執(zhí)行1次,通常用于初始化不循環(huán)控制變量。表達(dá)式2通常是循環(huán)的條件。而表達(dá)式3通常用于改變循環(huán)控制變量的值。表達(dá)式2可以為空,相當(dāng)于表達(dá)式2的值是真。因此,下面的循環(huán)是死循環(huán):for(a=0;;a++)〓printf("%d",a);既可以在for語句的前面單獨初始化循環(huán)控制變量,也可以利用for語句的表達(dá)式1初始化循環(huán)控制變量。下面兩個程序是等價的:for(a=1;a<=10;a++)〓printf("%3d",a);a=1;for(;a<=10;a++)〓printf("%3d",a);既可以在循環(huán)體內(nèi)改變循環(huán)控制變量的值,也可以利用for語句的表達(dá)式3改變循環(huán)控制變量的值。下面兩個程序是等價的:for(a=1;a<=10;a++)〓printf("%3d",a);a=1;for(;a<=10;){〓printf("%3d",a);〓a++;}表達(dá)式1和表達(dá)式3可以是一個簡單表達(dá)式,也可以是逗號表達(dá)式:for(sum=0,i=1;i<=100;i++)〓sum=sum+i;或:for(i=0,j=100;i<=j;i++,j--)〓k=i+j;如果在執(zhí)行循環(huán)體的過程中遇見了break,則跳出for循環(huán)。如果在執(zhí)行循環(huán)體的過程中,遇見了continue語句,則循環(huán)體重continue語句后面的其他語句將被跳過??,而直接進(jìn)入下一輪循環(huán)。??三種循環(huán)語句有以下異同點:(1)在使用while和do-while語句時,必須在while和do-while語句前初始化循環(huán)控制變量,但在for語句中卻可以利用表達(dá)式1來初始化循環(huán)控制變量。(2)在使用while和do-while語句時,循環(huán)控制變量的變化必須放在循環(huán)體中,而for語句卻可以利用表達(dá)式3來改變循環(huán)控制變量的值。(3)do-while語句的循環(huán)體至少被執(zhí)行1次,但while和for語句的循環(huán)體可能1次都不執(zhí)行。(4)while和do-while語句中不能省略循環(huán)條件,但for語句卻可以省略。(5)break和continue語句在這三種循環(huán)語句中的作用是相同的。(6)凡是用while語句能實現(xiàn)的循環(huán),必然能用for語句實現(xiàn),反之亦然。4.1.4〓break語句break語句通常用在循環(huán)語句和開關(guān)語句中。當(dāng)break用于開關(guān)語句switch中時,可使程序跳出switch而執(zhí)行switch以后的語句;如果沒有break語句,則將成為一個死循環(huán)而無法退出。當(dāng)break語句用于do-while、for、while循環(huán)語句中時,可使程序終止循環(huán)而執(zhí)行循環(huán)后面的語句,通常break語句總是與if語句聯(lián)在一起,即滿足條件時便跳出循環(huán)。(1)break語句對if-else的條件語句不起作用。(2)在多層循環(huán)中,一個break語句只向外跳一層。4.1.5〓continue語句continue語句的作用是跳過循環(huán)本中剩余的語句而強(qiáng)制執(zhí)行下一次循環(huán)。continue語句只用在for、while、do-while等循環(huán)體中,常與if條件語句一起使用,用來加速循環(huán)。執(zhí)行continue語句并沒終止整個循環(huán)。4.1.6〓常見錯誤舉例1.用“,”代替for語句中的“;”C語言規(guī)定,for語句中的三個表達(dá)式可以為空,但分號不能省略,如果用逗號代替分號,編譯器將由于找不到分號而報錯。下面的程序是錯誤的:for(a=1,a<=10,a++)//應(yīng)該為for(a=1;a<=10;a++)〓sum+=a;2.do-while語句漏掉了“;”正確錯誤do{〓sum+=a++;}while(a<=100);do{〓sum+=a++;}while(a<=100)3.循環(huán)語句中循環(huán)控制變量無變化而造成死循環(huán)仔細(xì)觀察下面的程序,因為漏掉了a++,而造成死循環(huán)。do{〓sum+=a;}while(a<=100);4.不初始化循環(huán)控制變量就進(jìn)入循環(huán)體下面的程序由于沒有對a初始化就進(jìn)入循環(huán)體,執(zhí)行結(jié)果是不可預(yù)知。main(){〓inta;〓longsum=0;〓do〓{〓〓sum+=a;〓}while(a<=100);〓printf("sum=%ld",sum);}
4.2〓實訓(xùn)內(nèi)容實驗一〓驗證性實驗一、實驗?zāi)康?1)驗證教材中的典型例題。(2)理解和掌握循環(huán)結(jié)構(gòu)程序設(shè)計的方法。(3)理解和掌握while、do-while、for語句的執(zhí)行流程。(4)掌握循環(huán)語句嵌套。(5)掌握break和continue的使用方法。二、實驗設(shè)備和儀器(1)IBMPC或兼容計算機(jī)。(2)Windows9x/2000/XP操作系統(tǒng)。(3)VisualC++6.0。三、實驗內(nèi)容(一)調(diào)試程序11.實驗要求求數(shù)列的和。2.程序代碼prog1.c#include<stdio.h>main(){〓inti;〓floatsum=1;〓for(i=1;i<=100;i++)〓〓sum=sum+1.0/(1+i*5);〓printf("數(shù)列的和的結(jié)果為%f\n",sum);}3.實驗步驟步驟一:在D盤的根目錄中創(chuàng)建一個以你的學(xué)號命名的文件夾,如D:\200710003。步驟二:打開“MicrosoftVisualC++”軟件,新建prog1.c文件,并輸入程序代碼,如圖4-1所示。圖4-1〓新建文件并輸入程序代碼步驟三:選擇“編譯”菜單命令對程序進(jìn)行編譯,如圖4-2所示。圖4-2〓編譯程序步驟四:若編譯有錯誤需要重新檢查;若編譯沒有錯誤,可以執(zhí)行程序,此時輸出結(jié)果如圖4-3所示。圖4-3〓程序運(yùn)行結(jié)果 按任意鍵關(guān)閉當(dāng)前窗口,保存后關(guān)閉prog1.c文件。(二)調(diào)試程序21.實驗要求求的近似值,精確到。2.程序prog2.c#include<stdio.h>#include<math.h>main(){〓inti;〓doubles=0,pi;〓for(i=1;1.0/(i*i)>=1e-10;i++)〓〓s=s+1.0/(i*i);〓pi=sqrt(s*6);〓printf("pi=%f\n",pi);}3.實驗步驟步驟一:打開“MicrosoftVisualC++”軟件,新建prog2.c文件,并輸入程序代碼,如圖4-4所示。圖4-4〓新建文件并輸入程序代碼步驟二:選擇“編譯”菜單命令對程序進(jìn)行編譯,如圖4-5所示。圖4-5〓編譯程序步驟三:若編譯有錯誤需要重新檢查;若編譯沒有錯誤,可以執(zhí)行程序,此時輸出結(jié)果如圖4-6所示。圖4-6〓程序運(yùn)行結(jié)果按任意鍵關(guān)閉當(dāng)前窗口,保存后關(guān)閉prog2.c文件。(三)調(diào)試程序31.實驗要求計算數(shù)列s=1!+2!+......+n!的值。2.程序代碼prog3.c源代碼如下:#include<stdio.h>main(){〓inti,n,t=1,s=0;〓printf("pleaseinputn:");〓scanf("%d",&n);〓for(i=1;i<=n;i++)〓{〓〓t=t*i;〓〓s=s+t;〓}〓printf("1!+2!+......+%d!=%d\n",n,s);}3.實驗步驟步驟一:打開“MicrosoftVisualC++”軟件,新建prog3.c文件,并輸入程序代碼,如圖4-7所示。圖4-7〓新建文件并輸入程序代碼步驟二:選擇“編譯”菜單命令對程序進(jìn)行編譯,如圖4-8所示。圖4-8〓編譯程序步驟三:若編譯有錯誤需要重新檢查。若編譯沒有錯誤,可以執(zhí)行程序。輸入4,輸出結(jié)果如圖4-9所示。圖4-9〓程序運(yùn)行結(jié)果1步驟四:按任意鍵關(guān)閉當(dāng)前窗口。再次輸入5,輸出結(jié)果如圖4-10所示圖4-10〓程序運(yùn)行結(jié)果2按任意鍵關(guān)閉當(dāng)前窗口,保存后關(guān)閉pro3.c文件。(四)調(diào)試程序41.實驗要求輸出n行以下圖形:*********************2.程序代碼prog4.c#include<stdio.h>main(){〓intn,i,j;〓printf("Inputn=");〓scanf("%d",&n);〓for(i=1;i<=n;i++)〓{〓〓for(j=1;j<=n-i;j++)〓〓〓printf("");//雙引號里面有一個空格字符〓〓for(j=1;j<=i;j++)〓〓〓printf("*");〓〓printf("\n");〓}}3.實驗步驟步驟一:打開“MicrosoftVisualC++”軟件,新建prog4.c文件,并輸入程序代碼,如圖4-11所示。圖4-11〓新建文件并輸入程序代碼步驟二:選擇“編譯”菜單命令對程序進(jìn)行編譯,如圖4-12所示。圖4-12〓編譯程序步驟三:若編譯有錯誤需要重新檢查;若編譯沒有錯誤,可以執(zhí)行程序。此時,輸入5,輸出結(jié)果如圖4-13所示。圖4-13〓程序運(yùn)行結(jié)果1步驟四:按任意鍵關(guān)閉當(dāng)前窗口。再次輸入8,輸出結(jié)果如圖4-14所示。圖4-14〓程序運(yùn)行結(jié)果2按任意鍵關(guān)閉當(dāng)前窗口,保存后關(guān)閉pro4.c文件。四、實驗報告要求(1)寫出程序一的實驗原理與考查知識點。(2)寫出程序二的實驗原理與考查知識點。(3)寫出程序三的實驗原理與考查知識點。(4)寫出程序四的實驗原理與考查知識點。
實驗二〓啟發(fā)性實驗一、實驗?zāi)康?1)掌握程序設(shè)計與調(diào)試的方法。(2)掌握循環(huán)結(jié)構(gòu)程序填空的方法。(3)掌握循環(huán)結(jié)構(gòu)程序改錯技巧。(4)掌握循環(huán)結(jié)構(gòu)程序編程能力二、實驗設(shè)備和儀器(1)IBMPC或兼容計算機(jī)。(2)Windows9x/2000/XP操作系統(tǒng)。(3)VisualC++6.0。三、實驗內(nèi)容1.填空題下面程序是求n以內(nèi)(包括n)能被3或7整除的所有自然數(shù)的倒數(shù)之和。運(yùn)行結(jié)果如下:Entern:(輸入提示)30<CR>(從鍵盤輸入30,<CR>代表Enter鍵)s=1.226323請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!程序如下:#include<stdio.h>main(){〓intn,i;〓doubles=0.0;〓printf("Entern:\n");〓scanf("%d",&n);〓for(i=1;__1__;i++)〓〓if(__2__)〓〓〓s+=__3__/i;〓printf("s=%f\n",s);}2.改錯題下面給定的程序功能是:求的近似值,直到最后一項的絕對值小于指定的數(shù)為止。運(yùn)行結(jié)果如下:Enterafloatnumber:(輸入提示)0.0001<CR>(從鍵盤輸入0.0001,<CR>代表Enter鍵)3.1414請改正程序中的兩處錯誤,使程序能輸出正確的結(jié)果。注意:程序中/************found************/表示錯誤就在下面一行。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!程序如下:#include<math.h>#include<stdio.h>main(){〓ints;〓floatnum,pi,t,n;〓t=1;〓pi=0;〓n=1;〓s=1;〓printf("Enterafloatnumber:\n");〓scanf("%f",&num);〓/********found********/〓while(t>=num)〓{〓〓pi=pi+t;〓〓n=n+2;〓〓s=-s;〓〓/********found********/〓〓t=s%n;〓}〓pi=pi*4;〓printf("%6.4f\n",pi);}3.編程題w是一個大于10的無符號整數(shù),若w是n(n≥2)位的整數(shù),求出w后n-1位的數(shù)。部分源代碼已經(jīng)給出。例如,輸入5923,則輸出923。程序如下:#include<stdio.h>main(){〓/*將下面的代碼補(bǔ)充完整*/}
實驗三〓啟發(fā)性實驗一、實驗?zāi)康?1)進(jìn)一步掌握C程序的編輯、編譯、連接和運(yùn)行的過程。(2)熟悉循環(huán)結(jié)構(gòu)的程序設(shè)計方法。(3)熟練使用循環(huán)嵌套的使用。二、實驗設(shè)備和儀器(1)IBMPC或兼容計算機(jī)。(2)Windows9x/2000/XP操作系統(tǒng)。(3)VisualC++6.0。三、實驗內(nèi)容1.填空題統(tǒng)計所有小于等于20的素數(shù)的個數(shù)。運(yùn)行結(jié)果如下:Theprimenumberbetween3to20:35711131719Thenumberofprimeis:7請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:程序中//是對問題的提示。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!程序如下:#include<stdio.h>main(){〓intn=20,count=0;〓inti,j;〓printf("\nTheprimenumberbetween3to%d:\n",n);〓for(i=3;i<=n;i++)〓{〓〓for(___1___;j<i;j++)〓〓〓if(___2___)//判斷是否整除〓〓〓〓break;〓〓if(___3___)//判斷上面循環(huán)結(jié)束時,循環(huán)變量j的值〓〓{〓〓〓count++;〓〓〓printf(count%15"%5d":"\n%5d",i);〓〓}〓}〓printf("\nThenumberofprimeis:%d\n",count);}2.改錯題從鍵盤輸入m,計算如下公式的值:運(yùn)行結(jié)果如下:2000<CR>(從鍵盤輸入2000,<CR>代表Enter鍵)Theresultis0.000160請改正程序中的兩處錯誤,使程序能輸出正確的結(jié)果。注意:程序中/************found************/表示錯誤就在下面一行。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!程序如下:#include<stdio.h>main(){〓intm,i,d;〓doubley=0;〓scanf("%d",&m);〓/************found************/〓for(i=100,i<=m,i+=100)〓{
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州城市職業(yè)學(xué)院《銷售終端設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴州財經(jīng)大學(xué)《單片機(jī)原理及應(yīng)用實驗》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴州電力職業(yè)技術(shù)學(xué)院《大學(xué)數(shù)學(xué)Ⅱ微積分》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年-山西省安全員A證考試題庫
- 廣州珠江職業(yè)技術(shù)學(xué)院《氣力輸送與廠內(nèi)運(yùn)輸》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴陽學(xué)院《商務(wù)日語口譯》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年湖北建筑安全員《C證》考試題庫及答案
- 廣州應(yīng)用科技學(xué)院《有機(jī)化學(xué)實驗二》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025上海市安全員A證考試題庫及答案
- 廣州鐵路職業(yè)技術(shù)學(xué)院《精密機(jī)械設(shè)計基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 專升本英語寫作專題講解課件
- 平安保險授權(quán)委托書
- 員工安全培訓(xùn)教育制度
- 深圳證券交易所
- 各種管道護(hù)理評分標(biāo)準(zhǔn)
- 體育賽事志愿者管理
- 遼寧華電高科環(huán)保技術(shù)有限公司油泥煤循環(huán)流化床協(xié)同資源化工業(yè)化試驗項目環(huán)境影響評價報告書
- 復(fù)旦大學(xué)普物B期末考試試卷
- 剪映教程PPT版本新版剪影零基礎(chǔ)教學(xué)課程課件
- 非煤礦山安全風(fēng)險分級管控與安全隱患排查治理u000b雙重預(yù)防機(jī)制建設(shè)知識
- GB/T 35223-2017地面氣象觀測規(guī)范氣象能見度
評論
0/150
提交評論