版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
結(jié)構(gòu)化程序設(shè)計(jì)返回本章導(dǎo)讀
3.1.1C程序?qū)嵗祷乇竟?jié)目錄C程序?qū)嵗纠?.1】編程實(shí)現(xiàn):輸入一個(gè)長方形的二邊長,求長方形的面積并輸出。/*程序名為l3_1.cpp。*/#include"stdio.h"main(){floata,b,s;scanf("%f%f",&a,&b);s=a*b;printf("Theareaofrectangleis%5.2f.\n",s);}
返回本節(jié)目錄程序運(yùn)行情況如下:輸入:3.04.0<CR>輸出:Theareaofrectangleis12.00.這個(gè)程序?qū)儆陧樞蚪Y(jié)構(gòu),程序是按照書寫的順序自上而下一步步執(zhí)行,程序中的每一條語句都被執(zhí)行一次,且僅能被執(zhí)行一次?!纠?.1】編程3.1.2順序結(jié)構(gòu)語句1C語言的順序結(jié)構(gòu)語句可以分為四大類:1.表達(dá)式語句表達(dá)式的后面加一個(gè)分號(hào)就構(gòu)成了一個(gè)語句,例如:sum=a+b;。事實(shí)上,C語言中有使用價(jià)值的表達(dá)式語句主要有3種:(1)賦值語句。例如:sum=a+b;(2)自動(dòng)增1、減1運(yùn)算符構(gòu)成的表達(dá)式語句。例如:i++;(3)逗號(hào)表達(dá)式語句。例:x=1,y=2;2.空語句語句僅有一個(gè)分號(hào)“;”,它表示什么也不做。一般和后面章節(jié)所講循環(huán)語句結(jié)合使用起到延時(shí)作用。3.復(fù)合語句由"{"和"}"把一些變量定義和執(zhí)行語句組合在一起,稱之為復(fù)合語句,又稱語句塊。復(fù)合語句的語句形式如下:{語句1;語句2;…;語句n;}返回本節(jié)目錄返回本節(jié)目錄例如:{inta=0,b=1,sum;sum=a+b;printf("%d",sum);}【注意】與C語言中的其他語句不同,復(fù)合語句不以分號(hào)作為結(jié)束符,若復(fù)合語句的"}"后面出現(xiàn)分號(hào),那不是該復(fù)合語句的組成成分,而是單獨(dú)的一個(gè)空語句。在復(fù)合語句起始部分可以有變量定義,如:"inta=0,b=1,sum;",也可以沒有。復(fù)合語句的"{}"內(nèi)可能會(huì)有多個(gè)語句,但在語法上把它整體上視為一條語句看待。4.函數(shù)調(diào)用語句由一個(gè)函數(shù)調(diào)用加上一個(gè)分號(hào)組成一個(gè)語句,如:
scanf("%d%d",&a,&b);printf("a=%d,b=%d\n",a,b);3.1.2順序結(jié)構(gòu)語句2C程序?qū)嵗纠?.2】由鍵盤輸入兩個(gè)整數(shù)給變量a和b,然后輸出a和b,在交換a和b中的值后,再輸出a和b,驗(yàn)證兩個(gè)變量中的數(shù)值是否正確地進(jìn)行了交換。
/*程序名為l3_2.cpp。*/#include"stdio.h"main(){inta,b,t;printf("Enteraandb:\n");scanf("%d%d",&a,&b);printf("a=%d,b=%d\n",a,b);t=a;a=b;b=t;printf("a=%d,b=%d\n",a,b);}程序運(yùn)行情況如下:Enteraandb:123456<CR>a=123,b=456a=456,b=123返回本節(jié)目錄3.1.3程序?qū)嵱?xùn)【例3.2】返回本節(jié)目錄注意:在程序中交換兩個(gè)變量a和b的值,不可以簡單地用:a=b;b=a;兩條語句來實(shí)現(xiàn)。假設(shè)a和b的值分別為23和78,賦值語句a=b;將使a的值變?yōu)?8,接下來的b=a;使b的值變?yōu)?8,這樣,a和b的值最終都變?yōu)?8。所以在本例中引入了中間變量t,用來臨時(shí)存放a的值,這樣才能完成變量a和b的正確交換。【例3.3】輸入一個(gè)double類型的數(shù),使該數(shù)保留小數(shù)點(diǎn)后兩位,對(duì)第三位小數(shù)進(jìn)行四舍五入處理,然后輸出此數(shù),以便驗(yàn)證處理是否正確。/*程序名為l3_3.cpp。*/#include"stdio.h"main(){doublex;printf("Inputx:\n");scanf("%lf",&x);3.1.3程序?qū)嵱?xùn)【例3.3】3.1.3程序?qū)嵱?xùn)【例3.3】返回本節(jié)目錄printf("(1)x=%f\n",x);/*將x輸出*/
x=x*100;x=x+0.5;x=(int)x;x=x/100;/*將x擴(kuò)大100倍,加上0.5之后取整,再縮小100倍*/
printf("(2)x=%f\n",x);/*將四舍五入后的x輸出*/}程序運(yùn)行情況如下:Inputx:3.14159<CR>則輸出的結(jié)果為:(1)x=3.141590(2)x=3.1400003.1.3程序?qū)嵱?xùn)【例3.4】返回本節(jié)目錄【例3.4】從鍵盤上輸入一大寫英文字母,要求改用相應(yīng)的小寫字母輸出。/*程序名為l3_4.cpp。*/#include"stdio.h"main(){charc1,c2;scanf("%c",&c1);printf("Theuppercaseis%c.\n",c1);c2=c1+'a'-'A';printf("Thelowercaseis%c.\n",c2);}程序運(yùn)行時(shí):輸入:B<CR>輸出:TheuppercaseisB.Thelowercaseisb.3.2選擇結(jié)構(gòu)程序設(shè)計(jì)3.2.1選擇結(jié)構(gòu)的C程序?qū)嵗?.2.2if語句3.2.3switch語句3.2.4程序?qū)嵱?xùn)
返回本章目錄3.2.1選擇結(jié)構(gòu)的C程序?qū)嵗?/p>
返回本節(jié)目錄
【例3.5】請(qǐng)輸入兩個(gè)整數(shù)a,b,比較a+b和a×b哪個(gè)大,輸出判斷結(jié)果。
/*程序名為l3_5.cpp。*/#include"stdio.h"main(){inta,b,s1,s2;printf("請(qǐng)輸入兩個(gè)整數(shù)a,b:");scanf("%d,%d",&a,&b);s1=a+b;s2=a*b; /*求兩個(gè)數(shù)的和、積*/
if(s1>s2)printf("(a+b)>(a*b)/n");/*語句A*/
elseprintf("(a+b)<=(a*b)\n"); /*語句B*/}運(yùn)行結(jié)果為:請(qǐng)輸入兩個(gè)整數(shù)a,b:2,3<CR>(a+b)<=(a*b)在這個(gè)程序中使用了if分支語句,它不像前面的程序那樣,按照語句的書寫順序一步步執(zhí)行下去,而是根據(jù)所給條件的真假,選擇兩者其中之一執(zhí)行。該程序執(zhí)行的過程是:比較兩數(shù)的和與積,如果s1>s2,則執(zhí)行語句A(跳過語句B不執(zhí)行),否則,就跳過語句A執(zhí)行語句B??梢奿f語句在程序中起到了改變語句執(zhí)行順序的作用。if語句就是我們?cè)谙乱还?jié)中要介紹的條件分支語句。3.2.1選擇結(jié)構(gòu)的C程序?qū)嵗Y(jié)果
返回本節(jié)目錄3.2.2
if語句1.if語句的一般形式返回本節(jié)目錄2.if-else中的復(fù)合語句3.非關(guān)系、非邏輯表達(dá)式構(gòu)成的條件表達(dá)式4.if語句的嵌套1.if語句的一般形式1
1.if語句的一般形式:if語句有兩種形式:(1)不含else子句的if語句語句形式如下:if(<表達(dá)式>)<語句1>例如if(a<b){t=a;a=b;b=t;}其中,if是C語言的關(guān)鍵字,表達(dá)式兩側(cè)的圓括號(hào)不可少,最后是一條語句,稱為if子句。如果在if子句中需要多個(gè)語句,則應(yīng)該使用花括號(hào)把一組語句括起來組成復(fù)合語句,這樣在語法上仍滿足"一條語句"的要求。執(zhí)行過程:首先計(jì)算緊跟在if后面一對(duì)圓括號(hào)中的表達(dá)式的值,如果該表達(dá)式的值為非零(“真”),則執(zhí)行其后的if子句,然后去執(zhí)行if語句后的下一個(gè)語句。如果該表達(dá)式的值為零(“假”),則跳過if子句,直接執(zhí)行if語句后的下一個(gè)語句。返回3.2.2目錄1.if語句的一般形式2
(2)含else子句的if語句語句形式如下:if(<表達(dá)式>)<語句體1>[else<語句體2>]執(zhí)行過程:首先計(jì)算<表達(dá)式>的值,如果該表達(dá)式的值為非零("真"),則執(zhí)行<語句體1>,如果該表達(dá)式的值為零("假"),則跳過<語句體1>,直接執(zhí)行<語句體2>,兩者執(zhí)行其一后再去執(zhí)行if語句后的下一個(gè)語句。返回3.2.2目錄1.if語句的一般形式實(shí)例【例3.6】求分段函數(shù)的值,如果x≥0,y=2x+1,否則,
y=0。#include"stdio.h"main()/*程序名為l3_6.cpp。*/{intx,y;/*變量y存放f(x)的值*/
printf("請(qǐng)輸入x的值:");
scanf("%d",&x);if(x>=0)y=2*x+1;elsey=0;printf("當(dāng)x=%d時(shí),f(x)=%d",x,y);}返回3.2.2目錄1.if語句的一般形式實(shí)例運(yùn)行結(jié)果:請(qǐng)輸入x的值:3<CR>
當(dāng)x=3時(shí),f(x)=7因?yàn)檩斎離=3,那么x>=0為真,所以輸出2*3+1=7。C語言中有一種特有的條件運(yùn)算符“?:”,我們?cè)谇懊嬲鹿?jié)已作介紹,它在某種程序上可以起到邏輯判斷的作用。本例中的if語句也可用條件運(yùn)算符表達(dá)式實(shí)現(xiàn)如下:y=x>=0?2*x+1:0;但有些判斷不能用條件表達(dá)式完成,或者很繁瑣、表達(dá)不清晰。返回3.2.2目錄2.if-else中的復(fù)合語句2.
if-else中的復(fù)合語句
如果兩個(gè)分支中需要執(zhí)行的語句不止一條,必須用“{}”括起來,作為一個(gè)復(fù)合語句使用。若只是一條語句,“{}”可以省略。【注意】(1)if后面的<表達(dá)式>一定要有括號(hào);(2)if和else同屬于一個(gè)if語句,else不能作為語句單獨(dú)使用,它只是if語句的一部分,與if配對(duì)使用,因此程序中不可以沒有if而只有else;(3)只能執(zhí)行與if有關(guān)的語句或者執(zhí)行與else有關(guān)的語句,而不可能同時(shí)執(zhí)行兩者;(4)如果<語句1>和<語句2>是非復(fù)合語句,那么該語句一定要以分號(hào)結(jié)束,
(5)if語句的表達(dá)式可以是任意類型的C語言的合法的表達(dá)式,但計(jì)算結(jié)果必須為整型、字符型或浮點(diǎn)型之一。返回3.2.2目錄3.非關(guān)系、非邏輯表達(dá)式構(gòu)成的條件表達(dá)式13.非關(guān)系、非邏輯表達(dá)式構(gòu)成的條件表達(dá)式
【例3.10】以"賦值表達(dá)式"為分支條件的實(shí)例。
/*程序名為l3_10.cpp。*/
#include"stdio.h"main(){ints;if(s=2)printf("hello");elseprintf("error");}if后面圓括號(hào)中的<表達(dá)式>表示分支條件<表達(dá)式>的類型不限于邏輯/關(guān)系表達(dá)式,可以是任意的C語言有效表達(dá)式(如賦值表達(dá)式,算術(shù)表達(dá)式等等),因此也可以是作為表達(dá)式特例的常量或變量。返回3.2.2目錄3.非關(guān)系、非邏輯表達(dá)式構(gòu)成的條件表達(dá)式2【例3.10】中的條件表達(dá)式是一個(gè)賦值表達(dá)式,并不是判斷s是否等于2。相當(dāng)于if(2)printf("hello");,這是合法的。由于該條件表達(dá)式的值是非零值,恒為真,故本程序的printf("error");無論如何都不會(huì)被執(zhí)行。if語句最終執(zhí)行哪一個(gè)分支,取決于條件表達(dá)式的計(jì)算結(jié)果。同一個(gè)條件的也可以用多種表達(dá)方式?!纠?.11】以"變量"為分支條件的實(shí)例。
/*程序名為l3_11.cpp。*/#include"stdio.h"main(){intx,y;scanf("%d",&x);if(x)y=1;elsey=-1;返回3.2.2目錄3.非關(guān)系、非邏輯表達(dá)式構(gòu)成的條件表達(dá)式3printf("y=%d\n",y);}現(xiàn)把程序中if(x)改成if(x!=0),此時(shí)雖然條件表達(dá)式寫法不同,但是完成的功能是相同的。下面兩種表示方法經(jīng)常使用:if(x)等價(jià)于if(x!=0)if(!x)等價(jià)于if(x==0)返回3.2.2目錄4.if語句的嵌套1
在一個(gè)if語句中又包含另一個(gè)if語句,從而構(gòu)成了if語句的嵌套使用。內(nèi)嵌的if語句既可以嵌套在if子句中,也可以嵌套在else子句中。例如:
【例3.12】輸入a,b兩個(gè)整數(shù)的值,比較大小并輸出結(jié)果。#include"stdio.h“
/*程序名為l3_12.cpp。*/main(){inta,b;printf("請(qǐng)輸入a,b:");scanf("%d%d",&a,&b);
if(a>b)
printf("a>b\n");else
if(a<b)printf("a<b\n");elseprintf("a=b\n");}返回3.2.2目錄4.if語句的嵌套2
【注意】if語句的嵌套形式不是刻意去追求的,而是在解決問題過程中隨著解決問題的需要而采用的。
if與else的配對(duì)規(guī)則
if語句出現(xiàn)嵌套形式時(shí),C語言規(guī)定:else子句總是和前面最近的不帶else子句的if語句配對(duì),與書寫格式無關(guān)。注意從書寫格式要有層次感(好的程序員應(yīng)該養(yǎng)成這一習(xí)慣,以便他人理解你的程序和自己將來的修改)。如果if的數(shù)目和else的數(shù)目相同,從內(nèi)層到外層一一對(duì)應(yīng),不易出錯(cuò)。如果if與else的數(shù)目不一致,為實(shí)現(xiàn)編程者的意圖,必要的時(shí)候必須加"{}",來強(qiáng)制確定配對(duì)關(guān)系。否則,就不能實(shí)現(xiàn)編程者的真正意圖。返回3.2.2目錄4.if語句的嵌套實(shí)例1
【例3.13】寫出下列程序的輸出結(jié)果。
/*程序名為l3_13.cpp。*/#include"stdio.h"main(){intx=4,y=5,z=2,max;max=x;if(z>y)if(z>x)max=z;elseif(y>x)max=y;printf("max=%d",max);}運(yùn)行結(jié)果:
max=4返回3.2.2目錄4.if語句的嵌套實(shí)例2
【例3.14】編寫程序,根據(jù)輸入的學(xué)生成績,給出相應(yīng)的等級(jí)。90分以上的等級(jí)為A,60分以下的等級(jí)為E,其余每10分一個(gè)等級(jí)。程序如下:#include"stdio.h"main()/*程序名為l3_14.cpp。*/{intg;printf("inputg:");scanf("%d",&g);printf("g=%d:",g);if(g>=90)printf("A\n");elseif(g>=80)printf("B\n");elseif(g>=70)printf("C\n");elseif(g>=60)printf("D\n");else
printf("E\n");}返回3.2.2目錄4.if語句的嵌套實(shí)例3當(dāng)執(zhí)行以上程序時(shí),首先輸入、輸出學(xué)生的成績,然后進(jìn)入if語句;if語句中的表達(dá)式將依次對(duì)學(xué)生成績進(jìn)行判斷,若能使某if后的表達(dá)式值為1,則執(zhí)行與其相應(yīng)的子句,之后便退出整個(gè)if結(jié)構(gòu)。例如,若輸入的成績?yōu)?8分,首先輸出:g=78:,當(dāng)從上至下逐一檢測(cè)時(shí),使g>=70這一表達(dá)式的值為1,因此在輸出"g=78:"之后再輸出C,便退出整個(gè)if結(jié)構(gòu)。若輸入的成績?yōu)?0分,首先輸出相應(yīng)成績"g=30:",其次進(jìn)入相應(yīng)判斷,最后再輸出相應(yīng)等級(jí)"E",便退出整個(gè)if結(jié)構(gòu)。返回3.2.2目錄3.2.3switch語句1.switch語句的一般形式返回本節(jié)目錄2.switch語句的執(zhí)行過程3.switch語句的實(shí)例1.
switch語句的一般形式1.switch語句的一般形式switch語句的一般形式是:switch(<表達(dá)式>){case<常量表達(dá)式1>:<語句序列1>
case<常量表達(dá)式2>:<語句序列2>……
case<常量表達(dá)式n>:<語句序列n>[default:<語句序列n+1>]}【說明】:①switch語句是關(guān)鍵字,其后面大括號(hào)里括起來的部分稱為switch語句體。要特別注意必須寫這一對(duì)大括號(hào)。②switch后<表達(dá)式>的運(yùn)算結(jié)果可以是整型、字符型或枚舉型表達(dá)式等,<表達(dá)式>兩邊的括號(hào)不能省略。返回3.2.3目錄③case也是關(guān)鍵字,與其后面<常量表達(dá)式>合稱為case語句標(biāo)號(hào)。<常量表達(dá)式>的值在運(yùn)行前必須是確定的,不能改變,因此不能是包含變量的表達(dá)式,而且數(shù)據(jù)類型必須與<表達(dá)式>一致。如:
intx=3,y=7,z;switch(z){case1+2:/*是正確的*/
casex+y:/*是錯(cuò)誤的*/}④case和常量之間要有空格,case后面的常量之后有":"。⑤default也是關(guān)鍵字,起標(biāo)號(hào)的作用。代表所有case標(biāo)號(hào)之外的那些標(biāo)號(hào)。default可以出現(xiàn)在語句體中任何標(biāo)號(hào)位置上。在switch語句體中也可以無default標(biāo)號(hào)。⑥<語句序列1>、<語句序列2>等,可以是一條語句,也可以是若干語句。⑦必要時(shí),case語句標(biāo)號(hào)后的語句可以不寫。1.
switch語句的一般形式返回3.2.3目錄2.
switch語句的執(zhí)行過程2.switch語句的執(zhí)行過程首先計(jì)算<表達(dá)式>的值,然后在switch語句體內(nèi)尋找與該吻合的case標(biāo)號(hào),如果有與該值相等的標(biāo)號(hào),則執(zhí)行從該標(biāo)號(hào)后開始的各語句,包括在其后的所有case和default語句,直到switch語句體結(jié)束。如果沒有與該值相等的標(biāo)號(hào),并且存在default標(biāo)號(hào),則從default標(biāo)號(hào)后的語句開始執(zhí)行,直到switch語句體結(jié)束。如果沒有與該值相等的標(biāo)號(hào),并且不存在default標(biāo)號(hào),則跳過switch語句體,什么也不執(zhí)行。在switch語句中使用break語句break語句也稱間斷語句。可以在各個(gè)case之后的語句最后加上break語句,每當(dāng)執(zhí)行到break語句時(shí),立即跳出switch語句體。switch語句通??偸呛蚥reak語句聯(lián)合使用,使得switch語句真正起到多個(gè)分支的作用。返回3.2.3目錄3.
switch語句的實(shí)例3.switch語句的實(shí)例【例3.17】模擬自動(dòng)飲料機(jī)。按屏幕所示功能,輸入所選擇的合法數(shù)字,輸出可獲得的相應(yīng)飲料名稱。程序如下:
/*程序名為l3_17.cpp。*/#include"stdio.h"main(){intbutton;printf("==========自動(dòng)飲料機(jī)==========\n");printf("1.可口可樂\n");printf("2.雪碧\n");printf("3.芬達(dá)\n");printf("4.百事可樂\n");printf("5.非??蓸穃n");printf("請(qǐng)按1--5鍵選擇飲料:\n");scanf("%d",&button);
返回3.2.3目錄3.
switch語句的實(shí)例switch(button){case1:printf("\n你獲得一聽可口可樂\n");break;case2:printf("\n你獲得一聽雪碧\n");break;case3:printf("\n你獲得一聽芬達(dá)\n");break;case4:printf("\n你獲得一聽百事可樂\n");break;case5:printf("\n你獲得一聽非??蓸穃n");break;default:printf("\n非法操作!\n");break;}}運(yùn)行結(jié)果:=============自動(dòng)飲料機(jī)==============1.可口可樂2.雪碧3.芬達(dá)4.百事可樂5.非常可樂請(qǐng)按1-5按鈕選擇飲料:3<CR>你獲得一聽芬達(dá)返回3.2.3目錄返回本章目錄3.3.2while語句3.3.3do-while語句3.3.1循環(huán)結(jié)構(gòu)的C程序?qū)嵗?.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)3.3.4for語句3.3.5循環(huán)的嵌套3.3.6break語句和continue語句3.3.7程序?qū)嵱?xùn)3.3.1循環(huán)結(jié)構(gòu)的C程序?qū)嵗纠?.19】有一張厚度為0.1毫米的紙,假設(shè)它足夠大,重復(fù)將其對(duì)折,問對(duì)折多少次之后,其厚度可以抵達(dá)(再對(duì)折一次就超過)珠穆朗瑪峰的高度?程序如下:
main()
/*程序名為l3_14.cpp。*/{doubleh=0.1;intn=0;/*n用來累計(jì)對(duì)折次數(shù)*/
while(h<=8848180){h=h*2;n=n+1;}printf("對(duì)折次數(shù)為:%d,此時(shí)厚度:%.2f\n",n-1,h/2);}重復(fù)對(duì)折一張紙,實(shí)質(zhì)就是厚度乘以2,次數(shù)加1。用順序結(jié)構(gòu)編程為:h=h*2;n=n+1;……這樣的語句一直重復(fù)寫到h滿足題目要求為止。實(shí)際中這類問題,就可用循環(huán)結(jié)構(gòu)編程實(shí)現(xiàn)。本例中,使用的是循環(huán)結(jié)構(gòu)中的while語句。C語言共有三種類型的循環(huán)語句,while、do-while和for語句。返回本節(jié)目錄3.3.2while語句返回本節(jié)目錄1.while語句的一般形式while(<表達(dá)式>)<循環(huán)體語句>說明:while語句是C的關(guān)鍵字,其后面的一對(duì)括號(hào)中的<表達(dá)式>,可以是C語言的任意合法表達(dá)式,由它來控制循環(huán)體語句是否執(zhí)行,括號(hào)不能省略。<循環(huán)體語句>可以是一條語句,也可以是多條語句,一般來說循環(huán)體是一條語句時(shí)不用加"{}",如果是多條語句,就一定要加"{}"構(gòu)成復(fù)合語句。其中的語句可以是空語句、表達(dá)式語句或作為循環(huán)體一部分的復(fù)合語句,如果循環(huán)體是一個(gè)空語句,表示不執(zhí)行任何操作(一般用于延時(shí))。(1)計(jì)算while后一對(duì)括號(hào)中的<表達(dá)式>的值。當(dāng)值為非零時(shí),則執(zhí)行步驟(2);當(dāng)值為零時(shí),則執(zhí)行步驟(3)。(2)執(zhí)行<循環(huán)體語句>后,轉(zhuǎn)去執(zhí)行步驟(1)。(3)退出while循環(huán)。2.while語句的執(zhí)行過程while語句實(shí)例3.while語句實(shí)例例3.21】用while循環(huán)語句實(shí)現(xiàn)從1加到100,并將結(jié)果打印出來。/*程序名為l3_21.cpp。*/#include"stdio.h"main()/*若sum的值超過int型變量能表示的范圍,則設(shè)置成長整型*/{intsum=0,i=1;while(i<=100){sum+=i;i++;}printf("其和是%d\n",sum);/*若sum為長整型,則相應(yīng)的輸出也設(shè)置成長整型ld*/}運(yùn)行結(jié)果:其和是5050返回本節(jié)目錄
do<循環(huán)體語句>while(<表達(dá)式>);說明:do是C語言的關(guān)鍵字,必須和while聯(lián)合使用。do-while循環(huán)由do開始,用while結(jié)束;注意,在while結(jié)束后必須有分號(hào),它表示該語句的結(jié)束。其它同while循環(huán)語句。3.3.3do-while語句1.do-while語句的一般形式返回本節(jié)目錄2.do-while語句的執(zhí)行過程
(1)執(zhí)行do后面的<循環(huán)體語句>。(2)計(jì)算while后一對(duì)括號(hào)中的<表達(dá)式>的值。當(dāng)值為非零時(shí),轉(zhuǎn)去執(zhí)行步驟(1)。當(dāng)值為零時(shí),則執(zhí)行步驟(3)。(3)退出while循環(huán)。運(yùn)行結(jié)果:其和是5050在本例中,循環(huán)條件和循環(huán)體以及得到的結(jié)果都是和while循環(huán)一樣的,只是用do-while語句來實(shí)現(xiàn)。do-while語句實(shí)例
3.do-while語句實(shí)例
【例3.23】用do-while語句實(shí)現(xiàn)求1+2+…+100的和。#include"stdio.h"/*程序名為l3_23.cpp。*/main(){intsum=0,i=1;/*若sum的值超過int型變量能表示的范圍,則設(shè)置成長整型*/
do{sum+=i;i++;}while(i<=100);printf("其和是%d\n",sum);
/*若sum為長整型,則相應(yīng)的輸出也設(shè)置成長整型ld*/}返回本節(jié)目錄3.3.4for語句for語句是C語言提供的一種在功能上比前面兩種循環(huán)語句更強(qiáng)的一種循環(huán)語句。for循環(huán)語句格式如下:for(<表達(dá)式1>;<表達(dá)式2>;<表達(dá)式3>)<循環(huán)體語句>說明:for是C語言的關(guān)鍵字,三個(gè)表達(dá)式之間的必須用分號(hào)";"隔開。三個(gè)表達(dá)式可以是任意形式的C表達(dá)式,通常主要用于for循環(huán)的控制。一般<表達(dá)式1>用于計(jì)算循環(huán)變量初始值,<表達(dá)式2>為循環(huán)體是否執(zhí)行的條件,<表達(dá)式3>為循環(huán)變量的調(diào)整。<循環(huán)體語句>的使用同while、do-while循環(huán)語句。for循環(huán)語句的格式還可以表示為:for(<初始化表達(dá)式>;<條件表達(dá)式>;<修正表達(dá)式>)<循環(huán)體語句>在某種情況下,用for語句表示循環(huán),顯得緊湊而清晰。尤其是它能利用<表達(dá)式3>自動(dòng)地使循環(huán)變量發(fā)生改變,不像while結(jié)構(gòu)那樣要在循環(huán)體中設(shè)置"修正操作"。實(shí)際上,for語句中的<表達(dá)式3>不僅限于修正循環(huán)變量,而且可以是任何操作。例如前面例題中介紹的求1到100的和,用for語句可以表示為:
for(sum=0,i=1;i<=n;sum+=i,i++);返回本節(jié)目錄1.for語句的一般形式for語句的執(zhí)行過程返回本節(jié)目錄2.for語句的執(zhí)行過程①首先計(jì)算<表達(dá)式1>。②求<表達(dá)式2>的值;若其值為非零,則轉(zhuǎn)去執(zhí)行③;若<表達(dá)式2>的值為零,則轉(zhuǎn)去執(zhí)行⑤,結(jié)束for語句。③執(zhí)行一次for循環(huán)體。④求解<表達(dá)式3>,轉(zhuǎn)②執(zhí)行。⑤結(jié)束循環(huán),執(zhí)行循環(huán)之后的語句。3.for語句實(shí)例【例3.25】用for語句實(shí)現(xiàn)求1-100之和。#include"stdio.h"main()/*程序名為l3_25.cpp。{intsum=0,i=1;/*若sum的值超過int型變量能表示的范圍,則設(shè)置為長整型*/for語句的實(shí)例返回本節(jié)目錄for(;i<=n;i++)sum+=i;printf("其和是%d\n",sum);/*若sum為長整型,則相應(yīng)的輸出也設(shè)置成長整型ld*/}運(yùn)行結(jié)果:其和是5050for循環(huán)的執(zhí)行過程:先執(zhí)行表達(dá)式1,為空語句,然后判斷"i<=n"是否成立,如果為真,執(zhí)行循環(huán)體"sum+=i",轉(zhuǎn)而執(zhí)行"i++",再判斷"i<=n",如此反復(fù),直到"i<=n"為假為止。在這個(gè)例子中,i是循環(huán)控制變量,每次循環(huán)時(shí),它的值都被改變且進(jìn)行檢驗(yàn)。for語句多樣性返回本節(jié)目錄for語句的多樣性由于C語言中表達(dá)式的形式十分豐富,對(duì)for語句的三個(gè)控制表達(dá)式可以靈活運(yùn)用,因此造成for語句形式多種多樣。(1)<表達(dá)式1>為空語句如上例中求1-100的和。本來由<表達(dá)式1>完成的初始化可提到循環(huán)之外完成。(2)<表達(dá)式1>和<表達(dá)式3>是逗號(hào)表達(dá)方式(3)用空循環(huán)來延長時(shí)間常用空循環(huán)來產(chǎn)生延時(shí),以達(dá)到某種特定要求。如:for(t=0;t<time;t++);(4)無限循環(huán)for循環(huán)的三個(gè)表達(dá)式中,任何一個(gè)都可以省略,但是分號(hào)";"不可省略。所以下面的寫法:for(;;)<語句>是一個(gè)無限循環(huán)。將成為死循環(huán)。3.3.5循環(huán)的嵌套返回本節(jié)目錄在一個(gè)循環(huán)內(nèi)又完整地包含另一個(gè)循環(huán),稱為循環(huán)的嵌套,即循環(huán)體自身包含循環(huán)語句。前面介紹了三種類型的循環(huán),它們自己本身可以嵌套,如在for循環(huán)中包含另一個(gè)for循環(huán),也可以互相嵌套,例如可以for循環(huán)中包含一個(gè)while循環(huán)或者do-while循環(huán)等等。下面通過幾個(gè)例子來介紹循環(huán)嵌套的概念和運(yùn)用?!纠?.26】打印如下形式的乘法小九九表:1*1=12*1=22*2=4……9*1=99*2=189*3=27……9*9=81分析:表體共九行,所以首先考慮一個(gè)打印九行的算法:for(i=1;i<=9;i++){打印第i行}其次考慮如何"打印第i行"。每行都有i個(gè)表達(dá)式?*?=積,可以寫為:for(j=1;j<=i;j++){打印第j個(gè)表達(dá)式}循環(huán)的嵌套實(shí)例返回本節(jié)目錄打印第j個(gè)表達(dá)式,可寫為:printf("%d*%d=%-3d",i,j,i*j);在寫這個(gè)語句時(shí),不寫換行,只能在第j個(gè)表達(dá)式輸出后寫一個(gè)語句使之換行。printf("\n");綜上所述,打印以上形式的乘法小九九表的程序如下:【例3.26】/*程序名為l3_26.cpp。*/#include"stdio.h"main(){inti,j;/*i,j分別控制行和列的輸出*/for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%-3d",i,j,i*j);printf("\n");/*另起一行*/}}3.3.6break語句和continue語句返回本節(jié)目錄1.break語句2.continue語句1.break語句返回3.3.6目錄1.break語句前面已經(jīng)介紹過用break語句跳出當(dāng)前的switch語句流程。在循環(huán)結(jié)構(gòu)中,也可以用break語句使流程跳出本層循環(huán)體,從而提前強(qiáng)制性結(jié)束本層循環(huán)。break語句的一般形式為:
break;【例3.28】在循環(huán)體中break語句執(zhí)行示例。#include"stdio.h"main()/*程序名為l3_28.cpp。*/{inti,s=0;for(i=1;i<=10;i++){s=s+i;if(s>5)break;printf("s=%d\n",s);}printf("使用break語句時(shí),s的最終值為:%d\n",s);}break語句程序運(yùn)行后的輸出結(jié)果如下:s=1s=3使用break語句時(shí),s的最終值為:6本例中,如果沒有break語句,程序?qū)⑦M(jìn)行10次循環(huán);但當(dāng)i=3時(shí),s的值為6,if語句中的表達(dá)式s>5值為1,于是執(zhí)行break語句,循環(huán)立即中斷,跳出for循環(huán),從而提前中止循環(huán),并轉(zhuǎn)向循環(huán)體外的下一條語句。此時(shí),s的值為6。break語句使用說明:(1)只能在switch語句體和循環(huán)體內(nèi)使用break語句。(2)當(dāng)break語句出現(xiàn)在,其作用是跳出該switch語句體。當(dāng)break語句出現(xiàn)在循環(huán)體中,但并不在switch語句體內(nèi)時(shí),則在執(zhí)行break語句后,使流程跳出本層循環(huán)體。返回3.3.6目錄2.Continue語句2.continue語句continue語句的一般形式為:
continue;【例3.30】將【例3.28】中的break語句改用continue語句,來比較兩者的區(qū)別。#include"stdio.h"main()/*程序名為l3_30.cpp。*/{inti,s=0;for(i=1;i<=10;i++){s=s+i;if(s>5)continue;printf("s=%d\n",s);}printf("使用continue語句時(shí),s的最終值為:%d\n",s);}返回3.3.6目錄Continue語句程序運(yùn)行后的輸出結(jié)果如下:s=1s=3使用continue語句時(shí),s的最終值為:55在本例中,當(dāng)i=1時(shí),輸出s=1,當(dāng)i=2時(shí),輸出s=3,當(dāng)i=3時(shí),s的值為6,if語句中的表達(dá)式s>5值為1,于是執(zhí)行continue語句,跳過循環(huán)體中余下的語句,而去對(duì)for語句中的"表達(dá)式3"求值,然后進(jìn)行"表達(dá)式2"的條件測(cè)試,最后根據(jù)"表達(dá)式2"的值來決定循環(huán)是否繼續(xù)執(zhí)行。不論continue是作為何種語句成分出現(xiàn)的,都將按此功能執(zhí)行,這點(diǎn)與break有所不同??梢钥闯?,continue語句的功能是結(jié)束本次循環(huán)。返回3.3.6目錄3.3.7編程實(shí)訓(xùn)1返回本節(jié)目錄【例3.32】編程輸出如下圖形:
*************************程序如下:
#include"stdio.h"main()/*程序名為l3_32.cpp。*/{inti,j;for(i=1;i<=5;i++){for(j=1;j<=10-i;j++)printf("");for(j=1;j<=2*i-1;j++)printf("*");printf("\n");
}}3.3.7編程實(shí)訓(xùn)2返回本節(jié)首【例3.33】求整數(shù)3-100中的素?cái)?shù)。為了檢查某數(shù)是否是素?cái)?shù),采用的方法是,從n=3起直到100止,逐個(gè)用i=2~n/2去試除n,只要有一個(gè)能整除,說明該數(shù)不是素?cái)?shù)。程序如下:main()/*程序名為l3_27.cpp。*/{inti,n,num;for(n=3,num=0;n<=100;n++){for(i=2;i<=n-1;i++)if(n%i==0)break;if(n==i)
/*若n=i,則說明n不能被2~n-1整除,所以n為素?cái)?shù)*/{printf("%4d",n);
num++;}}printf("\n素?cái)?shù)個(gè)數(shù)是:%d\n",num);}運(yùn)行結(jié)果:357111317192329313741434753596167717379838997素?cái)?shù)個(gè)數(shù)是:24返回本章目錄3.4.2綜合實(shí)訓(xùn)3.4.1結(jié)構(gòu)化程序設(shè)計(jì)方法3.4結(jié)構(gòu)化程序設(shè)計(jì)方法與綜合實(shí)訓(xùn)3.4.1結(jié)構(gòu)化程序設(shè)計(jì)方法結(jié)構(gòu)化程序設(shè)計(jì)的思想是由E.W.Dijkstra等人于上世紀(jì)60年代后期提出的。其思想是:一個(gè)程序的任何邏輯問題均可用“順序”、“選擇”和“循環(huán)”這三種基本邏輯結(jié)構(gòu)來描述。實(shí)現(xiàn)這些程序流程的語句都是流程控制語句。流程控制語句在程序設(shè)計(jì)中起著重要的作用,通過三種基本控制結(jié)構(gòu),使結(jié)構(gòu)化程序具有唯一入口和唯一出口,沒有死循環(huán)。再一個(gè)特點(diǎn)是程序組織結(jié)構(gòu)化,即程序設(shè)計(jì)采用自頂向下,逐步細(xì)化,功能模塊化的方法。這種方法就是將程序設(shè)計(jì)成一個(gè)個(gè)功能簡單獨(dú)立的模塊.C語言是一種很好的結(jié)構(gòu)化程序設(shè)計(jì)語言,它提供了比其他高級(jí)語言更豐富的流程控制語句。有四種語句是順序執(zhí)行的:(1)空語句;(2)表達(dá)式語句;(3)函數(shù)調(diào)用語句;(4)復(fù)合語句。選擇語句有if語句和switch語句。循環(huán)語句有for,while和do-while語句以及一些輔助流程轉(zhuǎn)向語句,如continue,break等。順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)共同作為各種復(fù)雜程序的基本構(gòu)造單元。由三種結(jié)構(gòu)經(jīng)過反復(fù)嵌套構(gòu)成的程序稱為結(jié)構(gòu)化程序。使用結(jié)構(gòu)化程序設(shè)計(jì)的優(yōu)點(diǎn)是:結(jié)構(gòu)化構(gòu)造減少了程序的復(fù)雜性,提高了可靠性、可測(cè)試性和可維護(hù)性;使用少數(shù)基本結(jié)構(gòu),使程序結(jié)構(gòu)清晰,易讀易懂;容易驗(yàn)證程序的正確性。循環(huán)程序設(shè)計(jì)是有一定的編程規(guī)律和思路的,窮舉與迭代是兩類具有代表性應(yīng)用的基本算法。本節(jié)主要內(nèi)容是引導(dǎo)讀者編程來實(shí)現(xiàn)這些基本算法。返回本節(jié)目錄3.4.2綜合實(shí)訓(xùn)1返回本節(jié)目錄【例3.34】用泰勒級(jí)數(shù)求e的近似值。直到最后一項(xiàng)小于1e-6為止。
e=1+1/1!+1/2!+1/3!+…+1/n!+…程序如下:/*源程序名為l3_34.cpp。泰勒級(jí)數(shù)e*/#include"stdio.h"main(){floate=1.0,t=1.0; /*用e存放結(jié)果,用t存
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年湖北師范大學(xué)文理學(xué)院管理崗招聘?jìng)淇碱}庫附答案詳解
- 2025年杭州市婦產(chǎn)科醫(yī)院高層次、緊缺專業(yè)人才招聘12人的備考題庫有答案詳解
- 2025年武漢某國有企業(yè)招聘?jìng)淇碱}庫及1套參考答案詳解
- 2025年第十四師昆玉市學(xué)校引進(jìn)高層次人才備考題庫及一套答案詳解
- 2025年中國安科院安全生產(chǎn)風(fēng)險(xiǎn)監(jiān)測(cè)預(yù)警中心招聘5人備考題庫及1套完整答案詳解
- 2025年武漢科技大學(xué)附屬老年病醫(yī)院招聘30人備考題庫有答案詳解
- 2025年華中師范大學(xué)人工智能教育學(xué)部合同聘用制人員招聘?jìng)淇碱}庫含答案詳解
- 2025年潮州市潮安區(qū)招聘簽約獸醫(yī)備考題庫及答案詳解參考
- 2025年北滘鎮(zhèn)碧江小學(xué)招聘語文、數(shù)學(xué)、信息技術(shù)等臨聘教師10人備考題庫及答案詳解1套
- 中國醫(yī)科大學(xué)附屬醫(yī)院2026年公開招聘高層次和急需緊缺人才備考題庫附答案詳解
- 2026屆上海市六校生物高一上期末達(dá)標(biāo)檢測(cè)模擬試題含解析
- 2025年12月嘉興海寧水務(wù)集團(tuán)下屬企業(yè)公開招聘工作人員3人筆試備考重點(diǎn)試題及答案解析
- 2025年中國鐵路上海局集團(tuán)有限公司蕪湖車務(wù)段客運(yùn)服務(wù)人員招聘參考筆試題庫及答案解析
- 軍人野戰(zhàn)生存課件教學(xué)
- 婦科腫瘤的中醫(yī)藥治療
- 2025廣東廣州越秀區(qū)礦泉街招聘民政前臺(tái)工作人員1人備考題庫附答案詳解(基礎(chǔ)題)
- 關(guān)于羊肉的營銷策劃方案
- 2025年衛(wèi)生管理(副高)考試題庫及答案
- 2025天津大學(xué)管理崗位集中招聘15人考試筆試參考題庫及答案解析
- 2025西部機(jī)場(chǎng)集團(tuán)航空物流有限公司招聘筆試考試備考題庫及答案解析
- 2025年智能林業(yè)林業(yè)信息智能化系統(tǒng)建設(shè)方案
評(píng)論
0/150
提交評(píng)論