版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章程序控制結(jié)構(gòu)1第3章程序控制結(jié)構(gòu)3.1語(yǔ)句3.2輸入與輸出3.3程序順序結(jié)構(gòu)3.4程序選擇結(jié)構(gòu)3.5程序循環(huán)結(jié)構(gòu)23.1語(yǔ)句語(yǔ)句(statement)是C程序的最小單位程序由一條一條語(yǔ)句組成語(yǔ)句執(zhí)行的次序則稱為流程C語(yǔ)言語(yǔ)句分為簡(jiǎn)單語(yǔ)句、復(fù)合語(yǔ)句和控制語(yǔ)句33.1.1簡(jiǎn)單語(yǔ)句1.表達(dá)式語(yǔ)句x=a+b;//賦值語(yǔ)句t=a,a=b,b=t;//a和b交換a+b+c;//運(yùn)算但無(wú)實(shí)際意義表達(dá)式;//用分號(hào)結(jié)束43.1.1簡(jiǎn)單語(yǔ)句2.函數(shù)調(diào)用語(yǔ)句printf("a+b=%d",a+b);//輸出函數(shù)調(diào)用語(yǔ)句函數(shù)調(diào)用(實(shí)參);//用分號(hào)結(jié)束53.1.1簡(jiǎn)單語(yǔ)句3.空語(yǔ)句4.聲明部分printf(“a+b=%d”,a+b);;//第2個(gè)即為空語(yǔ)句;//單個(gè)分號(hào)聲明部分......;執(zhí)行語(yǔ)句......;63.1.2復(fù)合語(yǔ)句復(fù)合語(yǔ)句(compoundstatement),又稱語(yǔ)句塊,簡(jiǎn)稱塊(block)
{ [局部聲明部分......;]
語(yǔ)句序列......;}73.1.2復(fù)合語(yǔ)句復(fù)合語(yǔ)句內(nèi)的每條語(yǔ)句必須以分號(hào)(;)結(jié)尾,但復(fù)合語(yǔ)句右大括號(hào)(})已表示結(jié)尾,因此其后不需要分號(hào)。如果在后面添加分號(hào),意思變?yōu)橐粋€(gè)復(fù)合語(yǔ)句與一個(gè)空語(yǔ)句。{//復(fù)合語(yǔ)句
doubles,a=5,b=10,h=8;//局部聲明
s=(a+b)*h/2.0;
printf("area=%lf\n",s);}//復(fù)合語(yǔ)句不需要分號(hào)結(jié)尾83.1.2復(fù)合語(yǔ)句復(fù)合語(yǔ)句內(nèi)部可以進(jìn)行變量定義或類型聲明,這些定義或聲明僅在復(fù)合語(yǔ)句內(nèi)部可以使用,稱為塊的局部作用域
。{
int
t,a=10,b=7;//定義局部變量t、a、bt=a,a=b,b=t;//僅在這個(gè)復(fù)合語(yǔ)句里使用}93.1.2復(fù)合語(yǔ)句復(fù)合語(yǔ)句允許嵌套,即在復(fù)合語(yǔ)句里還可以包含復(fù)合語(yǔ)句。{//復(fù)合語(yǔ)句
doublev1,r=5;//局部聲明
v1=4*3.1415926*r*r*r/3;{//嵌套的復(fù)合語(yǔ)句
doublev2,h=12;//嵌套的局部聲明
v2=3.1415926*r*r*h;printf("%lf,%lf\n",v1,v2);}//嵌套的復(fù)合語(yǔ)句結(jié)尾}//復(fù)合語(yǔ)句結(jié)尾103.1.3注釋可以在程序中編寫注釋(comments),有兩種形式:①/*......*/塊注釋語(yǔ)法形式:
/*......注釋內(nèi)容*/113.1.3注釋②//行注釋語(yǔ)法形式:
說(shuō)明:(1)注釋僅是對(duì)源程序的說(shuō)明文字,它不是程序代碼,對(duì)程序運(yùn)行沒(méi)有任何影響。實(shí)際上,在編譯程序時(shí)所有注釋內(nèi)容將被忽略。
//......注釋內(nèi)容
123.1.3注釋(2)/*......*/塊注釋允許多行注釋,以(/*)開(kāi)頭,以(*/)結(jié)尾,這中間的任何內(nèi)容均是注釋內(nèi)容。注釋可以是任何來(lái)自于字符集的字符組合,包括換行符,也允許中文等非ASCII字符。/*......*/不允許嵌套133.1.3注釋(3)//行注釋表示從(//)開(kāi)始直到本行末尾的所有字符均是注釋內(nèi)容。//注釋只能注釋一行,如果要注釋多行就要寫多次。一般//注釋適用于短小精簡(jiǎn)的注釋,/*......*/注釋適用于大段注釋。(4)編譯器將整個(gè)注釋理解為一個(gè)空白字符,相當(dāng)于一個(gè)空格的作用。
143.1.4語(yǔ)句的寫法(1)多數(shù)情況下,在一個(gè)程序行里只寫一個(gè)語(yǔ)句,這樣的程序?qū)懛ㄇ逦?,便于閱讀、理解和調(diào)試。
(2)注意使用空格或TAB來(lái)作合理的間隔、縮進(jìn)、對(duì)齊,使程序形成邏輯相關(guān)的塊狀結(jié)構(gòu),養(yǎng)成優(yōu)美的程序編寫風(fēng)格。
(3)C語(yǔ)言允許在一行里寫多個(gè)語(yǔ)句。(4)C語(yǔ)言允許將一個(gè)語(yǔ)句拆成多行來(lái)寫。153.2輸入與輸出所謂輸入是指從外部輸入設(shè)備(如鍵盤、鼠標(biāo)等)向計(jì)算機(jī)輸入數(shù)據(jù),輸出是指從計(jì)算機(jī)向外部輸出設(shè)備(如顯示器、打印機(jī)等)輸出數(shù)據(jù)。
163.2輸入與輸出C語(yǔ)言輸入輸出操作是通過(guò)函數(shù)實(shí)現(xiàn)的。不同的函數(shù)能夠處理形式多樣的輸入輸出操作,支持不同的輸入輸出設(shè)備。若在程序中調(diào)用標(biāo)準(zhǔn)輸入輸出函數(shù),應(yīng)該用文件包含命令將頭文件stdio.h包含到程序中,命令形式為:
#include<stdio.h>173.2.1字符輸入與輸出1.字符輸出putchar函數(shù)putchar函數(shù)的作用是向顯示終端輸出一個(gè)字符,一般形式為:putchar(c);183.2.1字符輸入與輸出例3.1
1#include<stdio.h>2int
main()3{4
chara='C',b=6;5
putchar(a);//字符型變量,輸出C6putchar(b+'0');//整型表達(dá)式,輸出67putchar('\110');//轉(zhuǎn)義字符(八進(jìn)制)輸出H8
putchar('\n');//轉(zhuǎn)義字符(換行),輸出換行
9
return0;10}193.2.1字符輸入與輸出例3.1
1#include<stdio.h>2intmain()3{4chara='C',b=6;5
putchar(a);//字符型變量,輸出C6putchar(b+'0');//整型表達(dá)式,輸出67putchar('\110');//轉(zhuǎn)義字符(八進(jìn)制)輸出H8
putchar('\n');//轉(zhuǎn)義字符(換行),輸出換行
9return0;10}C6H程序運(yùn)行屏幕203.2.1字符輸入與輸出2.字符輸入getchar函數(shù)getchar函數(shù)的作用是從鍵盤終端輸入一個(gè)字符,一般形式為:getchar()213.2.1字符輸入與輸出例3.2
1#include<stdio.h>2int
main()3{4
charc1,c2,c3;5c1=getchar();c2=getchar();c3=getchar();6putchar(c1);putchar(c2);putchar(c3);
7
return0;8}223.2.1字符輸入與輸出例3.2
1#include<stdio.h>2intmain()3{4charc1,c2,c3;5c1=getchar();c2=getchar();c3=getchar();6putchar(c1);putchar(c2);putchar(c3);
7return0;8}abc程序運(yùn)行屏幕abc↙233.2.1字符輸入與輸出例3.2
1#include<stdio.h>2intmain()3{4charc1,c2,c3;5c1=getchar();c2=getchar();c3=getchar();6putchar(c1);putchar(c2);putchar(c3);
7return0;8}ab程序運(yùn)行屏幕a↙bc↙243.2.2格式化輸出1.printf函數(shù)printf函數(shù)的作用是向標(biāo)準(zhǔn)輸出設(shè)備(顯示終端)輸出格式化的數(shù)據(jù),一般形式為:(1)格式控制格式控制為字符串形式,稱為格式控制串printf(格式控制,輸出項(xiàng)列表......);25它主要有兩種內(nèi)容:①格式說(shuō)明。格式說(shuō)明總是以百分號(hào)(%)字符開(kāi)始,后跟格式控制字符,例如%d、%f等。它的作用是將輸出項(xiàng)轉(zhuǎn)換為指定格式輸出。②一般字符。除格式說(shuō)明之外的其他字符,包含轉(zhuǎn)義字符。一般字符根據(jù)從左向右的出現(xiàn)順序直接輸出到顯示終端上,ASCII控制字符的輸出有特殊的含義。
3.2.2格式化輸出%[flags][width][.prec][h|l|L|F|N]type263.2.2格式化輸出表3-1printf格式說(shuō)明域含義域域選描述含義type必需類型字符決定輸出項(xiàng)轉(zhuǎn)換為字符、字符串還是數(shù)值flags可選標(biāo)志字符控制輸出的對(duì)齊、符號(hào)、空格及八進(jìn)制和十六進(jìn)制前綴。可以出現(xiàn)多個(gè)標(biāo)志width可選寬度說(shuō)明指定輸出項(xiàng)的最小顯示寬度.prec可選精度說(shuō)明指定輸出項(xiàng)的最大輸出字符數(shù)或浮點(diǎn)數(shù)小數(shù)精度h/l/L/F/N可選大小修飾指明輸出項(xiàng)類型大小或指針的遠(yuǎn)近273.2.2格式化輸出表3-2printf類型字符含義字符類型輸出格式dint帶符號(hào)的十進(jìn)制整數(shù)uint無(wú)符號(hào)十進(jìn)制整數(shù)oint無(wú)符號(hào)八進(jìn)制整數(shù)x或Xint無(wú)符號(hào)十六進(jìn)制整數(shù)(若輸出為字母,x用abcdef,X用ABCDEF)283.2.2格式化輸出表3-2printf類型字符含義字符類型輸出格式fdouble具有[-]dddd.dddd格式的帶符號(hào)數(shù)值,dddd為一位或多位十進(jìn)制數(shù)字。小數(shù)點(diǎn)前數(shù)字個(gè)數(shù)取決于數(shù)的量級(jí);小數(shù)點(diǎn)后面數(shù)字個(gè)數(shù)取決于所要求的精度e或Edouble具有[-]d.dddde[+/-]ddd格式的帶符號(hào)數(shù)值,其中d為單個(gè)十進(jìn)制數(shù)字,dddd為一位或多位十進(jìn)制數(shù)字,ddd為三位十進(jìn)制數(shù)。用e或E表示指數(shù)g或Gdouble以f或e格式輸出的帶符號(hào)數(shù)值,對(duì)給出的值及其精度,f和e哪個(gè)簡(jiǎn)潔就用哪個(gè)。只有當(dāng)值的指數(shù)小于-4或大于、等于精度說(shuō)明時(shí)才使用e格式。尾部的0被截?cái)?,只有小?shù)點(diǎn)后跟1位或多位數(shù)字時(shí)才出現(xiàn)小數(shù)點(diǎn)。用e或E表示指數(shù)293.2.2格式化輸出表3-2printf類型字符含義字符類型輸出格式cchar單個(gè)字符s字符串指針直到第一個(gè)非空字符('\0')或滿足精度的字符串%輸出百分號(hào)'%'303.2.2格式化輸出表3-3printf標(biāo)志字符含義標(biāo)志意義默認(rèn)-在給定域?qū)拑?nèi)左對(duì)齊輸出結(jié)果(右邊用空格填充)右對(duì)齊(左邊用空格或0填充)+如果輸出值是有符號(hào)數(shù),則總是加上符號(hào)(+或-)只在負(fù)數(shù)前加(-)空格如果輸出值是有符號(hào)數(shù)或?yàn)檎龜?shù),則以空格作為前綴加到輸出值前;如果空格和+標(biāo)志同時(shí)出現(xiàn),則忽略空格無(wú)313.2.2格式化輸出表3-3printf標(biāo)志字符含義標(biāo)志意義默認(rèn)#指明使用如下的“轉(zhuǎn)換樣式”轉(zhuǎn)換輸出參數(shù)若類型字符為對(duì)輸出參數(shù)的影響x或X在任何非0輸出值前加上0x或0Xe,E,f強(qiáng)制在所有情況下輸出值總是包含小數(shù)點(diǎn)只有小數(shù)點(diǎn)后面有數(shù)字時(shí)才顯示它g,G同e和E,強(qiáng)制在所有情況下輸出值中總是包含小數(shù)點(diǎn)并阻止截?cái)辔膊康?只有小數(shù)點(diǎn)后面有數(shù)字時(shí)才顯示它,截?cái)辔膊康?323.2.2格式化輸出表3-4printf寬度說(shuō)明寬度說(shuō)明對(duì)輸出域?qū)挾鹊挠绊憂至少有n個(gè)字符寬度輸出,如果輸出值中的寬度小于n個(gè),則輸出用空格填充直到最小寬度規(guī)定(如果flags為-,則填充在輸出值的右邊,否則在左邊)0n至少有n個(gè)字符寬度輸出,如果輸出值中的字符寬度小于n個(gè),則輸出用0填充在輸出值的左邊(對(duì)于左對(duì)齊無(wú)效)*間接設(shè)置寬度,此時(shí)由輸出項(xiàng)列表提供寬度值,且它必須在輸出項(xiàng)的前面333.2.2格式化輸出表3-5printf精度說(shuō)明精度說(shuō)明精度影響.n類型含義e,E,f精度值指定小數(shù)點(diǎn)后數(shù)字的個(gè)數(shù)。四舍五入g,G精度值指定可輸出的有效數(shù)字的最大數(shù)目s精度值指定可輸出字符的最大數(shù)目,超出精度值范圍的字符不予輸出343.2.2格式化輸出表3-5printf精度說(shuō)明精度說(shuō)明精度影響(無(wú))精度按默認(rèn)值:類型默認(rèn)值e,E,f6g,G打印6個(gè)有效數(shù)字,尾部的0串被截?cái)鄐輸出直到空字符('\0')為止.0或僅有.類型含義353.2.2格式化輸出續(xù)表3-5printf精度說(shuō)明精度說(shuō)明精度影響e,E,f,g,G輸出不打印小數(shù)點(diǎn)(及其后的小數(shù))s無(wú)任何字符輸出*間接設(shè)置精度,此時(shí)由輸出項(xiàng)列表提供精度值,且它必須在輸出項(xiàng)的前面。如果寬度說(shuō)明和精度說(shuō)明同時(shí)使用*,則先出現(xiàn)寬度值,接著是精度值,然后才是輸出項(xiàng)。363.2.2格式化輸出表3-6printf類型大小修飾含義大小修飾type類型字符輸出參數(shù)被解釋為hd,o,x,X短整型(short)u無(wú)符號(hào)短整型(unsignedshort)ld,o,x,X長(zhǎng)整型(long)u無(wú)符號(hào)長(zhǎng)整型(unsignedlong)e,E,f,g,G雙精度浮點(diǎn)型(double)Le,E,f,g,G長(zhǎng)雙精度浮點(diǎn)型(longdouble)373.2.2格式化輸出int
a=123,b=-1,c=12345;longh=-1;shorti=-1,j=32767;charc1=97;doublex=12.3456,y=12,z=12.123456789123;//①輸出整型數(shù)據(jù)printf("%d,%u,%x,%X,%o\n",a,a,a,a,a);//十進(jìn)制、無(wú)符號(hào)、十六進(jìn)制和八進(jìn)制//輸出結(jié)果:123,123,7b,7B,173printf("%d,%u,%x,%X,%o\n",b,b,b,b,b);//十進(jìn)制、無(wú)符號(hào)、十六進(jìn)制和八進(jìn)制,負(fù)數(shù)為補(bǔ)碼//-1,4294967295,ffffffff,FFFFFFFF,37777777777383.2.2格式化輸出printf("%ld,%lu,%lx,%lo\n",h,h,h,h,h);//長(zhǎng)整型,負(fù)數(shù)為補(bǔ)碼//輸出結(jié)果:-1,4294967295,ffffffff,37777777777printf("%hd,%hu,%hx,%ho\n",i,i,i,i,i);//短整型,負(fù)數(shù)為補(bǔ)碼//輸出結(jié)果:-1,65535,ffff,177777printf("%hd,%hd\n",j,j+1);//短整型,數(shù)據(jù)溢出//輸出結(jié)果:32767,-32768//②輸出帶格式的整型數(shù)據(jù)printf("[%d],[%4d],[%-4d],[%4d],[%-4d]\n",a,a,a,c,c);//寬度、右對(duì)齊、左對(duì)齊、實(shí)際寬度//輸出結(jié)果:[123],[123],[123],[12345],[12345]393.2.2格式化輸出printf("[%+d],[%+d],[%d],[%d]\n",a,-a,a,-a);//填充正負(fù)符號(hào)、填充空格//輸出結(jié)果:[+123],[-123],[123],[-123]printf("[%04d],[%04d],[%04d],[%-04d]\n",a,b,c,a);//左邊填充0、右邊不影響//輸出結(jié)果:[0123],[-001],[12345],[123]printf("%#d,%#x,%#X,%#o\n",a,a,a,a);//填充十六進(jìn)制、八進(jìn)制前綴//輸出結(jié)果:123,0x7b,0X7B,0173printf("[%*d]\n",5,a);//由輸出項(xiàng)指定寬度//輸出結(jié)果:[123]403.2.2格式化輸出printf("[%8.2d],[%-8.2d]\n",a,a);//精度對(duì)整型無(wú)作用//輸出結(jié)果:[123],[123]//③輸出字符型數(shù)據(jù)printf("%d,%c\n",c1,c1);//字符型數(shù)值、ASCII碼//輸出結(jié)果:97,a//④輸出帶格式的字符型數(shù)據(jù)printf("[%12c],[%012c],[%-012c]\n",c1,c1,c1);//寬度、右對(duì)齊、左對(duì)齊//[a],[00000000000a],[a]413.2.2格式化輸出//⑤輸出浮點(diǎn)型數(shù)據(jù)printf("%lf,%e,%g\n",x,x,x);//小數(shù)格式、指數(shù)格式、最簡(jiǎn)格式//輸出結(jié)果:12.345600,1.234560e+001,12.3456printf("%lf,%e,%g\n",y,y,y);//小數(shù)格式、指數(shù)格式、最簡(jiǎn)格式//輸出結(jié)果:12.000000,1.200000e+001,12//⑥輸出指定精度的浮點(diǎn)型數(shù)據(jù)printf("[%lf],[%10lf],[%10.2lf],[%.2lf]\n",x,x,x,x);//默認(rèn)精度、寬度、精度//[12.345600],[12.345600],[12.35],[12.35]423.2.2格式化輸出//⑦輸出帶格式的浮點(diǎn)型數(shù)據(jù)printf("[%+lf],[%+lf],[%lf],[%lf]\n",y,-y,y,-y);//填充正負(fù)符號(hào)、填充空格//[+12.000000],[-12.000000],[12.000000],[-12.000000]printf("[%06.1lf],[%-06.1lf]\n",y,y);//左邊填充0、右邊不影響//輸出結(jié)果:[0012.0],[12.0]printf("[%.*f],[%*.*f]\n",6,x,12,3,x);//由輸出項(xiàng)指定寬度、寬度與精度//輸出結(jié)果:[12.345600],[12.346]433.2.2格式化輸出//⑧輸出字符串printf("[%s],[%6s],[%-6s]\n","Java","Java","Java");//寬度對(duì)字符串的影響//輸出結(jié)果:[Java],[Java],[Java]printf("[%s],[%.3s],[%6.3s]\n","Basic","Basic","Basic");//精度對(duì)字符串的影響//輸出結(jié)果:[Basic],[Bas],[Bas]443.2.2格式化輸出//⑨特殊輸出printf("%%\n",c1);//兩個(gè)%%表示輸出一個(gè)%,輸出項(xiàng)//輸出結(jié)果:%printf("%d,%d\n",a,b,c);//格式數(shù)目小于輸出項(xiàng)數(shù),忽略多余輸出項(xiàng)//輸出結(jié)果:123,-1printf("%d,%d,%d\n",a,b);//格式數(shù)目大于輸出項(xiàng)數(shù),輸出結(jié)果不確定//輸出結(jié)果:123,-1,2367460printf("%d,%lf\n",x,a);//類型不對(duì)應(yīng),輸出結(jié)果不確定//輸出結(jié)果:2075328197,0.000000453.2.3格式化輸入scanf(格式控制,輸入項(xiàng)列表......);1.scanf函數(shù)scanf函數(shù)的作用是從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤終端)讀取格式化的數(shù)據(jù),一般形式為:%[*][width][h|l|L|F|N]type463.2.3格式化輸入表3-7scanf類型字符含義類型字符期望讀入(應(yīng)輸入)的類型d十進(jìn)制整數(shù)o八進(jìn)制整數(shù)x或X十六進(jìn)制整數(shù)u無(wú)符號(hào)十進(jìn)制整數(shù)473.2.3格式化輸入表3-7scanf類型字符含義類型字符期望讀入(應(yīng)輸入)的類型e,E,f,g,G由下列成分組成的浮點(diǎn)數(shù):可選的符號(hào)+或-,包括小數(shù)點(diǎn)在內(nèi)的一個(gè)或多個(gè)十進(jìn)制數(shù)字序列,可選的指數(shù)符('e'或'E')其后的帶符號(hào)整數(shù)。[+/-]ddddddddd[.]dddd[E|e][+/-]dddc字符。指定c后,通常被跳過(guò)的空白符將被讀入,如果要讀下一個(gè)非空白符,要使用%1ss字符串。默認(rèn)情況下,輸入字符串以空白符作為結(jié)束。483.2.3格式化輸入(3)*禁止字符*禁止字符的含義是從輸入數(shù)據(jù)中讀取類型相當(dāng)?shù)臄?shù)據(jù),但跳過(guò)這個(gè)數(shù)據(jù),即不將它保存到輸入項(xiàng)中。(4)寬度說(shuō)明寬度控制從輸入數(shù)據(jù)中讀出的最大字符數(shù)。轉(zhuǎn)換并存放到相應(yīng)輸入項(xiàng)中。如果讀width個(gè)字符前遇到空白符或不能根據(jù)指定格式進(jìn)行轉(zhuǎn)換的字符,則讀入的字符個(gè)數(shù)將少于width個(gè)。493.2.3格式化輸入(5)大小修飾大小修飾指明輸入的類型大小,與printf的大小修飾含義相同。
503.2.3格式化輸入int
a,b,c;longh;shorti;chark,m;doublex,y;scanf("%d%ld%hd%lf%le",&a,&h,&i,&x,&y);//輸入整型、長(zhǎng)整型、短整型、浮點(diǎn)型//輸入:1231.233.25
結(jié)果a=1,h=2,i=3,x=1.23,y=3.25//輸入:1-13276812.312e5
結(jié)果a=1,h=-1,i=-32768,x=12.3,y=1.2e6513.2.3格式化輸入scanf("%d%d%d",&a,&b,&c);//連續(xù)輸入用空格、TAB、回車間隔//輸入:123結(jié)果a=1,b=2,c=3//輸入:1,2,3結(jié)果a=1,b,c不確定(輸入逗號(hào)不匹配空白符,scanf終止)scanf("%d,%d,%d",&a,&b,&c);//輸入必須匹配一般字符//輸入:1,2,3結(jié)果a=1,b=2,c=3//輸入:123結(jié)果a=1,b,c不確定(輸入空格不匹配逗號(hào),scanf終止)523.2.3格式化輸入scanf("a=%db=%dc=%d",&a,&b,&c);//輸入必須匹配一般字符//輸入:a=1b=2c=3結(jié)果a=1,b=2,c=3//輸入:123結(jié)果a,b,c不確定(輸入不匹配a=,scanf終止)scanf("%4d%4d",&a,&b);//指定寬度//輸入:1212345結(jié)果a=12,b=1234//輸入:123456789結(jié)果a=1234,b=5678scanf("%1d%*2d%3d",&a,&b);//禁止字符//輸入:123456789結(jié)果a=1,b=456,23讀取但不保存533.2.3格式化輸入scanf("%d%c%d%c",&a,&k,&b,&m);//輸入字符型//輸入:12c34a結(jié)果a=12,k=c,b=34,m=a//輸入:12c34a結(jié)果a=12,k=空格,b,m不確定(輸入c不匹配%d,scanf終止)scanf("%d%d",&a,&b,&c);//格式數(shù)目小于輸出項(xiàng)數(shù),多余輸入項(xiàng)未被輸入scanf("%d%d%d",&a,&b);//格式數(shù)目大于輸出項(xiàng)數(shù),崩潰性錯(cuò)誤scanf("%d%lf",&x,&a);//類型不對(duì)應(yīng),嚴(yán)重錯(cuò)誤543.3程序順序結(jié)構(gòu)通常情況下,語(yǔ)句以其出現(xiàn)的順序執(zhí)行一個(gè)語(yǔ)句執(zhí)行完會(huì)自動(dòng)轉(zhuǎn)到下一個(gè)語(yǔ)句開(kāi)始執(zhí)行,這樣的執(zhí)行稱為順序執(zhí)行。順序執(zhí)行反映了程序“按部就班”的執(zhí)行規(guī)律,多數(shù)情況下,程序的執(zhí)行就是這樣的。
553.3.1順序執(zhí)行圖3.1求圓面積的執(zhí)行次序順序執(zhí)行的次序是佷重要的
563.3.2跳轉(zhuǎn)執(zhí)行從問(wèn)題求解的一般過(guò)程來(lái)看,還需要跳轉(zhuǎn)執(zhí)行。
①選擇語(yǔ)句:if語(yǔ)句、switch語(yǔ)句;②循環(huán)語(yǔ)句:while語(yǔ)句、do語(yǔ)句、for語(yǔ)句;③跳轉(zhuǎn)語(yǔ)句:goto語(yǔ)句、break語(yǔ)句、continue語(yǔ)句、return語(yǔ)句。
573.3.2跳轉(zhuǎn)執(zhí)行g(shù)oto語(yǔ)句的作用是使程序無(wú)條件跳轉(zhuǎn)到別的位置,語(yǔ)法形式為:這里的標(biāo)號(hào)是一個(gè)自定義的標(biāo)識(shí)符,標(biāo)號(hào)語(yǔ)句形式為:標(biāo)號(hào):語(yǔ)句序列......goto
標(biāo)號(hào);583.3.2跳轉(zhuǎn)執(zhí)行
1goto
L1;
…//語(yǔ)句序列
10L1:x=a+b;
…//語(yǔ)句序列執(zhí)行第1行時(shí),程序跳轉(zhuǎn)到L1標(biāo)號(hào)語(yǔ)句所在的第10行繼續(xù)運(yùn)行:593.4程序選擇結(jié)構(gòu)1.if語(yǔ)句2.switch語(yǔ)句603.4.1if語(yǔ)句if語(yǔ)句的作用是計(jì)算給定的表達(dá)式,根據(jù)結(jié)果選擇執(zhí)行相應(yīng)的語(yǔ)句,語(yǔ)句形式有兩種:①if形式:②if-else形式:if(表達(dá)式)語(yǔ)句1;else
語(yǔ)句2;if(表達(dá)式)語(yǔ)句1;613.4.1if語(yǔ)句圖3.2兩種形式的if語(yǔ)句執(zhí)行流程PT
F內(nèi)嵌
語(yǔ)句623.4.1if語(yǔ)句圖3.2兩種形式的if語(yǔ)句執(zhí)行流程633.4.1if語(yǔ)句當(dāng)a﹥b時(shí),執(zhí)行t=a,a=b,b=t運(yùn)算,即a和b相互交換,若a小于等于b則什么也不做;總而言之,無(wú)論a和b之前是什么數(shù),執(zhí)行這段程序后,a肯定小于等于b。
if(a>b)t=a,a=b,b=t;643.4.1if語(yǔ)句(1)if語(yǔ)句中的子語(yǔ)句既可以是簡(jiǎn)單語(yǔ)句,又可以是復(fù)合語(yǔ)句或控制語(yǔ)句,但必須是“一個(gè)語(yǔ)句”的語(yǔ)法形式
1if(a>b)2x=a+b;y=a-b;3else4x=a-b;y=a+b;653.4.1if語(yǔ)句(2)子語(yǔ)句往往會(huì)有多條語(yǔ)句,甚至更復(fù)雜的情形,這時(shí)可以使用復(fù)合語(yǔ)句
1if(a>b){2x=a+b;y=a-b;3}4else{5x=a-b;y=a+b;6}663.4.1if語(yǔ)句總是交換的代碼(不好的code風(fēng)格):
1if(a>b)2{3t=a;4a=b;5b=t;6};
1if(a>b){2t=a;3a=b;4b=t;5};673.4.1if語(yǔ)句一般地,if語(yǔ)句的表達(dá)式為關(guān)系、邏輯運(yùn)算表達(dá)式也可以為其他表達(dá)式,但按邏輯值來(lái)理解:a=5,b=2;if(a)x=a*10;683.4.1if語(yǔ)句表3-8數(shù)值按邏輯值處理的結(jié)果數(shù)值邏輯值aaa!=0!aa==00假假真真非0真真假假6970例:將所給數(shù)學(xué)條件寫成C的邏輯表達(dá)式1)1≤a≤8并且1≤b≤102)a和b都是正的或都是負(fù)的(a、b符號(hào)相同)3)a和b之一為0,但不能都為04)a能被5或7整除Leapyearcondition:(yearnum%4==0)&&(yearnum%100!=0)||(yearnum%400==0)&&(yearnum%100=0)(a>=1&&a<=8)&&(b>=1&&b<=10)(a>0&&b>0)||(a<0&&b<0)或:(a*b)>0(a*b==0)&&(a+b!=0)(a%5==0)||(a%7==0)70用形式邏輯變量表示潤(rùn)年條件:int
LeapisTrue;LeapisTrue=(yearnum%4==0)&&(yearnum%100!=0)||(yearnum%400==0)&&(yearnum%100==0);71713.4.1if語(yǔ)句例3.3
1#include<stdio.h>2#include<math.h>3int
main()4{5
doublea,b,c;6
printf("input
a,b,c:");7
scanf("%lf%lf%lf",&a,&b,&c);8
//判斷三邊長(zhǎng)是否構(gòu)成三角形
9
if(a+b>c&&a+c>b&&b+c>a){10
doubles,t;11t=(a+b+c)/2.0;12s=sqrt(t*(t-a)*(t-b)*(t-c));13
printf("area=%lf\n",s);14}
723.4.1if語(yǔ)句例3.3
15
elseprintf("error\n");16
return0;17}733.4.1if語(yǔ)句例3.3
15elseprintf("error\n");16return0;17}area=6.000000程序運(yùn)行屏幕inputa,b,c:345↙743.4.2switch語(yǔ)句switch語(yǔ)句switch語(yǔ)句的作用是計(jì)算給定的表達(dá)式,根據(jù)結(jié)果選擇從多個(gè)分支入口執(zhí)行,語(yǔ)句形式為:switch(表達(dá)式){
case
常量表達(dá)式1:…語(yǔ)句序列1
case
常量表達(dá)式2:…語(yǔ)句序列2 ┇
case
常量表達(dá)式n:…語(yǔ)句序列n
default:…默認(rèn)語(yǔ)句序列}753.4.2switch語(yǔ)句圖3.3switch語(yǔ)句執(zhí)行流程763.4.2switch語(yǔ)句(1)switch語(yǔ)句中case分支的語(yǔ)句序列可以是一個(gè)語(yǔ)句,也可以是任意多的語(yǔ)句序列,也可以沒(méi)有語(yǔ)句;既可以是簡(jiǎn)單語(yǔ)句,又可以是復(fù)合語(yǔ)句和控制語(yǔ)句。如果沒(méi)有語(yǔ)句,則一旦執(zhí)行到這個(gè)case分支,什么也不做,繼續(xù)往下執(zhí)行。
773.4.2switch語(yǔ)句
1switch(n){2
case7:printf("step5\n");3
case6:4
case5:printf("step4\n");5
case4:6{7
printf("step3\n");printf("step2\n");8}9
case2:printf("step1\n");10
default:printf("step0\n");11}783.4.2switch語(yǔ)句(3)switch語(yǔ)法中default分支是可選的,若沒(méi)有default分支且沒(méi)有任何case標(biāo)號(hào)的值相等時(shí),switch語(yǔ)句將什么也不做,直接執(zhí)行后續(xù)語(yǔ)句。(4)switch語(yǔ)句分支選擇可以是C語(yǔ)言的任意表達(dá)式,但其值必須是整數(shù)(含字符類型)、枚舉類型,或者包含能轉(zhuǎn)換成這兩種類型的類型。
793.4.2switch語(yǔ)句(5)switch語(yǔ)法中的case分支必須是常量表達(dá)式且互不相同,即為整型、字符型、枚舉類型的常量值,但不能包含變量。例如若c是變量,則“casec>=‘a(chǎn)’&&c<=‘z’:”的寫法是錯(cuò)的。case分支后面的冒號(hào)是必須的,即使沒(méi)有后面的語(yǔ)句序列。
803.4.2switch語(yǔ)句在switch語(yǔ)句中任意位置上,只要執(zhí)行到break語(yǔ)句,就結(jié)束switch語(yǔ)句的執(zhí)行,轉(zhuǎn)到switch結(jié)構(gòu)后續(xù)語(yǔ)句。break;813.4.2switch語(yǔ)句更常見(jiàn)的switch結(jié)構(gòu)應(yīng)該如下,它提供了程序多分支選擇執(zhí)行流程。switch(表達(dá)式){
case
常量表達(dá)式1:…語(yǔ)句序列1;break;
case
常量表達(dá)式2:…語(yǔ)句序列2;break; ┇
case
常量表達(dá)式n:…語(yǔ)句序列n;break;
default:…默認(rèn)語(yǔ)句序列}823.4.2switch語(yǔ)句圖3.4結(jié)構(gòu)化的switch流程833.4.3選擇結(jié)構(gòu)的嵌套1.if語(yǔ)句的嵌套(1)第一種形式,在else分支上嵌套if語(yǔ)句,語(yǔ)法形式為:if(表達(dá)式1)語(yǔ)句1elseif(表達(dá)式2)語(yǔ)句2elseif(表達(dá)式3)語(yǔ)句3......elseif(表達(dá)式n)語(yǔ)句nelse語(yǔ)句m843.4.3選擇結(jié)構(gòu)的嵌套圖3.5嵌套if語(yǔ)句第一種形式的執(zhí)行流程853.4.3選擇結(jié)構(gòu)的嵌套例3.4
1#include<stdio.h>2int
main()3{4
int
score;5
scanf("%d",&score);6
if(score>=90)printf("A\n");7
elseif(score>=80)printf("B\n");8
elseif(score>=70)printf("C\n");9
elseif(score>=60)printf("D\n");10
elseprintf("E\n");11
return0;12}863.4.3選擇結(jié)構(gòu)的嵌套1.if語(yǔ)句的嵌套(2)第二種形式,在if和else分支上嵌套if語(yǔ)句,語(yǔ)法形式為:
if(表達(dá)式1)
if(表達(dá)式2)語(yǔ)句1
else語(yǔ)句2else
if(表達(dá)式3)語(yǔ)句3
else語(yǔ)句4873.4.3選擇結(jié)構(gòu)的嵌套圖3.6嵌套if語(yǔ)句第二種形式的執(zhí)行流程883.4.3選擇結(jié)構(gòu)的嵌套例3.5
1#include<stdio.h>2int
main()3{4
int
a,b,c,d,t;5
scanf("%d%d%d%d",&a,&b,&c,&d);6
if(a>b)t=a,a=b,b=t;//結(jié)果a<=b7
if(a>c)t=a,a=c,c=t;//結(jié)果a<=c8
if(a>d)t=a,a=d,d=t;//結(jié)果a<=d9
//結(jié)果a<b,c,d10
if(b>c)t=b,b=c,c=t;//結(jié)果b<=c11
if(b>d)t=b,b=d,d=t;//結(jié)果b<=d12
//結(jié)果a<b<c,d13
if(c>d)t=c,c=d,d=t;//結(jié)果c<=d14
//結(jié)果a<b<c<d
893.4.3選擇結(jié)構(gòu)的嵌套例3.5
15
printf("%d,%d,%d,%d\n",a,b,c,d);16
return0;17}9091例:根據(jù)x求y值。
3x-11(0≤x<10)
y=2x+5(10≤x<20)
x(20≤x<30)輸入
xx<10TF輸出X無(wú)效3x-11→yT輸入xx≥0&&x<30x<10x<202x+5→yx→y輸出yFFFTTx≥0&&x<30TFx<20TFy=xy=3x-11y=2x+5輸出x無(wú)效
輸出yTx<10F9192
intmain(){floatx,y;
printf(”Enterx:”);
scanf(”%f”,&x);if(x>=0&&x<30){if(x<10)y=3*x-11;elseif(x<20)y=2*x+5;elsey=x;
printf(”x=%7.2f,y=%7.2f\n”,x,y);}elseprintf(”%7.2fisinvalid.\n”,x);return0;}54923.4.3選擇結(jié)構(gòu)的嵌套2.switch語(yǔ)句的嵌套switch語(yǔ)句是可以嵌套的:
1int
a=15,b=21,m=0;2switch(a%3){3
case0:m++;4
switch(b%2){5
default:m++;6
case0:m++;break;7}8
case1:m++;9}933.4.4選擇結(jié)構(gòu)程序舉例例3.6
1#include<stdio.h>2int
main()3{4
int
y,m,d,Days;5
printf("input
y,m,d:");6
scanf("%d%d%d",&y,&m,&d);//輸入日期
7
switch(m){//計(jì)算每月的天數(shù)
8
case2:9Days=28;10
if((y%4==0&&y%100!=0)||(y%400==0))Days++;11
break;12
case4:case6:13
case9:case11:Days=30;break;
943.4.4選擇結(jié)構(gòu)程序舉例例3.6
14
default:Days=31;//其余月份為31天
15}16d++;17
if(d>Days)d=1,m++;//判斷月末
18
if(m>12)m=1,y++;//判斷年末
19
printf("%d-%d-%d\n",y,m,d);20
return0;21}953.4.4選擇結(jié)構(gòu)程序舉例例3.7
1#include<stdio.h>2int
main()3{4
int
m,d,t;5
printf("input
m,d:");6
scanf("%d%d",&m,&d);//輸入月份和日期
7t=m<7?21:23;//7月前為21,7月后為238
if(d>=t)m++;//在一個(gè)月的t號(hào)之后月份加一
9
switch(m){10
case2:printf("寶瓶\n");break;11
case3:printf("雙魚\n");break;12
case4:printf("白羊\n");break;13
case5:printf("金牛\n");break;14
case6:printf("雙子\n");break;
963.4.4選擇結(jié)構(gòu)程序舉例例3.7
15
case7:printf("巨蟹\n");break;16
case8:printf("獅子\n");break;17
case9:printf("室女\n");break;18
case10:printf("天秤\n");break;19
case11:printf("天蝎\n");break;20
case12:printf("射手\n");break;21
default:printf("摩羯\n");22}23
return0;24}973.4.4選擇結(jié)構(gòu)程序舉例圖3.7星座與日期規(guī)律9899例:設(shè)計(jì)一個(gè)簡(jiǎn)單的菜單選擇程序,根據(jù)選擇可實(shí)現(xiàn)a與b的四則運(yùn)算。#include“stdio.h”intmain(){
inta,b;charc1;printf(”1.Add\n”);printf(”2.Subtract\n”);printf(”3.Multiply\n”);printf(”4.Divide\n”);
printf(”Enteryourchoice:”);c1=getchar();5599100
c1=getchar();if(c1>=’1’&&c1<=’4’){
printf(”Enter
a,b:”);
scanf(“%d,%d”,&a,&b);switch(c1){case’1’:printf(“%d\n”,a+b);break;case’2’:printf(“%d\n”,a-b);break;case’3’:printf(“%d\n”,a*b);break;case’4’:printf(“%f\n”,(float)a/b);}}elseprintf(“Invalidselection.”);return0;}1003.5程序循環(huán)結(jié)構(gòu)1.while語(yǔ)句2.do語(yǔ)句3.for語(yǔ)句101C語(yǔ)言實(shí)驗(yàn)安排:周2晚19:00-21:4502011201、2、3、4曹光前4-16周
教室:3層北1023.5.1while語(yǔ)句while語(yǔ)句while語(yǔ)句的作用是計(jì)算給定的表達(dá)式,根據(jù)結(jié)果判定循環(huán)執(zhí)行語(yǔ)句,語(yǔ)句形式為:其中的語(yǔ)句稱為子語(yǔ)句,又稱循環(huán)體,圓括號(hào)內(nèi)的表達(dá)式稱為循環(huán)條件。
while(表達(dá)式
)語(yǔ)句;1033.5.1while語(yǔ)句while語(yǔ)句的執(zhí)行過(guò)程是:①計(jì)算表達(dá)式,無(wú)論表達(dá)式為何種類型均將這個(gè)值按邏輯值處理;②如果值為真,則執(zhí)行子語(yǔ)句,然后重復(fù)①;③如果值為假,則while語(yǔ)句結(jié)束,執(zhí)行后續(xù)語(yǔ)句。
1043.5.1while語(yǔ)句圖3.8while語(yǔ)句執(zhí)行流程ExpressionRepetitionbody1053.5.1while語(yǔ)句【例3.8】求即
1063.5.1while語(yǔ)句圖3.8while語(yǔ)句執(zhí)行流程1073.5.1while語(yǔ)句例3.8
1#include<stdio.h>2int
main()3{4
int
n=1,sum=0;5
while(n<=100){//循環(huán)直到n大于1006sum=sum+n;//累加和
7n=n+1;8}9
printf("sum=%d\n",sum);10
return0;11}1083.5.1while語(yǔ)句例3.8
4
int
n=1,sum=0;5
while(n<=100){//循環(huán)直到n大于1006sum=sum+n;//累加和
7n=n+1;8}第4行先做循環(huán)前的初始化,n為1,sum為0。第5行while語(yǔ)句時(shí)n<=100的結(jié)果為真,則執(zhí)行循環(huán)體;循環(huán)體是復(fù)合語(yǔ)句,先計(jì)算sum累加,則sum變?yōu)?+1的結(jié)果,再讓n累加1。1093.5.1while語(yǔ)句例3.8
4
int
n=1,sum=0;5
while(n<=100){//循環(huán)直到n大于1006sum=sum+n;//累加和
7n=n+1;8}重復(fù)第5行的比較和執(zhí)行過(guò)程,則n值越來(lái)越趨向100,n<=100也越來(lái)越趨向假,sum逐漸為累加和的結(jié)果;當(dāng)n為100時(shí),n<=100為真,sum為的結(jié)果,n值累加到101,則n<=100為假,while語(yǔ)句結(jié)束。1103.5.1while語(yǔ)句例3.8
4
int
n=1,sum=0;5
while(n<=100){//循環(huán)直到n大于1006sum=sum+n;//累加和
7n=n+1;8}第4行叫循環(huán)初始,即進(jìn)入循環(huán)前的初始計(jì)算過(guò)程。如果不給n和sum賦初值可不可以?1113.5.1while語(yǔ)句例3.8
4
int
n=1,sum=0;5
while(n<=100){//循環(huán)直到n大于1006sum=sum+n;//累加和
7n=n+1;8}第5行叫循環(huán)條件,即判斷是否繼續(xù)循環(huán)的條件或循環(huán)終止的條件。第7行叫循環(huán)控制,即讓循環(huán)條件趨向結(jié)束的計(jì)算過(guò)程。1123.5.1while語(yǔ)句循環(huán)結(jié)構(gòu)三要素:循環(huán)初始、循環(huán)條件和循環(huán)控制。編寫循環(huán)程序,就要精確設(shè)計(jì)三要素。循環(huán)初始發(fā)生在循環(huán)之前,使得循環(huán)“就緒”;循環(huán)條件是循環(huán)得以繼續(xù)或終止的判定,而循環(huán)控制是在循環(huán)內(nèi)部實(shí)現(xiàn)循環(huán)條件的關(guān)鍵過(guò)程。循環(huán)體可以直接或間接利用三要素來(lái)達(dá)到計(jì)算目的,也可以與三要素?zé)o關(guān)。
1133.5.1while語(yǔ)句while語(yǔ)句的說(shuō)明。while語(yǔ)句的循環(huán)體既可以是簡(jiǎn)單語(yǔ)句,又可以是復(fù)合語(yǔ)句或控制語(yǔ)句,但必須是“一個(gè)語(yǔ)句”的語(yǔ)法形式。在實(shí)際編程中,當(dāng)循環(huán)體有多條語(yǔ)句時(shí)使用復(fù)合語(yǔ)句。在循環(huán)中應(yīng)該有使while表達(dá)式趨向假的操作,否則表達(dá)式恒為真,循環(huán)永不結(jié)束,成為死循環(huán)。1143.5.1while語(yǔ)句while語(yǔ)句的說(shuō)明。由于while語(yǔ)句先計(jì)算表達(dá)式的值,再判斷是否循環(huán),所以如果表達(dá)式的值始終為假,則循環(huán)一次也不執(zhí)行,失去了循環(huán)的意義。while語(yǔ)句循環(huán)條件可以是C語(yǔ)言的任意表達(dá)式。通常情況下,循環(huán)條件是關(guān)系表達(dá)式或邏輯表達(dá)式,應(yīng)該謹(jǐn)慎出現(xiàn)別的表達(dá)式。從循環(huán)結(jié)構(gòu)來(lái)看,while語(yǔ)句前應(yīng)有循環(huán)初始,循環(huán)體內(nèi)應(yīng)有循環(huán)控制。
1153.5.2do語(yǔ)句do語(yǔ)句do語(yǔ)句的作用是先執(zhí)行語(yǔ)句,然后計(jì)算給定的表達(dá)式,根據(jù)結(jié)果判定是否循環(huán)執(zhí)行,語(yǔ)句形式為:其中的語(yǔ)句稱為子語(yǔ)句,又稱循環(huán)體,圓括號(hào)內(nèi)的表達(dá)式稱為循環(huán)條件。
do
語(yǔ)句while(表達(dá)式
);1163.5.2do語(yǔ)句do語(yǔ)句的執(zhí)行過(guò)程是:①執(zhí)行子語(yǔ)句;②計(jì)算表達(dá)式,無(wú)論表達(dá)式為何種類型均將這個(gè)值按邏輯值處理;③如果值為真,則再次執(zhí)行①;如果值為假,則do語(yǔ)句結(jié)束,執(zhí)行后續(xù)語(yǔ)句。
1173.5.2do語(yǔ)句圖3.9do-while語(yǔ)句執(zhí)行流程Repetitionexpressioncontinue1183.5.2do語(yǔ)句do語(yǔ)句的說(shuō)明。(1)do語(yǔ)句與while語(yǔ)句的語(yǔ)法和含義類似。(2)do語(yǔ)句的最后必須用分號(hào)(;)作為語(yǔ)句結(jié)束,循環(huán)體的復(fù)合語(yǔ)句形式為:do{…//復(fù)合語(yǔ)句}while(表達(dá)式
);1193.5.2do語(yǔ)句do語(yǔ)句的說(shuō)明。(3)do語(yǔ)句先執(zhí)行后判定,while語(yǔ)句則是先判定后執(zhí)行;do語(yǔ)句至少要執(zhí)行循環(huán)體一次,而while語(yǔ)句可能一次也不執(zhí)行。(4)do語(yǔ)句結(jié)構(gòu)和while語(yǔ)句結(jié)構(gòu)是可以相互替換的。圖3.9(b)就是用while語(yǔ)句表示do語(yǔ)句的流程圖,虛線框內(nèi)為while語(yǔ)句結(jié)構(gòu)。通常情況下,while語(yǔ)句比do語(yǔ)句用得多,而do語(yǔ)句使用的情形似乎就是如圖3.9(b)的while語(yǔ)句結(jié)構(gòu)。
1203.5.2do語(yǔ)句圖3.9do-while語(yǔ)句執(zhí)行流程121122例:輸入一個(gè)最多5位的無(wú)符號(hào)正整數(shù),以十、二、八、十六進(jìn)制形式輸出。intmain(){unsignednum,a;intn;
printf(”\nPleaseinputadata(1-65535):”);
scanf(”%u”,&num);printf(”\n\t10:%u\n\t2:”,num);a=num;do{n=a%2;a=a/2;/*除2取余法*/
printf(“%d\b\b”,n);}while(a!=0);
printf(”\n\t8:%o\n\t16:%x\n”,num,num);}631223.5.2do語(yǔ)句例3.9
1#include<stdio.h>2int
main()3{4
int
n=1,k=1;5
do{6k=k*n;7
scanf("%d",&n);8}while(n!=0);//輸入0時(shí)結(jié)束循環(huán)
9
printf("%d\n",k);//輸出乘積
10
return0;11}1233.5.3for語(yǔ)句for語(yǔ)句for語(yǔ)句的作用是計(jì)算給定的表達(dá)式,根據(jù)結(jié)果判定循環(huán)執(zhí)行語(yǔ)句,for語(yǔ)句有循環(huán)初始和循環(huán)控制功能,語(yǔ)句形式為:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句;1243.5.3for語(yǔ)句for語(yǔ)句的執(zhí)行過(guò)程是:①計(jì)算表達(dá)式1;②計(jì)算表達(dá)式2,無(wú)論表達(dá)式2為何種類型均將這個(gè)值按邏輯值處理;③如果值為真,則執(zhí)行循環(huán)體,然后計(jì)算表達(dá)式3,再重復(fù)②;④如果值為假,則for語(yǔ)句結(jié)束,執(zhí)行后續(xù)語(yǔ)句。
1253.5.3for語(yǔ)句圖3.10for語(yǔ)句執(zhí)行流程1263.5.3for語(yǔ)句for語(yǔ)句的應(yīng)用格式
for(循環(huán)初始;循環(huán)條件;循環(huán)控制)循環(huán)體;for(n=1,sum=0;n<=100;n++)sum=sum+n;1273.5.3for語(yǔ)句for語(yǔ)句內(nèi)中三個(gè)表達(dá)式,用分號(hào)(;)作為間隔。三個(gè)表達(dá)式均可以省略,但中間的分號(hào)不能省略,下面分情形討論。情形一。省略表達(dá)式1。省略表達(dá)式1就相當(dāng)于將循環(huán)初始計(jì)算省略了,此時(shí)應(yīng)在for語(yǔ)句之前有循環(huán)初始,如while語(yǔ)句那樣。其執(zhí)行流程如圖3.11(a)所示。1283.5.3for語(yǔ)句圖3.11for語(yǔ)句的多種形式1293.5.3for語(yǔ)句省略表達(dá)式1。n=1,sum=0;for(;n<=100;n++)sum=sum+n;//累加和1303.5.3for語(yǔ)句情形二,省略表達(dá)式2。C語(yǔ)言規(guī)定省略表達(dá)式2,則循環(huán)條件始終為真,循環(huán)永遠(yuǎn)執(zhí)行下去。其執(zhí)行流程如圖3.11(b)所示。1313.5.3for語(yǔ)句圖3.11for語(yǔ)句的多種形式1323.5.3for語(yǔ)句省略表達(dá)式2。for(n=1,sum=0;;n++)sum=sum+n;//無(wú)限循環(huán)1333.5.3for語(yǔ)句情形三,省略表達(dá)式3。省略表達(dá)式3相當(dāng)于將循環(huán)控制計(jì)算省略了,此時(shí)應(yīng)在for語(yǔ)句的循環(huán)體里有循環(huán)控制,如while語(yǔ)句那樣。其執(zhí)行流程如圖3.11(c)所示。1343.5.3for語(yǔ)句圖3.11for語(yǔ)句的多種形式1353.5.3for語(yǔ)句省略表達(dá)式3。for(n=1,sum=0;n<=100;)sum=sum+n,n++;for(n=1,sum=0;n<=100;)sum=sum+n;
n++;for(n=1,sum=0;n<=100;){sum=sum+n;
n++;}1363.5.3for語(yǔ)句情形四,省略表達(dá)式1和表達(dá)式3。此時(shí),for語(yǔ)句只有充當(dāng)循環(huán)條件的表達(dá)式2,完全等同于while語(yǔ)句,由此可見(jiàn)for語(yǔ)句比while語(yǔ)句功能強(qiáng)。例如:
n=1,sum=0;for(;n<=100;)sum=sum+n,n++;n=1,sum=0;while(n<=100)sum=sum+n,n++;137138例:for(i=10;i;i--)printf(“%d,”,i);
10,9,8,7,6,5,4,3,2,1,例:for(i=0;i<=10;i=i+2)printf(“%3d”,i);
printf(“\ni=%d”,i);
0246810i=12138139例:for(i=1,j=6;i<j;i++,j--)
printf(“%d*%d=%d\n”,i,j,i*j);
1*6=62*5=103*4=12例:空循環(huán)構(gòu)成一個(gè)延時(shí)器
longt;
for(t=0;t<=83000000;++t);
139140例:計(jì)算1~5的階乘
intmain(){
int
i,fact;
for(fact=1,i=1;i<=5;i++) {fact=fact*i;
printf("\t%d!=%d\n",i,fact);
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 輔警培訓(xùn)課件教學(xué)模板
- 失能老人護(hù)理專業(yè)培訓(xùn)課程
- 《GAT 797.2-2008公安基本裝備業(yè)務(wù)信息代碼 第2部分:公安基本裝備流向方式代碼》專題研究報(bào)告深度
- 2026年深圳中考物理磁場(chǎng)的基本性質(zhì)試卷(附答案可下載)
- 2026年深圳中考生物生物體的結(jié)構(gòu)層次試卷(附答案可下載)
- 2026年深圳中考生物高分沖刺綜合試卷(附答案可下載)
- 健身證書題庫(kù)及答案大全
- 2026年人教版物理八年級(jí)上冊(cè)期末質(zhì)量檢測(cè)卷(附答案解析)
- 大數(shù)據(jù)分析技術(shù)平臺(tái)搭建要點(diǎn)
- 2025云南昆華醫(yī)院投資管理有限公司(云南新昆華醫(yī)院)招聘3人備考題庫(kù)參考答案詳解
- 2025年華龍證券招聘考試題庫(kù)
- 森林撫育等服務(wù)采購(gòu)項(xiàng)目方案投標(biāo)文件(技術(shù)文件)
- 麻醉科常用耗材分類與管理要點(diǎn)
- 隧道人員管理辦法
- 材料力學(xué)性能檢驗(yàn)工安全教育培訓(xùn)手冊(cè)
- 健康經(jīng)濟(jì)學(xué)課件
- 2025年上海國(guó)資國(guó)企招聘筆試備考題庫(kù)(帶答案詳解)
- 小說(shuō)影視化改編的深度解析
- JJF 2214-2025 機(jī)動(dòng)車檢測(cè)用氣象單元校準(zhǔn)規(guī)范
- 嚴(yán)格招標(biāo)需求管理制度
- 外科洗手操作標(biāo)準(zhǔn)與流程
評(píng)論
0/150
提交評(píng)論