![程序流程控制_第1頁(yè)](http://file4.renrendoc.com/view10/M03/34/18/wKhkGWWgxFaAaa17AAEn2m9zdss591.jpg)
![程序流程控制_第2頁(yè)](http://file4.renrendoc.com/view10/M03/34/18/wKhkGWWgxFaAaa17AAEn2m9zdss5912.jpg)
![程序流程控制_第3頁(yè)](http://file4.renrendoc.com/view10/M03/34/18/wKhkGWWgxFaAaa17AAEn2m9zdss5913.jpg)
![程序流程控制_第4頁(yè)](http://file4.renrendoc.com/view10/M03/34/18/wKhkGWWgxFaAaa17AAEn2m9zdss5914.jpg)
![程序流程控制_第5頁(yè)](http://file4.renrendoc.com/view10/M03/34/18/wKhkGWWgxFaAaa17AAEn2m9zdss5915.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本講的主要內(nèi)容程序設(shè)計(jì)的三種基本結(jié)構(gòu)介紹順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)1程序設(shè)計(jì)的三種基本結(jié)構(gòu)介紹
程序的三種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)1.順序結(jié)構(gòu)1程序設(shè)計(jì)的三種基本結(jié)構(gòu)介紹
2.選擇結(jié)構(gòu):根據(jù)條件p選擇執(zhí)行程序的某部分,但無(wú)論選擇哪部分,程序均將匯集到同一個(gè)出口。1程序設(shè)計(jì)的三種基本結(jié)構(gòu)介紹
3.循環(huán)結(jié)構(gòu):兩種。(1)當(dāng)型循環(huán)結(jié)構(gòu)。當(dāng)條件p成立(“真”)時(shí),反復(fù)執(zhí)行A操作,直到p為“假”時(shí)才停止循環(huán)。2順序結(jié)構(gòu)1賦值語(yǔ)句形式:變量=表達(dá)式結(jié)合方向:從右到左變量=變量=表達(dá)式等價(jià)于:變量=(變量=表達(dá)式)例如:inta=5,b=6;c=7;d=9;二者是不同的。在變量說(shuō)明中,不允許連續(xù)給多個(gè)變量賦初值。if((x=y+5)>0)z=x;合法
if((x=y+5;)>0)z=x;非法2.1printf()函數(shù)
輸出語(yǔ)句printf()函數(shù)
printf()函數(shù)的作用:向計(jì)算機(jī)系統(tǒng)默認(rèn)的輸出設(shè)備(一般指終端或顯示器)輸出一個(gè)或多個(gè)任意類型的數(shù)據(jù)。
printf()函數(shù)的一般格式
[案例3.1]已知圓半徑radius=1.5,求圓周長(zhǎng)和圓面積。
/*案例代碼文件名:AL3_1.C。*/
main()
{floatradius,length,area,pi=3.1415926;
radius=1.5;
length=2*pi*radius; /*求圓周長(zhǎng)*/
area=pi*radius*radius; /*求圓面積*/
printf(“radius=%f\n”,radius); /*輸出圓半徑*/
printf(“l(fā)ength=%7.2f,area=%7.2f\n”,length,area); /*輸出圓周長(zhǎng)、面積*/
}
程序運(yùn)行結(jié)果如下:
radius=1.500000length=9.42,area=7.07 printf()函數(shù)的一般格式如下:printf("格式字符串"[,輸出項(xiàng)表]);
1.格式字符串?!案袷阶址币卜Q“轉(zhuǎn)換控制字符串”,可以包含三種字符:(1)格式指示符。格式指示符的一般形式如下:%[標(biāo)志][寬度][.精度][F|N|h|L][類型]
常用的標(biāo)志字符如表3-1所示,常用的寬度指示符如表3-2所示,常用的精度指示符如表3-3所示,長(zhǎng)度修飾符如表3-4所示,類型轉(zhuǎn)換字符如表3-5所示。
(2)轉(zhuǎn)義字符例如,[案例3.1]中printf()函數(shù)中的'\n'就是轉(zhuǎn)義字符,輸出時(shí)產(chǎn)生一個(gè)“換行”操作。(3)普通字符──除格式指示符和轉(zhuǎn)義字符之外的其它字符。格式字符串中的普通字符,原樣輸出。例如,[案例3.1]中“printf("radius=%f\n",radius);”語(yǔ)句中的“radius=”,“printf("length=%7.2f,area=%7.2f\n",length,area);”語(yǔ)句中的“l(fā)ength=”、“area=”等都是普通字符。
2.輸出項(xiàng)表輸出項(xiàng)表是可選的。如果要輸出的數(shù)據(jù)不止1個(gè),相鄰2個(gè)之間用逗號(hào)分開(kāi)。下面的printf()函數(shù)都是合法的:(1)printf("Iamastudent.\n");
(2)printf("%d",3+2);
(3)printf("a=%fb=%5d\n",a,a+3); 必須強(qiáng)調(diào):“格式字符串”中的格式指示符,必須與“輸出項(xiàng)表”中、輸出項(xiàng)的數(shù)據(jù)類型一致,否則會(huì)引起輸出錯(cuò)誤。3格式指示符
輸出不同類型的數(shù)據(jù),要使用不同的類型轉(zhuǎn)換字符。類型轉(zhuǎn)換字符d──以帶符號(hào)的十進(jìn)制整數(shù)形式輸出。
[案例3.2]類型轉(zhuǎn)換字符d的使用。/*案例代碼文件名:AL3_2.C。*/main(){intnum1=123;longnum2=123456;/*用3種不同格式,輸出int型數(shù)據(jù)num1的值*/printf("num1=%d,num1=%5d,num1=%-5d,num1=%2d\n",num1,num1,num1,num1);/*用3種不同格式,輸出long型數(shù)據(jù)num2的值*/printf("num2=%ld,num2=%8ld,num2=%5ld\n",num2,num2,num2);printf("num1=%ld\n",num1);} 程序運(yùn)行結(jié)果如下:num1=123,num1=□□123,num1=123□□,num1=123num2=123456,num2=□□123456,num2=123456num1=16908411
對(duì)于整數(shù),還可用八進(jìn)制、無(wú)符號(hào)形式(%o(小寫(xiě)字母o))和十六進(jìn)制、無(wú)符號(hào)形式(%x)輸出。對(duì)于unsigned型數(shù)據(jù),也可用%u格式符,以十進(jìn)制、無(wú)符號(hào)形式輸出。所謂無(wú)符號(hào)形式是指,不論正數(shù)還是負(fù)數(shù),系統(tǒng)一律當(dāng)作無(wú)符號(hào)整數(shù)來(lái)輸出。例如,printf("%d,%o,%x\n",-1,-1,-1);類型轉(zhuǎn)換字符f──以小數(shù)形式、按系統(tǒng)默認(rèn)的寬度,輸出單精度和雙精度實(shí)數(shù)。[案例3.3]類型轉(zhuǎn)換字符f的使用。/*案例代碼文件名:AL3_3.C。*/main(){floatf=123.456;doubled1,d2;d1=1111111111111.111111111;d2=2222222222222.222222222;printf("%f,%12f,%12.2f,%-12.2f,%.2f\n",f,f,f,f,f);printf("d1+d2=%f\n",d1+d2);}
程序運(yùn)行結(jié)果如下:
123.456001,□□123.456001,□□□□□□123.46,123.46□□□□□□,123.46d1+d2=3333333333333.333010 類型轉(zhuǎn)換字符c──輸出一個(gè)字符(只占一列寬度)。[案例3.4]類型轉(zhuǎn)換字符c的使用。/*案例代碼文件名:AL3_4.C。*/main(){charc='A';inti=65;printf("c=%c,%5c,%d\n",c,c,c);printf("i=%d,%c",i,i);}程序運(yùn)行結(jié)果如下:
c=A,□□□□A,65i=65,A [程序演示]
需要強(qiáng)調(diào)的是:在C語(yǔ)言中,整數(shù)可以用字符形式輸出,字符數(shù)據(jù)也可以用整數(shù)形式輸出。將整數(shù)用字符形式輸出時(shí),系統(tǒng)首先求該數(shù)與256的余數(shù),然后將余數(shù)作為ASCII碼,轉(zhuǎn)換成相應(yīng)的字符輸出。類型轉(zhuǎn)換字符s──輸出一個(gè)字符串。[案例3.5]類型轉(zhuǎn)換字符s的使用。/*案例代碼文件名:AL3_10.C。*/main(){printf("%s,%5s,%-10s","Internet","Internet","Internet");printf("%10.5s,%-10.5s,%4.5s\n","Internet","Internet","Internet");} [程序演示]程序運(yùn)行結(jié)果如下:Internet,Internet,Internet□□,□□□□□Inter,Inter□□□□□,Inter注意:系統(tǒng)輸出字符和字符串時(shí),不輸出單引號(hào)和雙引號(hào)。4使用說(shuō)明(1)printf()可以輸出常量、變量和表達(dá)式的值。但格式控制中的格式說(shuō)明符,必須按從左到右的順序,與輸出項(xiàng)表中的每個(gè)數(shù)據(jù)一一對(duì)應(yīng),否則出錯(cuò)。例如,printf("str=%s,f=%d,i=%f\n","Internet",1.0/2.0,3+5,"CHINA");是錯(cuò)誤的。(2)格式字符x、e、g可以用小寫(xiě)字母,也可以用大寫(xiě)字母。使用大寫(xiě)字母時(shí),輸出數(shù)據(jù)中包含的字母也大寫(xiě)。除了x、e、g格式字符外,其它格式字符必須用小寫(xiě)字母。例如,%f不能寫(xiě)成%F。(3)格式字符緊跟在“%”后面就作為格式字符,否則將作為普通字符使用(原樣輸出)。例如,“printf(”c=%c,f=%f\n“,c,f);”中的第一個(gè)c和f,都是普通字符。2.2格式化輸入——scanf()函數(shù)scanf()函數(shù)是用來(lái)從外部輸入設(shè)備向計(jì)算機(jī)主機(jī)輸入數(shù)據(jù)的。
2.2.1scanf()函數(shù)的一般格式
[案例3.6]已知圓柱體的底半徑radius=1.5,高h(yuǎn)igh=2.0,求其體積。
/*案例代碼文件名:AL3_6.C。*/
main()
{floatradius=1.5,high=2.0,pi=3.14159,vol;
vol=pi*radius*radius*high;/*求體積*/
printf(“vol=%7.2f\n”,vol); /*輸出求出的體積*/
} [案例3.7]已知圓柱體的底半徑為radius,高為high,求其體積。/*案例代碼文件名:AL3_7.C。*//*功能:說(shuō)明函數(shù)scanf()的格式及作用。*/main(){floatradius,high,vol,pi=3.1415926;printf("Pleaseinputradius&high:");scanf("%f%f",&radius,&high); /*從鍵盤(pán)輸入兩個(gè)實(shí)數(shù)賦給變量r,h*/vol=pi*radius*radius*high;printf("radius=%7.2f,high=%7.2f,vol=%7.2f\n",radius,high,vol);} 程序運(yùn)行結(jié)果如下:
Pleaseinputradius&high:1.5□2.0↙radius=□□□1.50,high=□□□2.00,vol=□□14.14在程序中給計(jì)算機(jī)提供數(shù)據(jù),可以用賦值語(yǔ)句,也可以用輸入函數(shù)。在C語(yǔ)言中,可使用scanf()函數(shù),通過(guò)鍵盤(pán)輸入,給計(jì)算機(jī)同時(shí)提供多個(gè)、任意的數(shù)據(jù)。1.scanf()函數(shù)的一般格式scanf("格式字符串",輸入項(xiàng)首地址表);(1)格式字符串。格式字符串可以包含3種類型的字符:格式指示符、空白字符(空格、Tab鍵和回車鍵)和非空白字符(又稱普通字符)。格式指示符與printf()函數(shù)的相似,空白字符作為相鄰2個(gè)輸入數(shù)據(jù)的缺省分隔符,非空白字符在輸入有效數(shù)據(jù)時(shí),必須原樣一起輸入。(2)輸入項(xiàng)首地址表──由若干個(gè)輸入項(xiàng)首地址組成,相鄰2個(gè)輸入項(xiàng)首地址之間,用逗號(hào)分開(kāi)。輸入項(xiàng)首地址表中的地址,可以是變量的首地址,也可以是字符數(shù)組名或指針變量。變量首地址的表示方法:&變量名其中“&”是地址運(yùn)算符。例如,[案例3.7]中的“&radius”是指變量radius在內(nèi)存中的首地址。
2.scanf()函數(shù)的功能:從鍵盤(pán)上接收格式化輸入。運(yùn)行[案例3.7]的程序時(shí),從鍵盤(pán)上輸入2個(gè)實(shí)數(shù),分別存入&radius、&high起始的存儲(chǔ)單元中,即輸入兩個(gè)實(shí)數(shù)分別賦給radius和high。2.2.2格式指示符格式指示符的一般形式為:%[*][寬度][F|N][h|l]類型字符
1.類型字符類型字符如表3-6所示。例如,在[案例3.7]的scanf()函數(shù)語(yǔ)句中,格式字符串“%f%f”。
2.寬度n
指定該項(xiàng)輸入數(shù)據(jù)所占列數(shù)為n。換句話說(shuō),讀取輸入數(shù)據(jù)中相應(yīng)的n位,但按需要的位數(shù)賦給相應(yīng)的變量,多余部分被舍棄。例如,scanf("%3c%3c",&ch1,&ch2);printf("ch1=%c,ch2=%c\n",ch1,ch2);
假設(shè)輸入“abcdefg”,則系統(tǒng)將讀取的“abc”中的“a”賦給變量ch1;將讀取的“def”中的“d”賦給變量ch2,所以printf()函數(shù)的輸出結(jié)果為:ch1=a,ch2=d。3.賦值抑制字符*
表示本輸入項(xiàng)對(duì)應(yīng)的數(shù)據(jù)讀入后,不賦給相應(yīng)的變量(該變量由下一個(gè)格式指示符輸入)。例如,scanf("%2d%*2d%3d",&num1,&num2);printf("num1=%d,num2=%d\n",num1,num2);
假設(shè)輸入“123456789”,則系統(tǒng)將讀取“12”并賦值給num1;讀取“34”、但舍棄掉(“*”的作用);讀取“567”并賦值給num2。所以,printf()函數(shù)的輸出結(jié)果為:num1=12,num2=567。
4.類型修飾符──F、N、h、l。其含義與printf()中的一樣,分別為遠(yuǎn)指針、近指針、短整型和長(zhǎng)整型。2.2.3數(shù)據(jù)輸入操作
1.如果相鄰2個(gè)格式指示符之間,不指定數(shù)據(jù)分隔符(如逗號(hào)、冒號(hào)等),則相應(yīng)的2個(gè)輸入數(shù)據(jù)之間,至少用一個(gè)空格分開(kāi),或者用Tab鍵分開(kāi),或者輸入1個(gè)數(shù)據(jù)后,按回車,然后再輸入下1個(gè)數(shù)據(jù)。例如,scanf("%d%d",&num1,&num2);
假設(shè)給num1輸入12,給num2輸入36,則正確的輸入操作為:12□36↙
或者:12↙36↙
注:使用“↙”符號(hào)表示按回車鍵操作,在輸入數(shù)據(jù)操作中的作用是,通知系統(tǒng)輸入操作結(jié)束。2.“格式字符串”中出現(xiàn)的普通字符(包括轉(zhuǎn)義字符形式的字符),務(wù)必原樣輸入。例如,scanf("%d,%d",&num1,&num2);
假設(shè)給num1輸入12,給num2輸入36,正確的輸入操作為:12,36↙
另外,scanf()函數(shù)中、格式字符串內(nèi)的轉(zhuǎn)義字符(如\n),系統(tǒng)并不把它當(dāng)轉(zhuǎn)義字符來(lái)解釋,從而產(chǎn)生一個(gè)控制操作,而是將其視為普通字符,所以也要原樣輸入。例如:scanf("num1=%d,num2=%d\n",&num1,&num2);
假設(shè)給num1輸入12,給num2輸入36,正確的輸入操作為:
num1=12,num2=36\n↙提高人機(jī)交互性建議:為改善人機(jī)交互性,同時(shí)簡(jiǎn)化輸入操作,在設(shè)計(jì)輸入操作時(shí),一般先用printf()函數(shù)輸出一個(gè)提示信息,再用scanf()函數(shù)進(jìn)行數(shù)據(jù)輸入。例如,將scanf("num1=%d,num2=%d\n",&num1,&num2);改為:
printf("num1=");scanf("%d",&num1);printf("num2=");scanf("%d",&num2);3.輸入數(shù)據(jù)時(shí),遇到以下情況,系統(tǒng)認(rèn)為該數(shù)據(jù)結(jié)束:(1)遇到空格,或者回車鍵,或者Tab鍵。(2)遇到輸入域?qū)挾冉Y(jié)束。例如“%3d”,只取3列。(3)遇到非法輸入。例如,在輸入數(shù)值數(shù)據(jù)時(shí),遇到字母等非數(shù)值符號(hào)(數(shù)值符號(hào)僅由數(shù)字字符0-9、小數(shù)點(diǎn)和正負(fù)號(hào)構(gòu)成)。4.使用格式說(shuō)明符“%c”輸入單個(gè)字符時(shí),空格和轉(zhuǎn)義字符均作為有效字符被輸入。例如,scanf("%c%c%c",&ch1,&ch2,&ch3);printf("ch1=%c,ch2=%c,ch3=%c\n",ch1,ch2,ch3);
假設(shè)輸入:A□B□C↙,則系統(tǒng)將字母'A'賦值給ch1,空格'□'賦值給ch2,字母'B'賦值給ch3。2.3單個(gè)字符輸入輸出——getchar()和putchar()函數(shù)2.3.1單個(gè)字符的輸出──putchar()函數(shù)[案例3.8]putchar()函數(shù)的格式和使用方法。/*案例代碼文件名:AL3_8.C*//*功能:說(shuō)明putchar()函數(shù)的格式和使用方法。*/#include"stdio.h" /*編譯預(yù)處理命令:文件包含*/main(){charch1='N',ch2='E',ch3='W';putchar(ch1);putchar(ch2);putchar(ch3); /*輸出*/putchar('\n');putchar(ch1);putchar('\n'); /*輸出ch1的值,并換行*/putchar('E');putchar('\n'); /*輸出字符'E',并換行*/putchar(ch3);putchar('\n');程序運(yùn)行結(jié)果如下:
NEWNEW1.putchar()函數(shù)的格式:
putchar(ch);
其中ch可以是一個(gè)字符變量或常量,也可以是一個(gè)轉(zhuǎn)義字符。
2.putchar()函數(shù)的作用:向終端輸出一個(gè)字符。(1)putchar()函數(shù)只能用于單個(gè)字符的輸出,且一次只能輸出一個(gè)字符。另外,從功能角度來(lái)看,printf()函數(shù)可以完全代替putchar()函數(shù)。(2)在程序中使用putchar()函數(shù),務(wù)必牢記:在程序(或文件)的開(kāi)頭加上編譯預(yù)處理命令(也稱包含命令),即:
#include"stdio.h"
表示要使用的函數(shù),包含在標(biāo)準(zhǔn)輸入輸出(stdio)頭文件(.h)中。3.3.2單個(gè)字符的輸入──getchar()函數(shù)[案例3.9]說(shuō)明getchar()函數(shù)的格式和作用。/*案例代碼文件名:AL3_9.C*//*功能:說(shuō)明getchar()函數(shù)的格式和作用。*/#include"stdio.h" /*文件包含*/main(){charch;printf("Pleaseinputtwocharacter:");ch=getchar(); /*輸入1個(gè)字符并賦給ch*/putchar(ch);putchar('\n');putchar(getchar()); /*輸入一個(gè)字符并輸出*/putchar('\n');} 程序運(yùn)行情況如下:
Pleaseinputtwocharacters:ab↙ab1.getchar()函數(shù)的格式:getchar();2.getchar()函數(shù)的作用:從系統(tǒng)隱含的輸入設(shè)備(如鍵盤(pán))輸入一個(gè)字符。另外,從功能角度來(lái)看,scanf()函數(shù)可以完全代替getchar()函數(shù)。(1)getchar()函數(shù)只能用于單個(gè)字符的輸入,一次輸入一個(gè)字符。(2)程序中要使用getchar()函數(shù),必須在程序(或文件)的開(kāi)頭加上編譯預(yù)處理命令:
#include"stdio.h“選擇結(jié)構(gòu)
-----if語(yǔ)句3.3.1if語(yǔ)句[案例4.1]輸入任意三個(gè)整數(shù)num1、num2、num3,求三個(gè)數(shù)中的最大值。
/*案例代碼文件名:AL4_1.C。*/
/*功能:說(shuō)明if語(yǔ)句的格式。*/
main()
{intnum1,num2,num3,max;
printf("Pleaseinputthreenumbers:");
scanf("%d,%d,%d",&num1,&num2,&num3);
if(num1>num2)
max=num1;
else
max=num2;
if(num3>max)
max=num3;
printf("Thethreenumbersare:%d,%d,%d\n",num1,num2,num3);
printf("max=%d\n",max);
}
形式:if(表達(dá)式)語(yǔ)句;程序運(yùn)行情況如下:
Pleaseinputthreenumbers:11,22,18↙Thethreenumbersare:11,22,18max=22本案例中的第1個(gè)if語(yǔ)句,可優(yōu)化為如下不帶else子句的形式:max=num1;if(num2>max)max=num2;這種優(yōu)化形式的基本思想是:首先取一個(gè)數(shù)預(yù)置為max(最大值),然后再用max依次與其余的數(shù)逐個(gè)比較,如果發(fā)現(xiàn)有比max大的,就用它給max重新賦值,比較完所有的數(shù)后,max中的數(shù)就是最大值。這種方法,對(duì)從3個(gè)或3個(gè)以上的數(shù)中找最大值的處理,非常有效。請(qǐng)讀者仔細(xì)體會(huì)。
1.if語(yǔ)句的一般格式
if(表達(dá)式){語(yǔ)句組1;}[else{語(yǔ)句組2;}](1)if語(yǔ)句中的“表達(dá)式”必須用“(”和“)”括起來(lái)。(2)else子句(可選)是if語(yǔ)句的一部分,必須與if配對(duì)使用,不能單獨(dú)使用。(3)當(dāng)if和else下面的語(yǔ)句組,僅由一條語(yǔ)句構(gòu)成時(shí),也可不使用復(fù)合語(yǔ)句形式(即去掉花括號(hào))。
2.if語(yǔ)句的執(zhí)行過(guò)程(1)缺省else子句時(shí)當(dāng)“表達(dá)式”的值不等于0(即判定為“邏輯真”)時(shí),則執(zhí)行語(yǔ)句組1,否則直接轉(zhuǎn)向執(zhí)行下一條。如圖4-1(a)所示。(2)指定else子句時(shí)當(dāng)“表達(dá)式”的值不等于0(即判定為“邏輯真”)時(shí),則執(zhí)行語(yǔ)句組1,然后轉(zhuǎn)向下一條語(yǔ)句;否則,執(zhí)行語(yǔ)句組2。如圖4-1(b)所示。
3.if語(yǔ)句的嵌套與嵌套匹配原則
if語(yǔ)句允許嵌套。所謂if語(yǔ)句的嵌套是指,在“語(yǔ)句組1”或(和)“語(yǔ)句組2”中,又包含有if語(yǔ)句的情況。
if語(yǔ)句嵌套時(shí),else子句與if的匹配原則:與在它上面、距它最近、且尚未匹配的if配對(duì)。為明確匹配關(guān)系,避免匹配錯(cuò)誤,強(qiáng)烈建議:將內(nèi)嵌的if語(yǔ)句,一律用花括號(hào)括起來(lái)。[案例4.3]寫(xiě)一程序,從鍵盤(pán)上輸入1年份year(4位十進(jìn)制數(shù)),判斷其是否閏年。閏年的條件是:能被4整除、但不能被100整除,或者能被400整除。算法設(shè)計(jì)要點(diǎn):(1)如果X能被Y整除,則余數(shù)為0,即如果X%Y的值等于0,則表示X能被Y整除?。?)首先將是否閏年的標(biāo)志leap預(yù)置為0(非閏年),這樣僅當(dāng)year為閏年時(shí)將leap置為1即可。這種處理兩種狀態(tài)值的方法,對(duì)優(yōu)化算法和提高程序可讀性非常有效,請(qǐng)讀者仔細(xì)體會(huì)。參考程序如下:/*案例代碼文件名:AL4_3.C。*//*功能:說(shuō)明if語(yǔ)句的嵌套格式和用法。*/main(){intyear,leap=0; /*leap=0:預(yù)置為非閏年*/printf("Pleaseinputtheyear:");scanf("%d",&year);
if(year%4==0){if(year%100!=0)leap=1;}else{if(year%400==0)leap=1;}if(leap)printf("%disaleapyear.\n",year);elseprintf("%disnotaleapyear.\n",year);} 利用邏輯運(yùn)算能描述復(fù)雜條件的特點(diǎn),可將上述程序優(yōu)化如下:main(){intyear;printf("Pleaseinputtheyear:");scanf("%d",&year);if((year%4==0&&year%100!=0)||(year%400==0))printf("%disaleapyear.\n",year);elseprintf("%disnotaleapyear.\n",year);}4.說(shuō)明(1)if后面的“表達(dá)式”,除常見(jiàn)的關(guān)系表達(dá)式或邏輯表達(dá)式外,也允許是其它類型的數(shù)據(jù),如整型、實(shí)型、字符型等。(2)if語(yǔ)句允許嵌套,但嵌套的層數(shù)不宜太多。在實(shí)際編程時(shí),應(yīng)適當(dāng)控制嵌套層數(shù)(2~3層)。(3)“語(yǔ)句組1”和“語(yǔ)句組2”,可以只包含一個(gè)簡(jiǎn)單語(yǔ)句,也可以是復(fù)合語(yǔ)句。務(wù)必牢記:不管是簡(jiǎn)單語(yǔ)句,還是復(fù)合語(yǔ)句中的各個(gè)語(yǔ)句,每個(gè)語(yǔ)句后面的分號(hào)必不可少!例如,[案例4.1]中的:
if(num1>num2)max=num1;elsemax=num2;語(yǔ)句:
if行后面的賦值語(yǔ)句“max=num1;”分號(hào)不能省略。但不要誤認(rèn)為if和else是2個(gè)獨(dú)立的語(yǔ)句,它們都屬于if語(yǔ)句中的一部分,else是if語(yǔ)句的子句。4.說(shuō)明(1)if后面的“表達(dá)式”,除常見(jiàn)的關(guān)系表達(dá)式或邏輯表達(dá)式外,也允許是其它類型的數(shù)據(jù),如整型、實(shí)型、字符型等。(2)if語(yǔ)句允許嵌套,但嵌套的層數(shù)不宜太多。在實(shí)際編程時(shí),應(yīng)適當(dāng)控制嵌套層數(shù)(2~3層)。(3)“語(yǔ)句組1”和“語(yǔ)句組2”,可以只包含一個(gè)簡(jiǎn)單語(yǔ)句,也可以是復(fù)合語(yǔ)句。務(wù)必牢記:不管是簡(jiǎn)單語(yǔ)句,還是復(fù)合語(yǔ)句中的各個(gè)語(yǔ)句,每個(gè)語(yǔ)句后面的分號(hào)必不可少!例如,[案例4.1]中的:
if(num1>num2)max=num1;elsemax=num2;語(yǔ)句:
if行后面的賦值語(yǔ)句“max=num1;”分號(hào)不能省略。但不要誤認(rèn)為if和else是2個(gè)獨(dú)立的語(yǔ)句,它們都屬于if語(yǔ)句中的一部分,else是if語(yǔ)句的子句。3.2switch語(yǔ)句C語(yǔ)言提供了switch語(yǔ)句直接處理多分支選擇。[案例4.5]從鍵盤(pán)上輸入一個(gè)百分制成績(jī)score,按下列原則輸出其等級(jí):score≥90,等級(jí)為A;80≤score<90,等級(jí)為B;70≤score<80,等級(jí)為C;60≤score<70,等級(jí)為D;score<60,等級(jí)為E。
/*案例代碼文件名:AL4_5.C。*/
main()
{intscore,grade;
printf(“Inputascore(0~100):”);
scanf(“%d”,&score);
grade=score/10;/*將成績(jī)整除10,轉(zhuǎn)化成switch語(yǔ)句中的case標(biāo)號(hào)*/
switch(grade){case10:case9:printf(“grade=A\n”);break; 1.switch語(yǔ)句的一般形式switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句組;break;
case常量表達(dá)式2:語(yǔ)句組;break;......case常量表達(dá)式n:語(yǔ)句組;break;
[default:語(yǔ)句組;[break;]] }
2.執(zhí)行過(guò)程(1)當(dāng)switch后面“表達(dá)式”的值,與某個(gè)case后面的“常量表達(dá)式”的值相同時(shí),就執(zhí)行該case后面的語(yǔ)句(組);當(dāng)執(zhí)行到break語(yǔ)句時(shí),跳出switch語(yǔ)句,轉(zhuǎn)向執(zhí)行switch語(yǔ)句的下一條。(2)如果沒(méi)有任何一個(gè)case后面的“常量表達(dá)式”的值,與“表達(dá)式”的值匹配,則執(zhí)行default后面的語(yǔ)句(組)。然后,再執(zhí)行switch語(yǔ)句的下一條。
3.說(shuō)明(1)switch后面的“表達(dá)式”,可以是int、char和枚舉型中的一種。(2)每個(gè)case后面“常量表達(dá)式”的值,必須各不相同,否則會(huì)出現(xiàn)相互矛盾的現(xiàn)象(即對(duì)表達(dá)式的同一值,有兩種或兩種以上的執(zhí)行方案)。(3)case后面的常量表達(dá)式僅起語(yǔ)句標(biāo)號(hào)作用,并不進(jìn)行條件判斷。系統(tǒng)一旦找到入口標(biāo)號(hào),就從此標(biāo)號(hào)開(kāi)始執(zhí)行,不再進(jìn)行標(biāo)號(hào)判斷,所以必須加上break語(yǔ)句,以便結(jié)束switch語(yǔ)句。(4)各case及default子句的先后次序,不影響程序執(zhí)行結(jié)果。(5)多個(gè)case子句,可共用同一語(yǔ)句(組)。例如,在[案例4.5]中的“case10:”和“case9:”共用語(yǔ)句“printf("grade=A\n");break;”,“case5:”~“case0:”共用語(yǔ)句“printf("grade=E\n");break;”。(6)用switch語(yǔ)句實(shí)現(xiàn)的多分支結(jié)構(gòu)程序,完全可以用if語(yǔ)句或if語(yǔ)句的嵌套來(lái)實(shí)現(xiàn)。C語(yǔ)言提供了switch語(yǔ)句直接處理多分支選擇。[案例4.5]從鍵盤(pán)上輸入一個(gè)百分制成績(jī)score,按下列原則輸出其等級(jí):score≥90,等級(jí)為A;80≤score<90,等級(jí)為B;70≤score<80,等級(jí)為C;60≤score<70,等級(jí)為D;score<60,等級(jí)為E。
/*案例代碼文件名:AL4_5.C。*/
main()
{intscore,grade;
printf(“Inputascore(0~100):”);
scanf(“%d”,&score);
grade=score/10;/*將成績(jī)整除10,轉(zhuǎn)化成switch語(yǔ)句中的case標(biāo)號(hào)*/
switch(grade){case10:case9:printf(“grade=A\n”);break; case8:printf("grade=B\n");break;case7:printf("grade=C\n");break;case6:printf("grade=D\n");break;
case5:case4:case3:case2:case1:case0:printf(“grade=E\n”);break;default:printf(“Thescoreisoutofrange!\n”); }
} 程序運(yùn)行情況如下:Inputascore(0~100):85↙grade=B
多個(gè)case可以共用一個(gè)語(yǔ)句4循環(huán)結(jié)構(gòu)求1~100的累計(jì)和。根據(jù)已有的知識(shí),可以用“1+2+……+100”來(lái)求解,但顯然很繁瑣?,F(xiàn)在換個(gè)思路來(lái)考慮:首先設(shè)置一個(gè)累計(jì)器sum,其初值為0,利用sum+=n來(lái)計(jì)算(n依次取1、2、……、100),只要解決以下3個(gè)問(wèn)題即可:
(1)將n的初值置為1;
(2)每執(zhí)行1次“sum+=n”后,n增1;
(3)當(dāng)n增到101時(shí),停止計(jì)算。此時(shí),sum的值就是1~100的累計(jì)和。
根據(jù)已有的知識(shí),單獨(dú)實(shí)現(xiàn)每一步都不難。但是,由于需要經(jīng)常使用這種重復(fù)計(jì)算結(jié)構(gòu)(稱為循環(huán)結(jié)構(gòu)),C語(yǔ)言提供了3條循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn),以簡(jiǎn)化、并規(guī)范循環(huán)結(jié)構(gòu)程序設(shè)計(jì)。在C語(yǔ)言中,可用以下語(yǔ)句實(shí)現(xiàn)循環(huán):(1)用for語(yǔ)句。(2)用do-while語(yǔ)句。(3)用while語(yǔ)句。(4)用goto語(yǔ)句和if語(yǔ)句構(gòu)成循環(huán)。使用goto語(yǔ)句實(shí)現(xiàn)求解1~100累計(jì)和的程序可以如下:main(){intn=1,sum=0;loop:sum+=n;n++;if(n<=100)gotoloop;printf(“sum=%d\n”,sum);}其中“l(fā)oop:”為語(yǔ)句標(biāo)號(hào)(格式:標(biāo)號(hào):語(yǔ)句行),其命名遵循標(biāo)識(shí)符命名規(guī)則。goto語(yǔ)句格式:goto
標(biāo)號(hào),功能為:使系統(tǒng)轉(zhuǎn)向標(biāo)號(hào)所在的語(yǔ)句行執(zhí)行。注意:結(jié)構(gòu)化程序設(shè)計(jì)方法,主張限制使用goto語(yǔ)句。因?yàn)闉E用goto語(yǔ)句,將會(huì)導(dǎo)致程序結(jié)構(gòu)無(wú)規(guī)律、可讀性差。
另外,從功能上說(shuō),for語(yǔ)句可完全代替當(dāng)型循環(huán)語(yǔ)句while,所以該語(yǔ)句也不是必需的。4.1for語(yǔ)句和while語(yǔ)句
在3條循環(huán)語(yǔ)句中,for語(yǔ)句最為靈活,不僅可用于循環(huán)次數(shù)已經(jīng)確定的情況,也可用于循環(huán)次數(shù)雖不確定、但給出了循環(huán)繼續(xù)條件的情況。
[案例5.1]求1~100的累計(jì)和。
/*案例代碼文件名:AL5_1.C*/
/*程序功能:求1~100的累計(jì)和*/
main()
{inti,sum=0; /*將累加器sum初始化為0*/
for(i=1;i<=100;i++)sum+=i; /*實(shí)現(xiàn)累加*/
printf("sum=%d\n",sum);
} 程序運(yùn)行情況如下:sum=5050[案例5.2]求n的階乘n!(n!=1*2*……*n)。
/*案例代碼文件名:AL5_2.C*/
/*程序功能:求n!*/
main()
{inti,n;
longfact=1; /*將累乘器fact初始化為1*/
printf(“Inputn:”);scanf(“%d”,&n);
for(i=1;i<=n;i++)fact*=i; /*實(shí)現(xiàn)累乘*/
printf("%d!=%ld\n",n,fact);
} 程序運(yùn)行情況如下:
Inputn:5↙
5!=1201.for語(yǔ)句的一般格式
for([變量賦初值];[循環(huán)繼續(xù)條件];[循環(huán)變量增值])
{循環(huán)體語(yǔ)句組;}2.for語(yǔ)句的執(zhí)行過(guò)程執(zhí)行過(guò)程如圖5-1所示。(1)求解“變量賦初值”表達(dá)式。(2)求解“循環(huán)繼續(xù)條件”表達(dá)式。如果其值非0,執(zhí)行(3);否則,轉(zhuǎn)至(4)。(3)執(zhí)行循環(huán)體語(yǔ)句組,并求解“循環(huán)變量增值”表達(dá)式,然后轉(zhuǎn)向(2)。(4)執(zhí)行for語(yǔ)句的下一條語(yǔ)句。3.說(shuō)明(1)“變量賦初值”、“循環(huán)繼續(xù)條件”和“循環(huán)變量增值”部分均可缺省,甚至全部缺省,但其間的分號(hào)不能省略。(2)當(dāng)循環(huán)體語(yǔ)句組僅由一條語(yǔ)句構(gòu)成時(shí),可以不使用復(fù)合語(yǔ)句形式,如上例所示。(3)“循環(huán)變量賦初值”表達(dá)式,既可以是給循環(huán)變量賦初值的賦值表達(dá)式,也可以是與此無(wú)關(guān)的其它表達(dá)式(如逗號(hào)表達(dá)式)。例如,for(sum=0;i<=100;i++)sum+=i;for(sum=0,i=1;i<=100;i++)sum+=i; (4)“循環(huán)繼續(xù)條件”部分是一個(gè)邏輯量,除一般的關(guān)系(或邏輯)表達(dá)式外,也允許是數(shù)值(或字符)表達(dá)式。
4.while語(yǔ)句(1)一般格式
while(循環(huán)繼續(xù)條件)
{循環(huán)體語(yǔ)句組;}(2)執(zhí)行過(guò)程執(zhí)行過(guò)程如圖5-2所示。1)求解“循環(huán)繼續(xù)條件”表達(dá)式。如果其值為非0,轉(zhuǎn)2);否則轉(zhuǎn)3)。2)執(zhí)行循環(huán)體語(yǔ)句組,然后轉(zhuǎn)1)。3)執(zhí)行while語(yǔ)句的下一條。顯然,while循環(huán)是for循環(huán)的一種簡(jiǎn)化形式(缺省“變量賦初值”和“循環(huán)變量增值”表達(dá)式)。
[案例5.3]用while語(yǔ)句求1~100的累計(jì)和。
/*案例代碼文件名:AL5_3.C*/
/*程序功能:求1~100的累計(jì)和*/
main()
{inti=1,sum=0; /*初始化循環(huán)控制變量i和累計(jì)器sum*/
while(i<=100)
{sum+=i; /*實(shí)現(xiàn)累加*/
i++; /*循環(huán)控制變量i增1*/
}
printf(“sum=%d\n”,sum);
} 程序運(yùn)行情況如下:
sum=5050
5.循環(huán)嵌套(1)循環(huán)語(yǔ)句的循環(huán)體內(nèi),又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。循環(huán)嵌套的概念,對(duì)所有高級(jí)語(yǔ)言都是一樣的。(2)for語(yǔ)句和while語(yǔ)句允許嵌套,do-while語(yǔ)句也不例外。4.2直到型循環(huán)do-while語(yǔ)句1.一般格式
do{循環(huán)體語(yǔ)句組;}while(循環(huán)繼續(xù)條件); /*本行的分號(hào)不能缺省*/當(dāng)循環(huán)體語(yǔ)句組僅由一條語(yǔ)句構(gòu)成時(shí),可以不使用復(fù)合語(yǔ)句形式。2.執(zhí)行過(guò)程執(zhí)行過(guò)程如圖5-3所示。(1)執(zhí)行循環(huán)體語(yǔ)句組。(2)計(jì)算“循環(huán)繼續(xù)條件”表達(dá)式。如果“循環(huán)繼續(xù)條件”表達(dá)式的值為非0(真),則轉(zhuǎn)向(1)繼續(xù)執(zhí)行;否則,轉(zhuǎn)向(3)。(3)執(zhí)行do-while的下一條語(yǔ)句。do-while循環(huán)語(yǔ)句的特點(diǎn)是:先執(zhí)行循環(huán)體語(yǔ)句組,然后再判斷循環(huán)條件。[案例5.4]用do-while語(yǔ)句求解1~100的累計(jì)和。
/*案例代碼文件名:AL5_4.C*/
/*程序功能:求1~100的累計(jì)和*/
main()
{inti=1,sum=0; /*定義并初始化循環(huán)控制變量,以及累計(jì)器*/
do
{sum+=i; /*累加*/
i++;
}
while(i<=100); /*循環(huán)繼續(xù)條件:i<=100*/
printf(“sum=%d\n”,sum);
} [程序演示]do-while語(yǔ)句比較適用于處理:不論條件是否成立,先執(zhí)行1次循環(huán)體語(yǔ)句組的情況。除此之外,do-while語(yǔ)句能實(shí)現(xiàn)的,for語(yǔ)句也能實(shí)現(xiàn),而且更簡(jiǎn)潔。4.3break語(yǔ)句與continue語(yǔ)句為了使循環(huán)控制更加靈活,C語(yǔ)言提供了break語(yǔ)句和continue語(yǔ)句。1.一般格式:break;
continue;2.功能(1)break:強(qiáng)行結(jié)束循環(huán),轉(zhuǎn)向執(zhí)行循環(huán)語(yǔ)句的下一條語(yǔ)句。(2)continue:對(duì)于for循環(huán),跳過(guò)循環(huán)體其余語(yǔ)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 有子女離婚協(xié)議書(shū)
- 工程勞務(wù)分包服務(wù)合同
- 公司股東出資合作協(xié)議書(shū)
- 浙江警官職業(yè)學(xué)院《數(shù)學(xué)優(yōu)化》2023-2024學(xué)年第二學(xué)期期末試卷
- 桂林學(xué)院《常微分方程雙語(yǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 合同條款部分
- 全新租賃代理服務(wù)協(xié)議下載年
- 黔東南民族職業(yè)技術(shù)學(xué)院《微積分EⅡ》2023-2024學(xué)年第二學(xué)期期末試卷
- 黔西南民族職業(yè)技術(shù)學(xué)院《高等數(shù)學(xué)一級(jí)上》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江音樂(lè)學(xué)院《運(yùn)籌學(xué)A(一)》2023-2024學(xué)年第二學(xué)期期末試卷
- 機(jī)器狗:技術(shù)成熟性能優(yōu)越場(chǎng)景剛需放量在即2025
- 2025年村民代表會(huì)議講話稿(3篇)
- (一模)烏魯木齊地區(qū)2025年高三年級(jí)第一次質(zhì)量語(yǔ)文試卷(含答案)
- 2025開(kāi)工大吉蛇年大吉開(kāi)門(mén)紅模板
- GB/T 45006-2024風(fēng)電葉片用纖維增強(qiáng)復(fù)合材料拉擠板材
- 鍋爐、壓力容器制造質(zhì)量手冊(cè)含程序文件-符合TSG07-2019《許可規(guī)則》
- 邏輯思維訓(xùn)練500題(帶答案)
- 2025年日歷表(A4版含農(nóng)歷可編輯)
- 全英文劇本 《劇院魅影》
- 北京城的中軸線PPT通用課件
- 黑布林繪本 Dad-for-Sale 出售爸爸課件
評(píng)論
0/150
提交評(píng)論