版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第三章控制結(jié)構(gòu)
【教學(xué)目標(biāo)】理解面向過程的概念,理解結(jié)構(gòu)化程序設(shè)計思想,掌握結(jié)構(gòu)化程序設(shè)計基本方法。掌握C語句的5種類型,能熟練應(yīng)用C語句中的9種控制語句。能熟練運(yùn)用“順序”、“選擇”、“循環(huán)”三種基本結(jié)構(gòu)解決程序設(shè)計中具體問題。
【教學(xué)內(nèi)容】 C程序的邏輯結(jié)構(gòu) C語句的5大類型 選擇結(jié)構(gòu)語句系列 循環(huán)結(jié)構(gòu)語句系列
【重點(diǎn)與難點(diǎn)】
重點(diǎn) 程序結(jié)構(gòu)的概念 “選擇”結(jié)構(gòu)、“循環(huán)”結(jié)構(gòu)中的8種控制語句
復(fù)合語句的概念及使用方法
難點(diǎn)
多分支語句的使用方法
三種循環(huán)語句的差異及使用方法
循環(huán)嵌套的使用方法
復(fù)合語句的正確使用方法第三章控制結(jié)構(gòu)
3.1 程序的三種基本控制結(jié)構(gòu)
3.1.1C語言概述 第二章介紹程序中用到的一些基本要素:常量、變量、運(yùn)算符、表達(dá)式、基本輸入輸出方式等,它們是構(gòu)成C程序的基本成分。第三章控制結(jié)構(gòu) 一個C程序是由多個函數(shù)組成的,每個函數(shù)又分為
聲明部分、可執(zhí)行部分;聲明部分是對變量的定義,不產(chǎn)生機(jī)器操作;可執(zhí)行部分由各種語句組成,語句將產(chǎn)
生機(jī)器操作。一個完整的C程序的構(gòu)成如圖所示:第三章控制結(jié)構(gòu)C程序源程序文件1源程序文件2源程序文件n預(yù)處理命令全局變量聲稱明函數(shù)1函數(shù)n……局部變量聲明執(zhí)行部分語句2……語句n語句1……一個c程序可以有若干個源程序文件組成一個源文件可以有若干個函數(shù)和預(yù)處理命令以及全局變量聲明部分組成一個函數(shù)有函數(shù)首部和函數(shù)體組成函數(shù)體由數(shù)據(jù)聲明和執(zhí)行語句組成C語句分為5類控制語句函數(shù)調(diào)用語句表達(dá)式語句空語句復(fù)合語句第三章控制結(jié)構(gòu)3.1程序的三種基本控制結(jié)構(gòu)3.1.1 C語句概述C語句是函數(shù)的主體,共分五類:(1)控制語句(2)函數(shù)調(diào)用語句(函數(shù)調(diào)用加上分號)(3)表達(dá)式語句(各種表達(dá)式加上分號)(4)空語句(只有一個分號)(5)復(fù)合語句(組成邏輯上的一條語句)
1、控制語句
控制語句完成一定的控制功能 1if()~else條件語句6break間斷語句 2for()~循環(huán)語句7switch()開關(guān)語句 3while()~循環(huán)語句8goto轉(zhuǎn)向語句 4do~while();循環(huán)語句9return返回語句 5continue繼續(xù)語句
2、函數(shù)調(diào)用語句 該語句由函數(shù)調(diào)用語句及分號組成。如:sanf(); printf(); getchar();等。
3、表達(dá)式語句 表達(dá)式后加分號形成。
由表達(dá)式加上分號的語句,是構(gòu)成C程序最主要的形式,如賦值語句、自加、自減等。表達(dá)式語句說明A=100A=100;賦值表達(dá)式語句X+=(a+2)/bX+=(a+2)/b;復(fù)合賦值表達(dá)式語句i++i++;自加表達(dá)式語句X+yX+y;算術(shù)表達(dá)式語句
4、空語句 只有一個分號的語句。 main() { inta=100; ; printf(“%d”,a); }
5、復(fù)合語句 用一對花括號將一系列語句括起來組成邏輯上的一條語句,又稱分程序。 main() { inta=100,b=11,c; c=fmod(a,b);
{ inta=200; c=fmod(a,b); printf(“%d”,c
}
printf(“%d”,c); }3.1.2C程序的邏輯結(jié)構(gòu)C語言是一種面向過程的結(jié)構(gòu)化語言,一個良好算法的3種基本結(jié)構(gòu):(1)順序結(jié)構(gòu):按先后順序依次執(zhí)行語句1語句23.1.2C程序的邏輯結(jié)構(gòu)(2)選擇結(jié)構(gòu):根據(jù)變量和表達(dá)式滿足的條件決定 要執(zhí)行的語句;if,elseif,switch表達(dá)式為真為假語句系列1語句系列23.1.2C程序的邏輯結(jié)構(gòu)(3)循環(huán)結(jié)構(gòu):根據(jù)一定條件的反復(fù)地執(zhí)行一組語句:for,while語句系列表達(dá)式非00
do-while
直到循環(huán)語句系列表達(dá)式非003.2if語句(選擇結(jié)構(gòu))3.2.1、簡單
if語句1、形式:if(表達(dá)式)語句2、流程圖:語句系列表達(dá)式非00單分技選擇結(jié)構(gòu):3.2if語句(選擇結(jié)構(gòu))
例:比較三個數(shù)據(jù)大小并由小到大輸出。(算法)
注:若有1000或10000個數(shù)據(jù)排序!?t=aa=cc=tt=bb=cc=t定義數(shù)據(jù)a,b,c,t
輸入數(shù)據(jù)a,b,ca>b?非0t=aa=bb=t;0a>c?非0……b>c?輸出a,b,c非000main(){ inta,b,c,t; printf("\nInputthreenums\n"); 3-A.C scanf("%d%d%d",&a,&b,&c); if(a>b) { t=a;a=b;b=t;} /*復(fù)合語句*/ if(a>c) { t=a;a=c;c=t;} /*復(fù)合語句*/ if(b>c) { t=b;b=c;c=t;}/*復(fù)合語句*/ printf("a=%db=%dc=%d",a,b,c); }3.2if語句(選擇結(jié)構(gòu))3.2.2、if-else語句1、形式:if(表達(dá)式)語句1
else語句22、流程圖:語句2語句10非0表達(dá)式雙分技選擇結(jié)構(gòu):3.2if語句(選擇結(jié)構(gòu))
例1:任意輸入一數(shù)據(jù),判定其能否被3整除 (如要對多個數(shù)據(jù)進(jìn)行判斷呢?或者需反復(fù)輸入數(shù)據(jù)進(jìn)行判斷呢?)
定義數(shù)據(jù)a輸入數(shù)據(jù)aa%3==0?輸出數(shù)據(jù)a非00輸出NO(3-2-2.c)3.2if語句(選擇結(jié)構(gòu))3.2.3、elseif語句1、形式:if(表達(dá)式1)語句1elseif
(表達(dá)式2)語句2elseif
(表達(dá)式3)語句3 ……elseif
(表達(dá)式n)語句nelse
語句n+12、流程圖:語句1真假表達(dá)式1表達(dá)式2語句2真表達(dá)式3語句3真假語句4假多分技選擇結(jié)構(gòu):3.2if語句(選擇結(jié)構(gòu))例(3-2-4-1.c)
例:分段函數(shù)(多分技)Fx=-1
(x<0)0
(x=0)1
(x>0)3.2if語句(選擇結(jié)構(gòu))
例:輸入成績,輸出該成績所屬等級,(A、B、C、 D等)
。(3-2-3)3.2if語句(選擇結(jié)構(gòu))3.2.4、if語句的嵌套1、形式:if()if()語句1[else語句2]elseif()語句3[else語句4]內(nèi)嵌if語句內(nèi)嵌if語句2、注意:if總是與它最近的else配對3.2if語句(選擇結(jié)構(gòu))表達(dá)式1表達(dá)式2表達(dá)式3非00非0語句系列1語句系列20語句系列4語句系列3非00
例:分段函數(shù)Fx=(x>=0)
(x<0)
-1X>0 1X=003-2-4-2.c3.3switch語句(開關(guān))用于處理多路分支選擇1、形式:(3-3)swithch(表達(dá)式){case常量表達(dá)式1:語句1;[break;]case常量表達(dá)式2:語句1;[break;]case常量表達(dá)式3:語句1;[break;]……case常量表達(dá)式n:語句1;[break;]default :語句n+1;}常量表達(dá)式1表達(dá)式語句系列1break?非0
0常量表達(dá)式2語句系列2語句系列nbreak?非0非000非0....default結(jié)束0
例:輸入成績等級(A,B,C,E,D),根據(jù)等級輸出其所屬分?jǐn)?shù)段。(3-3.C)循環(huán)語句什么是循環(huán)?為什么要使用循環(huán)?問題1:問題2:求學(xué)生平均成績分?jǐn)?shù)相加后除以課數(shù)
在許多問題中需要用到循環(huán)控制。循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計的基本結(jié)構(gòu)之一,它和順序結(jié)構(gòu)、選擇結(jié)構(gòu)共同作為各種復(fù)雜程序的基本構(gòu)造單元。3.4while語句(當(dāng)循環(huán))當(dāng)滿足某一條件,需要反復(fù)執(zhí)行一組語句時用循環(huán)語句:while,do-while,for1、形式:while(表達(dá)式)語句2、流程圖語句表達(dá)式非003、例求: 1+2+3+……+100之和。(算法?)#include<stdio.h>
voidmain()
{inti,sum=0;
i=1;
while(i<=100)
{sum=sum+i;
i++;
}
printf(″%d\\n″,sum);
} 例:求任意兩個整數(shù)M、N之間自然數(shù)之和;注意:循環(huán)體如果包含一個以上的語句,應(yīng)該用花括弧括起來,以復(fù)合語句形式出現(xiàn)。在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語句。如果無此語句,則i的值始終不改變,循環(huán)永不結(jié)束。3.5do-while語句(直到循環(huán))1、形式:do 循環(huán)體語句while(表達(dá)式);2、流程圖循環(huán)體語句表達(dá)式非00執(zhí)行過程:先執(zhí)行一次指定的循環(huán)體語句,然后判別表達(dá)式,當(dāng)表達(dá)式的值為非零(“真”)時,返回重新執(zhí)行循環(huán)體語句,如此反復(fù),直到表達(dá)式的值等于0為止,此時循環(huán)結(jié)束。
3、例求:1+2+3+……+100之和。#include<stdio.h>
voidmain()
{
inti,sum=0;
i=1;
do
{
sum=sum+i;
i++;
}
while(i<=100);
printf("%d\\n″,sum);
}
3、例3、5while語句和用do-while語句的比較while語句和用do-while語句的比較:在一般情況下,用while語句和用do-while語句處理同一問題時,若二者的循環(huán)體部分是一樣的,它們的結(jié)果也一樣。但是如果while后面的表達(dá)式一開始就為假(0值)時,兩種循環(huán)的結(jié)果是不同的。例while和do-while循環(huán)的比較
(1)#include<stdio.h>(2)#include<stdio.h>
voidmain()voidmain()
{intsum=0,i;{intsum=0,i;
scanf(“%d″,&i);scanf(”%d
while(i<=10)do
{sum=sum+I;{sum=sum+i;
i++;}i++;}
printf(“sum=%d\\n″,sum);while(I<=10)
printf((“sum=%d\\n″,sum);
}
}運(yùn)行結(jié)果:1↙sum=55再運(yùn)行一次:11↙sum=0運(yùn)行結(jié)果:1↙sum=55再運(yùn)行一次:11↙sum=11說明:(1)當(dāng)while后面的表達(dá)式的第一次的值為“真”時,兩種循環(huán)得到的結(jié)果相同。否則,二者結(jié)果不相同。3.6for語句(步長循環(huán))1、形式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句2、流程圖3、例(3-6-1)for(i=0;i<100;i++)sum=sum+i;求解表達(dá)式1表達(dá)式2非00語句求解表達(dá)式3for語句的執(zhí)行過程:(1)先求解表達(dá)式1。(2)求解表達(dá)式2,若其值為真(值為非0),則執(zhí)行for語句中指定的內(nèi)嵌語句,然后執(zhí)行下面第(3)步。若為假(值為0),則結(jié)束循環(huán),轉(zhuǎn)到第(5)步。(3)求解表達(dá)式3。(4)轉(zhuǎn)回上面第(2)步驟繼續(xù)執(zhí)行。(5)循環(huán)結(jié)束,執(zhí)行for語句下面的一個語句
3.6for語句(步長循環(huán))表達(dá)式2?執(zhí)行語句成立不成立執(zhí)行for循環(huán)之后的語句執(zhí)行表達(dá)式3執(zhí)行表達(dá)式1循環(huán)初始條件循環(huán)控制條件循環(huán)體for語句等價于下列語句:表達(dá)式1;while(表達(dá)式2){語句;表達(dá)式3;}
for語句最簡單的應(yīng)用形式、最易理解的如下形式:
for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)3.6for語句4、表達(dá)式的省略:for(i=0;i<100;i++)sum=sum+i;(1)省略表達(dá)式1(應(yīng)在for前給循環(huán)變量賦初值)i=1;for(;i<100;i++)sum=sum+i;(2)省略表達(dá)式2(應(yīng)在循環(huán)體內(nèi)加入結(jié)束循環(huán)的條件)for(i=1;;i++){sum=sum+i;if(i>100)break;}3.6for語句4、表達(dá)式的省略:for(i=0;i<100;i++)sum=sum+i;(3)省略表達(dá)式3(應(yīng)在for循環(huán)體內(nèi)加入循環(huán)變量的變化語句以結(jié)束循環(huán))for(i=1;i<100;){sum=sum+i;i++;}(4)省略表達(dá)式1、3i=1;for(;i<=100;){sum=sum+i;i++;}3.6for語句4、表達(dá)式的省略:for(i=0;i<100;i++)sum=sum+i;(5)3個表達(dá)式都可以省略i=1;for(;;){sum=sum+i;i++;if(i>100)break;}i=1;for(sum=0;i<=100;i++){sum=sum+i;}6)表達(dá)式1可以是給循環(huán)變量賦初值,還可以是其它的任意無關(guān)表達(dá)式3.6for語句4、表達(dá)式的省略:for(i=0;i<100;i++)sum=sum+i;(7)表達(dá)式2可以是關(guān)系表達(dá)式,也可以是邏輯表達(dá)式for(;(c=getchar())!=‘\n’;){printf(“%c”,c);}3.7循環(huán)語句的比較和嵌套1、幾種循環(huán)的比較:(1)4種循環(huán)可以用來處理同一問題,一般可以相互替代(2)for語句功能較強(qiáng),while循環(huán)能完成的,for都能實(shí)現(xiàn)。(3)while、do-while循環(huán)的循環(huán)變量初始化放在循環(huán)語句 之前,for循環(huán)放在表達(dá)式1中。(4)可以用break跳出循環(huán),用continue結(jié)束本次循環(huán)。3.7循環(huán)語句的比較和嵌套2、循環(huán)嵌套:
一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu)。內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),即多層循環(huán)。(1)while(){……while(){……}}(2)do{……do{……}while();}while();(3)for(;;){for(;;){……}}(4)for(;;){……while(){……}}下面幾種都是合法的形式:(1)
while()(2)do(3)for(;;){…{…{while()dofor(;;){…}{…}{…}}while();}}while();
3.7循環(huán)語句的比較和嵌套(4)
while()(5)for(;;)(6)do{…{…{…do{…}while()for(;;){}while(){}…{…}…}}}while()
3.7循環(huán)語句的比較和嵌套(4)while循環(huán)、do-while循環(huán)和for循環(huán),可以用break語句跳出循環(huán),用continue語句結(jié)束本次循環(huán)(break語句和continue語句見下節(jié))。而對用goto語句和if語句構(gòu)成的循環(huán),不能用break語句和continue語句進(jìn)行控制.
3.8break語句和continue語句3.8break語句和continue語句1、break語句break用于跳出switch結(jié)構(gòu)。break還用于跳出循環(huán),即提前結(jié)束循環(huán)。形式:break;
while(表達(dá)式1)
{…if(表達(dá)式2)break;…}1、break語句#include<stdio.h>#include<math.h>voidmain(){intm,k,I;printf(“Pleaseinputaninteger:”);scanf(“%d”,&m);k=sqrt(m);for(i=2;i<=k;i++) if(m%i==0)break;If(i>=k+1) printf(“%4disaprimenumber!\n”,m)elseprintf(“%4disnotaprimenumber!\n”,m)}問題:輸入一個數(shù),判斷是否為素數(shù)。3.8break語句和continue語句2、continue語句continue用于結(jié)束本次循環(huán)。形式:continue;while(表達(dá)式1)
{…
if(表達(dá)式2)continue;
…}1、continue語句#include<stdio.h>voidmain(){Intn;For(n=100;n<=200;n++){ if(n%9!=0) continue; printf(“%5d”,n);}}問題:輸出100-200之間9的倍數(shù)的自然數(shù)。3.10程序舉例例3.13:用π/4≈1-1/3+1/5-1/7+…公式求π的近似值,直到最后一項的絕對值小于10-6為止。分析:定義數(shù)據(jù)s=1,pi=0,n=1.0,t=1fabs(t)<10-6npi=pi+ts=-sn=n+2t=s/npi=pi*4輸出y(3-10-4.c)#include<stdio.h>
#include<math.h>main(){doublet=1,pi=0,n=1,eps=1.0e-6;ints=1;while(fabs(t)>=eps){ pi+=t; n+=2; s*=-1; t=s/n;
}pi*=4;printf(“\nPI=%lf\n”,pi);}§程序舉例
例求Fibonacci數(shù)列前40個數(shù)。這個數(shù)列有如下特點(diǎn):第1,2兩個數(shù)為1,1。從第3個數(shù)開始,該數(shù)是其前面兩個數(shù)之和。即:F(1)=1(n=1)F(2)=1(n=2)F(n)=F(n-1)+F(n-2)(n≥3)例求Fibonacci數(shù)列前40個數(shù)。
#include<stdio.h>
voidmain()
{longintf1,f2;
inti;
f1=1;f2=1;
for(i=1;i<=20;i++)
{printf(″%12ld%12ld″,f1,f2);
if(i%2==0)printf(″\n″);
f1=f1+f2;
f2=f2+f1;
}
}
運(yùn)行結(jié)果:11235813213455891442333776109871597258441816765109461771128657463687502512139319641831781151422983204013462692178309352457857022887922746514930352241578173908816963245986102334155
例1:判斷m是否素數(shù)。分析(1)如果m能被2~m之中任何一個整數(shù)整除,則提前結(jié)束循環(huán);(2)如果m不能被2~m之間的任一整數(shù)整除,輸出“是素數(shù)”。推廣例2:判斷1—m的全部素數(shù)。例3:判斷
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度股權(quán)分割分家協(xié)議合同(資本運(yùn)作型)
- 2025年度建筑勞務(wù)分包合同招投標(biāo)范本
- 2025年度智慧家居產(chǎn)品研發(fā)與銷售合作協(xié)議
- 湘教版七年級數(shù)學(xué)下冊2.1整式的乘法2.1.2冪的乘方與積的乘方聽評課記錄
- 2025年度化工產(chǎn)品包裝設(shè)計及印刷合同范本
- 人教部編版歷史七年級下冊第7課 《遼、西夏與北宋的并立》 聽課評課記錄4
- 2025年度股東對賭資產(chǎn)重組交易合同
- 八年級地理下冊《6.2 特別行政區(qū)-香港澳門》聽課評課記錄 新人教版
- 生產(chǎn)計劃與調(diào)度在流程優(yōu)化中的作用
- 電商新趨勢直播帶貨模式深度分析匯報
- 江蘇省2023年對口單招英語試卷及答案
- 易制毒化學(xué)品安全管理制度匯編
- GB/T 35506-2017三氟乙酸乙酯(ETFA)
- GB/T 25784-20102,4,6-三硝基苯酚(苦味酸)
- 特種設(shè)備安全監(jiān)察指令書填寫規(guī)范(特種設(shè)備安全法)參考范本
- 硬筆書法全冊教案共20課時
- 《長方形的面積》-完整版課件
- PDCA降低I類切口感染發(fā)生率
- 工業(yè)企業(yè)現(xiàn)場監(jiān)測工況核查表
- 沉淀池及排水溝清理記錄表
- 急診急救信息化課件
評論
0/150
提交評論