C語言程序的基本控制結(jié)構(gòu).ppt_第1頁(yè)
C語言程序的基本控制結(jié)構(gòu).ppt_第2頁(yè)
C語言程序的基本控制結(jié)構(gòu).ppt_第3頁(yè)
C語言程序的基本控制結(jié)構(gòu).ppt_第4頁(yè)
C語言程序的基本控制結(jié)構(gòu).ppt_第5頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第四章 C語言程序的基本控制結(jié)構(gòu),C程序構(gòu)成:文件函數(shù)語句序列。 語句:C語言中描述計(jì)算過程的最基本單位。由分號(hào);結(jié)束。 結(jié)構(gòu)化程序設(shè)計(jì)方法:程序語句序列由三種基本結(jié)構(gòu)(順序、 分支、循環(huán))構(gòu)成,結(jié)構(gòu)清晰、可讀性強(qiáng)。,第四章 C語言程序的基本控制結(jié)構(gòu),一、順序結(jié)構(gòu) 按書寫的先后順序執(zhí)行語句。,4.1 程序的三種基本結(jié)構(gòu),三、循環(huán)結(jié)構(gòu) 在一定條件下反復(fù)執(zhí)行某些語句,直到這個(gè)條 件不成立為止。,語句1,語句3,語句2,二、分支結(jié)構(gòu) 按照當(dāng)時(shí)的某個(gè)條件決定是否執(zhí)行某些語句。,條件,語句,語句2,條件,語句1,n,y,y,n,初始化語句,條件,修改語句,工作語句,初始化語句,條件,工作語句,修改語句,

2、y,n,n,y,復(fù)合語句:多個(gè)語句用花括號(hào)擴(kuò)起來組成的語句。 目的是將這多個(gè)語句看成是一條語句。,4.2 復(fù)合語句,注意:內(nèi)部各條語句還是以分號(hào)結(jié)尾,結(jié)尾的右花括號(hào)后不加分號(hào)。,復(fù)合語句的一般形式: 說明部分 ,例: int i,j; i=s; j=i+; printf(“%d,%d”,i,j); ,一、賦值語句 賦值表達(dá)式后加一個(gè)分號(hào)。 1、簡(jiǎn)單賦值語句 形式:=; 例如: a=2; b=3*5+7;,4.3 順序結(jié)構(gòu)的程序設(shè)計(jì),3、復(fù)合賦值語句 形式:; 例如:i*=y+2; a%=10;,2、多重賦值語句 形式:=.=; 例如: i=j=k=n+1; a=b=c=5;,賦值語句的功能:將

3、變量和表達(dá)式進(jìn)行指定的運(yùn)算后,將獲得的值 賦予左邊的變量,目的是得到一個(gè)計(jì)算結(jié)果。,【例4.1】賦值語句使用舉例(輸入三角形三邊的長(zhǎng)度,求面積并 將面積值輸出)。 海倫公式:假設(shè)有一個(gè)三角形,邊長(zhǎng)分別為a、b、c,三角形的面 積S 可由以下公式求得。 算法分析: 而公式里的p:,需要5個(gè)實(shí)型變量,調(diào)用求平方根函數(shù),結(jié)果賦給一個(gè)變量,,實(shí)參使用表達(dá)式,求出邊長(zhǎng)和的一半,4.3 順序結(jié)構(gòu)的程序設(shè)計(jì),#include #include main() float a,b,c,p,s; a=3.0;b=4.0;c=5.0; p=a+b+c;p/=2; s=sqrt(p*(p-a)*(p-b)*(p-c)

4、; printf(“s=%7.2f,s); 運(yùn)行結(jié)果如下:s=6.00,4.3 順序結(jié)構(gòu)的程序設(shè)計(jì),二、順序結(jié)構(gòu)程序設(shè)計(jì)舉例 【例4.2】編寫一個(gè)程序,從鍵 盤輸入三位整數(shù),將 它們逆序輸出,例如 輸入127,則輸出721。,輸入一個(gè)三位的整數(shù),(一個(gè)變量存放),順序輸出個(gè)位、十位、百位,百位=X/100,十位=X/10-百位*10,個(gè)位=X-十位*10-百位*100,(需三個(gè)變量),算法分析:,4.3 順序結(jié)構(gòu)的程序設(shè)計(jì),#include main() int a,i,j,k; printf(Enter a:n); scanf(%3d, ,4.3 順序結(jié)構(gòu)的程序設(shè)計(jì),運(yùn)行情況如下: Ente

5、r a: 127 721,【例4.3】編寫程序求出任一輸入字符的ascii碼。 字符在內(nèi)存存放的是它的ascii碼(字符型和整型可以混合運(yùn)算或者字符型可按整型輸出),所以將它按整數(shù)輸出即可。,#include main() char c; printf(Enter the value of c:); scanf(%c, 運(yùn)行情況如下: Enter the value of c:a a:97,4.3 順序結(jié)構(gòu)的程序設(shè)計(jì),【例4.4】交換兩個(gè)變量的值。 設(shè)變量a、b均為整 型變量,編寫一個(gè) 程序,輸入a、b的 值,并顯示,然后 交換a、b的值,再 次顯示。 算法分析:,4.3 順序結(jié)構(gòu)的程序設(shè)計(jì),

6、main() int a,b,t; printf(nEnter the value of a and bn); printf(a,b=); scanf(%d,%d, ,運(yùn)行情況如下: Enter the value of a and b a,b=2,7,輸出: a=2,b=7 changed a=7,b=2,4.3 順序結(jié)構(gòu)的程序設(shè)計(jì),三種條件轉(zhuǎn)移語句: 1、if語句 2、if else語句 3、switch語句,4.4 分支結(jié)構(gòu)(選擇結(jié)構(gòu)),一、if語句 if語句的一般形式: if(表達(dá)式) 語句; 表達(dá)式通常為條件表達(dá)式 或邏輯表達(dá)式。 if語句中的語句只能是一 條語句,如果需要多條語 句

7、則使用復(fù)合語句。 編寫程序時(shí)使用縮進(jìn)使結(jié) 構(gòu)清晰。,【例4.5】輸入一個(gè)整數(shù),若是3的倍數(shù),則顯示“ok”。 #include main() int a; scanf(%d, ,a%3=0,printf(“ok”),0(不成立),1(成立),4.4 分支結(jié)構(gòu)(選擇結(jié)構(gòu)),#include main() char ch; ch=getchar(); if(ch=A ,ch=A scanf(a=%d,b=%d, ,顯示b,ab,顯示a,非零(成立),零(不成立),建議: 為使結(jié)構(gòu)清楚不易錯(cuò),語句使用花括號(hào)擴(kuò)起 (即使是一條語句)。,4.4 分支結(jié)構(gòu)(選擇結(jié)構(gòu)),【例4.8】判斷某一年是否是閏年,

8、是則輸出year xxxx is a leap year. 否則輸出year xxxx is not a leap year. if(y%4=0 例如: if (score=90) grade=A; else if (score=80) grade=B; else if (score=70) grade=C; else if (score=60) grade=D; else grade=E;,4.4 分支結(jié)構(gòu)(選擇結(jié)構(gòu)),三、條件分支的嵌套 在分支的語句部分還可以出現(xiàn)分支語句,這樣就形成了分支的嵌套(多分支結(jié)構(gòu)),構(gòu)成復(fù)雜的邏輯結(jié)構(gòu)。,表達(dá)式1,非零(成立),零(不成立),語句2,表達(dá)式2,語

9、句1,非零(成立),零(不成立),語句4,表達(dá)式3,語句3,非零(成立),零(不成立),4.4 分支結(jié)構(gòu)(選擇結(jié)構(gòu)),if(表達(dá)式1) if(表達(dá)式2) 語句1; else 語句2; else if(表達(dá)式3) 語句3; else 語句4; ,if(表達(dá)式1) 語句1; else if(表達(dá)式2) 語句2; else if(表達(dá)式3) 語句3; else 語句4; ,表達(dá)式3,表達(dá)式2,表達(dá)式1,語句4,語句1,語句2,語句3,非零(成立),非零(成立),非零(成立),零(不成立),零(不成立),零(不成立),4.4 分支結(jié)構(gòu)(選擇結(jié)構(gòu)),Y=,-10(x-1.0),-1 (-1.0 x0),

10、1(0 x1.0),10(x 1.0),X0,零(不成立),Y=-1,X-1.0,Y=-10,非零(成立),零(不成立),Y=10,X1.0,Y=1,非零(成立),零(不成立),if(x0) if(x-1.0) y=-10; else y=-1; else if(x1.0) y=1; else y=10; ,非零(成立),4.4 分支結(jié)構(gòu)(選擇結(jié)構(gòu)),【例4.9】計(jì)算下列分段函數(shù),x的值由鍵盤輸入。,X1.0,X0,X-1.0,Y=10,Y=-10,Y=-1,Y=1,if(x-1.0) y=-10; else if(x0) y=-1; else if(x1.0) y=1; else y=10;

11、 ,if(x-1.0) y=-10; else if(x0) y=-1; else if(x1.0) y=1; else y=10;,y,y,y,n,n,n,4.4 分支結(jié)構(gòu)(選擇結(jié)構(gòu)),使用縮進(jìn)和花括號(hào)避免程序的二義性 例如:if(c=0 ,或 if(c=0 ,4.4 分支結(jié)構(gòu)(選擇結(jié)構(gòu)),switch語句的一般形式: switch (表達(dá)式) case 常量表達(dá)式1:語句組1;break; case 常量表達(dá)式2:語句組2;break; . case 常量表達(dá)式n:語句組n;break; default :語句組n+1 ,表達(dá)式,語句組n,語句組2,語句組1,=值1,=值2,=值n,語句組

12、n+1,=其他,4.4 分支結(jié)構(gòu)(選擇結(jié)構(gòu)),四、 switch語句 switch語句可直接處理多分支選擇,不使用分支嵌套,簡(jiǎn)化程序結(jié)構(gòu)。,說明: 常量表達(dá)式值必須互不相同,否則就會(huì)出現(xiàn)矛盾的現(xiàn)象。 case 與 default 的順序可以任意。 執(zhí)行完某case 后的語句后,將順序執(zhí)行后面case后的語句,直 到遇 break 語句才退出整個(gè)switch結(jié)構(gòu)的執(zhí)行。 如果沒有default 且“表達(dá)式”值不等于任何case 后常量表達(dá)式 的值,則直接退出switch結(jié)構(gòu)而轉(zhuǎn)到其后的語句執(zhí)行。,【例4.10】輸入一個(gè)無符號(hào)整數(shù),然后按用戶輸入的代號(hào),分別以十進(jìn)制(代號(hào)D)、八進(jìn)制(代號(hào)O) 、

13、十六進(jìn)(代號(hào)X)制輸出。 main() unsigned int x; char c; scanf(%u,%c, ,4.4 分支結(jié)構(gòu)(選擇結(jié)構(gòu)),【例4.11】一個(gè)簡(jiǎn)單的計(jì)算器程序 main() int num1,num2; char oper; printf(enter a simple arithmetic expression:); scanf(%d%c%d, ,4.4 分支結(jié)構(gòu)(選擇結(jié)構(gòu)),五、分支結(jié)構(gòu) 程序設(shè)計(jì)舉例 【例4.12】 輸入一個(gè) 帶符號(hào)的 整型數(shù), 輸出該數(shù) 的位數(shù)。 算法分析:,4.4 分支結(jié)構(gòu)(選擇結(jié)構(gòu)),main() int x,y,m; printf(nEnter

14、 y=); scanf(%d, ,4.4 分支結(jié)構(gòu)(選擇結(jié)構(gòu)),程序的運(yùn)行情況如下: Enter y=-2578 -2578:4,【例4.13】求一元二次方程ax2+bx+c=0的解。 算法分析: X=,( (b2-4ac) = 0 ),(a=0),( (b2-4ac) 0 ),( (b2-4ac) 0 ),兩個(gè)復(fù)根,兩個(gè)不等的實(shí)根,不是二次方程,-b/(2*a),4.4 分支結(jié)構(gòu)(選擇結(jié)構(gòu)),4.4 分支結(jié)構(gòu)(選擇結(jié)構(gòu)),#include math.h main() float a,b,c,d,x1,x2,real,imag; scanf(%f,%f,%f,4.4 分支結(jié)構(gòu)(選擇結(jié)構(gòu)),el

15、se if (d1e-6) x1=(-b+sqrt(d)/(2*a); x2=(-b-sqrt(d)/(2*a); printf(has distinct real roots:%7.2f and %7.2fn,x1,x2); else real=-b/(2*a); imag=sqrt(-d)/(2*a); printf( has complex roots:n); printf(%7.2f+%7.2fin,real,imag); printf(%7.2f-%7.2fin,real,imag); ,4.4 分支結(jié)構(gòu)(選擇結(jié)構(gòu)),循環(huán)結(jié)構(gòu):重復(fù)執(zhí)行某段程序,直到某個(gè)條件不成立的為止的一種 程序結(jié)

16、構(gòu)。 循環(huán)程序構(gòu)成:初始化部分、工作部分、修改部分和判斷部分。,初始化語句,條件,修改語句,工作語句,y,n,n,y,4.5 循環(huán)結(jié)構(gòu),一、while語句 while語句的一般形式: while(表達(dá)式) 語句;,表達(dá)式,語句,int n=0,char c,(,(c=getchar()!=n,n=n+1,y,n,y,n,4.5 循環(huán)結(jié)構(gòu),【例4.14】從鍵盤上連續(xù)輸入若干個(gè)字符(以回車換行符為結(jié)束標(biāo)記),統(tǒng)計(jì)字符個(gè)數(shù)(不含回車換行符) 初始化部分:int n=0,char c; 判斷部分:(c=getchar()!=n 工作部分:n=n+1 修改部分:無,#include stdio.h ma

17、in() int n=0; char c; while (c=getchar()!=n) n+; printf(number of charaters=%dn,n); ,【例4.15】計(jì)算S=1+2+3+.+100之和。 初始化部分:int i=1,s=0; 判斷部分:i=100 工作部分:s=s+i; 修改部分:i=i+1; 注意:while后的語句 復(fù)合語句 格式縮進(jìn),int i=1,s=0,i=100,s=s+i,i=i+1,n,y,4.5 循環(huán)結(jié)構(gòu),main() int i,s=0; i=1; while (i=100) s+=i; i+; printf(s=%dn,s); ,運(yùn)行結(jié)果

18、如下: s=5050,二、dowhile語句 dowhile語句的一般形式: do 語句; While(表達(dá)式); 注意: while(表達(dá)式)后的分號(hào);,表達(dá)式,語句,n,y,4.5 循環(huán)結(jié)構(gòu),【例4.16】從鍵盤上連續(xù)輸入若干個(gè)字符(以回車換行符為結(jié)束標(biāo) 記),統(tǒng)計(jì)字符個(gè)數(shù)(不含回車換行符) 初始化部分:int n=-1,char c; 工作部分:n=n+1; 修改部分:無 判斷部分:(c=getchar()!=n,int n=-1,(c=getchar()!=n,n=n+1,n,y,#include stdio.h main() int n=-1; char c; do n+; whil

19、e (c=getchar()!=n); printf(number of characters=%dn,n); ,運(yùn)行結(jié)果為: abcd1234 number of characters=8,【例4.17】用下列公式計(jì)算的值。 /4 =1-1/3+1/5-1/7+.1/n 工作部分:pi=pi+t,t=s/n 修改部分:n=n+2,s=s*(-1.0) 初始化部分:int pi=0.0,n=1.0, s=1.0 判斷部分:fabs(t)=1e-6,int pi=0.0,n=1.0,s=1.0,fabs(t)=1e-6,n=n+2,s=s*(-1.0),t=s/n,pi=pi+t,y,n,4.5

20、 循環(huán)結(jié)構(gòu),#include math.h main() float pi=0.0,n=1.0,s=1.0,t; do t=s/n;/*求當(dāng)前項(xiàng)t=s/n,s是符號(hào),n是分母*/ pi+=t;/*將當(dāng)前項(xiàng)累加到pi中,pipit*/ s*=-1.0; /*改變當(dāng)前項(xiàng)的符號(hào)*/ n+=2; /*產(chǎn)生下一個(gè)當(dāng)前項(xiàng)的分母*/ while (fabs(t)=1e-6);/*控制循環(huán)的結(jié)束條件*/ printf(pi=%f n,4*pi); ,運(yùn)行結(jié)果如下: pi=3.141598,三、for語句 for 語句的一般形式: for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體語句; 注意:表達(dá)式1是初始化(只

21、執(zhí)行一次)。 表達(dá)式2是循環(huán)條件判斷。 表達(dá)式3用于修改循環(huán)控制變量的值。 表達(dá)式也可以是與循環(huán)控制變量賦初值無關(guān)的其它表達(dá)式, 表達(dá)式也可以是與循環(huán)控制無關(guān)的任意表達(dá)式, 表達(dá)式、表達(dá)式可以是一個(gè)簡(jiǎn)單表達(dá)式,也可是逗號(hào)表達(dá)式。 表達(dá)式、表達(dá)式2、表達(dá)式3均可省略。,表達(dá)式1,表達(dá)式2,語句,表達(dá)式3,n,y,4.5 循環(huán)結(jié)構(gòu),【例4.22】有一分?jǐn)?shù)序列:2/1,3/2,5/3,8/5,求出這個(gè)數(shù)列的前20項(xiàng)之和。 Yn/Xn: Yn= Yn-1+Xn-1, , Xn=Yn-1 main( ) int n,t,number=20; float a=2,b=1,s=0; for (n=1;n=n

22、umber;n+) s=s+a/b; t=a; a=a+b; b=t; printf(sum=%9.6fn,s); 運(yùn)行結(jié)果如下: sum=32.660259,4.5 循環(huán)結(jié)構(gòu),【例4.23】從鍵盤上輸入若干個(gè)正整數(shù),以零為輸入結(jié)束標(biāo)記,求其中的最大和最小數(shù)。 main() int x,max,min; scanf(%d, 運(yùn)行結(jié)果為:2 1 5 3 7 0 max=7 min=1,for(;x;) ,while(x) ,等價(jià)于,4.5 循環(huán)結(jié)構(gòu),四、多重循環(huán) 基本原則:內(nèi)層循環(huán)完全要包含在外層循環(huán)的循環(huán)體內(nèi),不允許內(nèi)外層循環(huán)體交叉。 【例4.24】輸出以下圖形。 #include main(

23、) int i,j,k; i=1; while (i=6) for (j=1;j=20-2*i;j+) printf( ); for (k=1;k=i; k+) printf(%4d,i); printf(n); i+; ,基本設(shè)計(jì)原則: 外層循環(huán)往往只是給內(nèi)層 循環(huán)提供服務(wù),不做主要 的數(shù)據(jù)處理工作。,4.5 循環(huán)結(jié)構(gòu),五、break語句和continue語句 break語句:強(qiáng)制中斷當(dāng)前層的循環(huán),不再執(zhí)行循環(huán)體中break語句后面的語句而退出循環(huán)。,i=1,輸入數(shù)據(jù)到a,+ia,打印no,跳出循環(huán),a%i=0,yes,no,打印yes,i=a,yes,no,i=a,ia,2ia,4.5 循

24、環(huán)結(jié)構(gòu),【例4.26】判定用戶輸入的一個(gè)整數(shù)是否是素?cái)?shù)。是則輸出yes,否則輸出no。 #include main() int a,i=1; scanf(%d, ,continue語句:不執(zhí)行continue語句后的語句而繼續(xù)循環(huán)。 【例4.27】輸出200以內(nèi)能被9整除的數(shù)。 #include main() int n; for(n=9;n=200;n+) if(n%9!=0) continue; printf(“%dn”,n); ,#include main() int n; for(n=9;n=200;n+) if(n%9=0) printf(“%dn”,n); ,4.5 循環(huán)結(jié)構(gòu),六、轉(zhuǎn)移語句和語句標(biāo)號(hào) goto語句格式:goto 標(biāo)號(hào) goto語句功能:跳到標(biāo)號(hào)所指的語句處去執(zhí)行。,4.5 循環(huán)結(jié)構(gòu),【例4.28】計(jì)算1+2+3+.+100的值 #include main(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論