第三章C語言程序設計控制結構課件_第1頁
第三章C語言程序設計控制結構課件_第2頁
第三章C語言程序設計控制結構課件_第3頁
第三章C語言程序設計控制結構課件_第4頁
第三章C語言程序設計控制結構課件_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第三章控制結構

【教學目標】理解面向過程的概念,理解結構化程序設計思想,掌握結構化程序設計基本方法。掌握C語句的5種類型,能熟練應用C語句中的9種控制語句。能熟練運用“順序”、“選擇”、“循環(huán)”三種基本結構解決程序設計中具體問題。

【教學內容】 C程序的邏輯結構 C語句的5大類型 選擇結構語句系列 循環(huán)結構語句系列

【重點與難點】

重點 程序結構的概念 “選擇”結構、“循環(huán)”結構中的8種控制語句

復合語句的概念及使用方法

難點

多分支語句的使用方法

三種循環(huán)語句的差異及使用方法

循環(huán)嵌套的使用方法

復合語句的正確使用方法第三章控制結構

3.1 程序的三種基本控制結構

3.1.1C語言概述 第二章介紹程序中用到的一些基本要素:常量、變量、運算符、表達式、基本輸入輸出方式等,它們是構成C程序的基本成分。第三章控制結構 一個C程序是由多個函數(shù)組成的,每個函數(shù)又分為

聲明部分、可執(zhí)行部分;聲明部分是對變量的定義,不產(chǎn)生機器操作;可執(zhí)行部分由各種語句組成,語句將產(chǎn)

生機器操作。一個完整的C程序的構成如圖所示:第三章控制結構C程序源程序文件1源程序文件2源程序文件n預處理命令全局變量聲稱明函數(shù)1函數(shù)n……局部變量聲明執(zhí)行部分語句2……語句n語句1……一個c程序可以有若干個源程序文件組成一個源文件可以有若干個函數(shù)和預處理命令以及全局變量聲明部分組成一個函數(shù)有函數(shù)首部和函數(shù)體組成函數(shù)體由數(shù)據(jù)聲明和執(zhí)行語句組成C語句分為5類控制語句函數(shù)調用語句表達式語句空語句復合語句第三章控制結構3.1程序的三種基本控制結構3.1.1 C語句概述C語句是函數(shù)的主體,共分五類:(1)控制語句(2)函數(shù)調用語句(函數(shù)調用加上分號)(3)表達式語句(各種表達式加上分號)(4)空語句(只有一個分號)(5)復合語句(組成邏輯上的一條語句)

1、控制語句

控制語句完成一定的控制功能 1if()~else條件語句6break間斷語句 2for()~循環(huán)語句7switch()開關語句 3while()~循環(huán)語句8goto轉向語句 4do~while();循環(huán)語句9return返回語句 5continue繼續(xù)語句

2、函數(shù)調用語句 該語句由函數(shù)調用語句及分號組成。如:sanf(); printf(); getchar();等。

3、表達式語句 表達式后加分號形成。

由表達式加上分號的語句,是構成C程序最主要的形式,如賦值語句、自加、自減等。表達式語句說明A=100A=100;賦值表達式語句X+=(a+2)/bX+=(a+2)/b;復合賦值表達式語句i++i++;自加表達式語句X+yX+y;算術表達式語句

4、空語句 只有一個分號的語句。 main() { inta=100; ; printf(“%d”,a); }

5、復合語句 用一對花括號將一系列語句括起來組成邏輯上的一條語句,又稱分程序。 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程序的邏輯結構C語言是一種面向過程的結構化語言,一個良好算法的3種基本結構:(1)順序結構:按先后順序依次執(zhí)行語句1語句23.1.2C程序的邏輯結構(2)選擇結構:根據(jù)變量和表達式滿足的條件決定 要執(zhí)行的語句;if,elseif,switch表達式為真為假語句系列1語句系列23.1.2C程序的邏輯結構(3)循環(huán)結構:根據(jù)一定條件的反復地執(zhí)行一組語句:for,while語句系列表達式非00

do-while

直到循環(huán)語句系列表達式非003.2if語句(選擇結構)3.2.1、簡單

if語句1、形式:if(表達式)語句2、流程圖:語句系列表達式非00單分技選擇結構:3.2if語句(選擇結構)

例:比較三個數(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;} /*復合語句*/ if(a>c) { t=a;a=c;c=t;} /*復合語句*/ if(b>c) { t=b;b=c;c=t;}/*復合語句*/ printf("a=%db=%dc=%d",a,b,c); }3.2if語句(選擇結構)3.2.2、if-else語句1、形式:if(表達式)語句1

else語句22、流程圖:語句2語句10非0表達式雙分技選擇結構:3.2if語句(選擇結構)

例1:任意輸入一數(shù)據(jù),判定其能否被3整除 (如要對多個數(shù)據(jù)進行判斷呢?或者需反復輸入數(shù)據(jù)進行判斷呢?)

定義數(shù)據(jù)a輸入數(shù)據(jù)aa%3==0?輸出數(shù)據(jù)a非00輸出NO(3-2-2.c)3.2if語句(選擇結構)3.2.3、elseif語句1、形式:if(表達式1)語句1elseif

(表達式2)語句2elseif

(表達式3)語句3 ……elseif

(表達式n)語句nelse

語句n+12、流程圖:語句1真假表達式1表達式2語句2真表達式3語句3真假語句4假多分技選擇結構:3.2if語句(選擇結構)例(3-2-4-1.c)

例:分段函數(shù)(多分技)Fx=-1

(x<0)0

(x=0)1

(x>0)3.2if語句(選擇結構)

例:輸入成績,輸出該成績所屬等級,(A、B、C、 D等)

。(3-2-3)3.2if語句(選擇結構)3.2.4、if語句的嵌套1、形式:if()if()語句1[else語句2]elseif()語句3[else語句4]內嵌if語句內嵌if語句2、注意:if總是與它最近的else配對3.2if語句(選擇結構)表達式1表達式2表達式3非00非0語句系列1語句系列20語句系列4語句系列3非00

例:分段函數(shù)Fx=(x>=0)

(x<0)

-1X>0 1X=003-2-4-2.c3.3switch語句(開關)用于處理多路分支選擇1、形式:(3-3)swithch(表達式){case常量表達式1:語句1;[break;]case常量表達式2:語句1;[break;]case常量表達式3:語句1;[break;]……case常量表達式n:語句1;[break;]default :語句n+1;}常量表達式1表達式語句系列1break?非0

0常量表達式2語句系列2語句系列nbreak?非0非000非0....default結束0

例:輸入成績等級(A,B,C,E,D),根據(jù)等級輸出其所屬分數(shù)段。(3-3.C)循環(huán)語句什么是循環(huán)?為什么要使用循環(huán)?問題1:問題2:求學生平均成績分數(shù)相加后除以課數(shù)

在許多問題中需要用到循環(huán)控制。循環(huán)結構是結構化程序設計的基本結構之一,它和順序結構、選擇結構共同作為各種復雜程序的基本構造單元。3.4while語句(當循環(huán))當滿足某一條件,需要反復執(zhí)行一組語句時用循環(huán)語句:while,do-while,for1、形式:while(表達式)語句2、流程圖語句表達式非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)體如果包含一個以上的語句,應該用花括弧括起來,以復合語句形式出現(xiàn)。在循環(huán)體中應有使循環(huán)趨向于結束的語句。如果無此語句,則i的值始終不改變,循環(huán)永不結束。3.5do-while語句(直到循環(huán))1、形式:do 循環(huán)體語句while(表達式);2、流程圖循環(huán)體語句表達式非00執(zhí)行過程:先執(zhí)行一次指定的循環(huán)體語句,然后判別表達式,當表達式的值為非零(“真”)時,返回重新執(zhí)行循環(huán)體語句,如此反復,直到表達式的值等于0為止,此時循環(huán)結束。

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)體部分是一樣的,它們的結果也一樣。但是如果while后面的表達式一開始就為假(0值)時,兩種循環(huán)的結果是不同的。例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);

}

}運行結果:1↙sum=55再運行一次:11↙sum=0運行結果:1↙sum=55再運行一次:11↙sum=11說明:(1)當while后面的表達式的第一次的值為“真”時,兩種循環(huán)得到的結果相同。否則,二者結果不相同。3.6for語句(步長循環(huán))1、形式:for(表達式1;表達式2;表達式3)語句2、流程圖3、例(3-6-1)for(i=0;i<100;i++)sum=sum+i;求解表達式1表達式2非00語句求解表達式3for語句的執(zhí)行過程:(1)先求解表達式1。(2)求解表達式2,若其值為真(值為非0),則執(zhí)行for語句中指定的內嵌語句,然后執(zhí)行下面第(3)步。若為假(值為0),則結束循環(huán),轉到第(5)步。(3)求解表達式3。(4)轉回上面第(2)步驟繼續(xù)執(zhí)行。(5)循環(huán)結束,執(zhí)行for語句下面的一個語句

3.6for語句(步長循環(huán))表達式2?執(zhí)行語句成立不成立執(zhí)行for循環(huán)之后的語句執(zhí)行表達式3執(zhí)行表達式1循環(huán)初始條件循環(huán)控制條件循環(huán)體for語句等價于下列語句:表達式1;while(表達式2){語句;表達式3;}

for語句最簡單的應用形式、最易理解的如下形式:

for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)3.6for語句4、表達式的省略:for(i=0;i<100;i++)sum=sum+i;(1)省略表達式1(應在for前給循環(huán)變量賦初值)i=1;for(;i<100;i++)sum=sum+i;(2)省略表達式2(應在循環(huán)體內加入結束循環(huán)的條件)for(i=1;;i++){sum=sum+i;if(i>100)break;}3.6for語句4、表達式的省略:for(i=0;i<100;i++)sum=sum+i;(3)省略表達式3(應在for循環(huán)體內加入循環(huán)變量的變化語句以結束循環(huán))for(i=1;i<100;){sum=sum+i;i++;}(4)省略表達式1、3i=1;for(;i<=100;){sum=sum+i;i++;}3.6for語句4、表達式的省略:for(i=0;i<100;i++)sum=sum+i;(5)3個表達式都可以省略i=1;for(;;){sum=sum+i;i++;if(i>100)break;}i=1;for(sum=0;i<=100;i++){sum=sum+i;}6)表達式1可以是給循環(huán)變量賦初值,還可以是其它的任意無關表達式3.6for語句4、表達式的省略:for(i=0;i<100;i++)sum=sum+i;(7)表達式2可以是關系表達式,也可以是邏輯表達式for(;(c=getchar())!=‘\n’;){printf(“%c”,c);}3.7循環(huán)語句的比較和嵌套1、幾種循環(huán)的比較:(1)4種循環(huán)可以用來處理同一問題,一般可以相互替代(2)for語句功能較強,while循環(huán)能完成的,for都能實現(xiàn)。(3)while、do-while循環(huán)的循環(huán)變量初始化放在循環(huán)語句 之前,for循環(huán)放在表達式1中。(4)可以用break跳出循環(huán),用continue結束本次循環(huán)。3.7循環(huán)語句的比較和嵌套2、循環(huán)嵌套:

一個循環(huán)體內又包含另一個完整的循環(huán)結構。內嵌的循環(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語句結束本次循環(huán)(break語句和continue語句見下節(jié))。而對用goto語句和if語句構成的循環(huán),不能用break語句和continue語句進行控制.

3.8break語句和continue語句3.8break語句和continue語句1、break語句break用于跳出switch結構。break還用于跳出循環(huán),即提前結束循環(huán)。形式:break;

while(表達式1)

{…if(表達式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用于結束本次循環(huán)。形式:continue;while(表達式1)

{…

if(表達式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ù)列有如下特點:第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;

}

}

運行結果:11235813213455891442333776109871597258441816765109461771128657463687502512139319641831781151422983204013462692178309352457857022887922746514930352241578173908816963245986102334155

例1:判斷m是否素數(shù)。分析(1)如果m能被2~m之中任何一個整數(shù)整除,則提前結束循環(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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論