![語言實用教程課件章程序流程控制_第1頁](http://file4.renrendoc.com/view12/M08/38/21/wKhkGWX7kmGAc1YoAAExMwh9KzI190.jpg)
![語言實用教程課件章程序流程控制_第2頁](http://file4.renrendoc.com/view12/M08/38/21/wKhkGWX7kmGAc1YoAAExMwh9KzI1902.jpg)
![語言實用教程課件章程序流程控制_第3頁](http://file4.renrendoc.com/view12/M08/38/21/wKhkGWX7kmGAc1YoAAExMwh9KzI1903.jpg)
![語言實用教程課件章程序流程控制_第4頁](http://file4.renrendoc.com/view12/M08/38/21/wKhkGWX7kmGAc1YoAAExMwh9KzI1904.jpg)
![語言實用教程課件章程序流程控制_第5頁](http://file4.renrendoc.com/view12/M08/38/21/wKhkGWX7kmGAc1YoAAExMwh9KzI1905.jpg)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第4章程序流程控制
程序設計是計算機科學的一個核心問題,主要還是靠人完成。結構化程序設計方法是面向過程程序設計的基本方法,C語言是一種結構化的程序設計語言,它提供了完善的結構化程序設計的各種控制結構。結構化程序設計三原則1.
使用三種基本控制結構(順序、選擇、循環(huán))2.
采用自頂向下、逐步求精的模塊化程序設計方法3.
限制goto語句的使用
S1S2順序結構S1
S2條件選擇結構循環(huán)結構條件S14.1結構化程序設計的概念4.2選擇結構程序設計C語言支持的選擇結構:
1.if語句
2.
條件表達式
3.switch語句形式1:單分支選擇
if(測試表達式)
語句1;≠0=0測試表達式語句1【例】猜數游戲:若用戶猜對了,屏幕顯示“**Right**”,然后結束程序運行。#include<stdio.h>voidmain(){intmagic=123;intguess;printf("Enteryourguess:");scanf("%d",&guess);if(guess==magic)printf("**Right**\n");}4.2.1if語句1.if語句的形式和功能形式2:二分支選擇
if(測試表達式)
語句1;
else
語句2;語句2≠0=0語句1測試表達式【例】猜數游戲:若用戶猜對了,屏幕顯示“**Right**”;否則,顯示“**Wrong**”。
#include<stdio.h>voidmain(){intmagic=123,guess;printf("Enteryourguess:");scanf("%d",&guess);if(guess==magic)printf("**Right**\n");elseprintf("**Wrong**\n");}形式3:多分支選擇
if(測試表達式1)
語句1;elseif(測試表達式2)
語句2;elseif(測試表達式3)
語句3;……elseif(測試表達式n)
語句n;else
語句n+1;≠0=0=0≠0≠0≠0=0=0測試表達式1
語句1測試表達式2測試表達式3測試表達式n
語句2語句3語句n語句n+1【例】猜數游戲:若用戶猜對了,屏幕顯“**Right**”;否則,將提示用戶是猜大了,還是猜小了。
#include<stdio.h>voidmain(){intmagic=123,guess;printf("Enteryourguess:");scanf("%d",&guess);if(guess==magic)printf("**Right**\n");elseif(guess>magic)printf("yourguessistoolarge!\n");elseprintf("yourguessistoosmall!\n");}if(a==2)printf("%d",a);elseprintf(“%d\n”,b);if(a=2)printf("%d\n",a);elseprintf(“%d\n”,b);PK認識幾種常見的測試表達式的寫法:if(a-2)printf("%d",a)if(a!=2)printf(“%d”,a)if(!a)printf(“%d”,a)if(a==0)printf(“%d”,a)if(a)printf(“%d”,a)if(a!=0)printf(“%d”,a)PKif語句的使用說明:(1)if語句中測試表達式的書寫非常靈活,初學者要引起足夠的重視。if(a>b)
{t=a;a=b;b=t;}printf("a=%d,b=%d",a,b);if(a>b)t=a;a=b;b=t;printf("a=%d,b=%d",a,b);PK(2)if語句中出現(xiàn)復合語句時,一定要用花括號括住,寫成
if(測試表達式){語句序列1}else{語句序列2}if語句的嵌套(1)內層if既可以嵌套在外層的if塊中,也可以嵌套在外層的else塊中,其形式為:
if(測試表達式1){……if(測試表達式2)……else……}else{……if(測試表達式3)……else……}(2)else和if的配對關系:else總是與離自己最近的不帶else的if配對,而與書寫格式無關。if(a<b)
{if(b<c)c=a;}elsec=b;if(a<b)if(b<c)c=a;elsec=b;PK=0=0=0=0≠0≠0≠0≠0
輸入x,y單位圓上單位圓內X軸下方X軸上X軸上方
打印結果y=0x2+y2≤1x2+y2=1y≥0#include<stdio.h>voidmain(){floatx,y,z;scanf("%f%f",&x,&y);z=x*x+y*y;printf("%.2f,%.2f\t",x,y);if(z<=1)if(z==1)printf("在單位圓上\n");elseprintf("在單位圓內\n");elseif(y>=0)if(y>0)printf("在單位圓外,x軸上方\n");elseprintf("在單位圓外,x軸上\n");elseprintf("在單位圓外,x軸下方\n");}【例】在直角坐標系中有一個以原點為中心的單位圓,今任給一點(x,y),試判斷該點是在單位圓內、單位圓上,還是單位圓外?若在單位圓外,那么是在x軸的上方,在x軸上,還是在x軸的下方?上例可改寫為if-elseif-else語句構成多分支選擇結構。#include<stdio.h>voidmain(){floatx,y,z;scanf("%f%f",&x,&y);z=x*x+y*y;printf("%.2f,%.2f\t",x,y);if(z==1)printf("在單位圓上\n");elseif(z<1) printf("在單位圓內\n");else if(y>0)printf(“在單位圓外,x軸上方\n");elseif(y==0)printf("在單位圓外,x軸上\n");elseprintf("在單位圓外,x軸下方\n");}exp3≠0=0exp2exp1【例】inta,b,c;scanf(“%d%d”,&a,&b);c=a>b?a:b;printf(“%d\n”,c);4.2.2條件表達式1.條件運算符和條件表達式條件運算符?://三元運算符條件表達式exp1?exp2:exp3結合性為從右至左exp1?exp2:exp3?exp4:exp5c=((a>b)?a:b)c=a>b?a:bexp1?exp2:(exp3?exp4:exp5)exp1?exp2?exp3:exp4:exp5exp1?(exp2?exp3:exp4):exp5小貼士最右邊的“?”總是與緊靠其右的“:”匹配2.條件運算符的優(yōu)先級和結合性優(yōu)先級僅高于賦值運算符和逗號運算符,低于其他運算符。3.條件表達式的使用條件表達式常用在賦值語句中代替if-else語句?!纠繌逆I盤接收一個字符存放在變量c中。要求只把輸入的小寫字母轉換成大寫字母,其他字符不變,并顯示是輸入了小寫字母還是其他字符。
#include<stdio.h>voidmain(){charch,c;scanf("%c",&ch);printf("%c\n",c);c=ch>='a'&&ch<='z'?ch-32:ch;printf(ch>='a'&&ch<='z'?"Lowercasechracter":"Otherchracter");}4.2.3switch語句和break語句switch用于多分支選擇,比if-elseif-else語句易讀、可使程序更加簡明。
switch不能完全取代if-elseif-else;
switch常與break聯(lián)用。switch(e){casec1:語句1;casec2:語句2;…….casecn:語句n;[default:語句n+1;]}//e是整型變量或表達式//c1~cn是整型常量或常量表達式defaulte=cne=c1e=c2計算表達式e語句1語句2語句n語句n+11.switch語句程序運行時,①若輸入字母“a”,輸出?②若輸入字母“x”,輸出?【例4.6】從鍵盤輸入不同的字母,顯示不同的國家名稱。
#include<stdio.h>voidmain(){charch;ch=getchar();switch(ch){case'a':printf("America\n");case'b':printf("Britain\n");case'c':printf("China\n");case'd':printf("Denmark\n");default:printf("Japan\n");}}defaulte=cne=c1e=c2計算表達式e語句1語句2語句n語句n+1break與switch聯(lián)用,強迫控制立即退出switch。①防止從一個case下落到另一個case中;②防止因case和default位置的改變而影響程序的運行結果。2.break語句【例】
在例4.6程序中加入break。#include<stdio.h>main(){charch;ch=getchar();switch(ch){case'a':printf("America\n");break;case'b':printf("Britain\n");break;case'c':printf("China\n");break;case'd':printf("Denmark\n");break;default:printf("Japan\n");break;}}程序運行時,①若輸入字母“a”,輸出?②若輸入字母“x”,輸出?switch(ch){case'0':case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':digit++;break;case'':case'\n':case'\t':white++;break;default:character++;break;}①
每個case中的常量或常量表達式的值應互不相同,否則會出現(xiàn)矛盾的結果。②如果每個case和default中都有break語句,那么,case和default出現(xiàn)的次序不會影響程序的運行結果。③允許多個case共用一個語句序列。3.switch和break語句的使用④
字符常數出現(xiàn)在case中,它們會自動轉換成整型。⑤
switch可以嵌套使用,要求內層的switch必須完全包含在外層的某個case中,允許內、外層switch的case中含有相同的常數,不會引起誤會。如
switch(x){case1:switch(y){case0:printf("dividedbyzero");break;case1:printf("Itisright");break;}case2:……}⑥
switch只能進行相等性檢查,而if不但可進行相等性檢查,還可以計算關系或邏輯表達式。因此,switch不能完全替代if。#include<stdio.h>main(){inta,b,c,t;scanf("%d%d%d",&a,&b,&c);printf(“初始序列:a=%db=%dc=%d\n",a,b,c);if(a<b) {t=a;a=b;b=t;}if(c<b)printf(“排序后:a=%db=%dc=%d\n",a,b,c);elseif(c<a) {t=b;b=c;c=t; printf("排序后:a=%db=%dc=%d\n",a,b,c);} else {t=a;a=c;c=b;b=t; printf("排序后:a=%db=%dc=%d\n",a,b,c);}}【例】
從鍵盤輸入三個數,然后按從大到小輸出。4.3循環(huán)結構
循環(huán)結構用來進行有規(guī)律性的重復運算,可以大大縮短程序的長度。C語言支持的循環(huán)結構:for循環(huán)(步長型循環(huán))
while循環(huán)(當型循環(huán))
do-while循環(huán)(直到型循環(huán))1.for語句的一般格式
for(表達式1;表達式2;表達式3)
語句;for(i=1;i<10;i+=2)printf("%d",i);
2.for語句的執(zhí)行流程計算表達式1≠0循環(huán)體計算表達式3=0
計算表達式24.3.1for語句【例】
將50以內的奇數在屏幕上顯示出來的程序。
#include<stdio.h>voidmain(){inti;for(i=1;i<50;i+=2)printf("%d",i);//循環(huán)體
printf("\n");}①for語句是先判斷后執(zhí)行。就是說,如果開始時循環(huán)條件不成立,循環(huán)體一次也不被執(zhí)行。例如程序段
x=10;for(y=10;y!=x;++y)printf("%d",y);中的循環(huán)體不被執(zhí)行。②可用逗號表達式實現(xiàn)兩個或多個循環(huán)控制變量。例如,語句
for(i=0,j=1;j<n&&i<n;i++,j++)printf("%d",i+j);中,初始化部分和增值部分有兩個變量,它們同時控制循環(huán)。這種形式經常用在數組和字符串的操作中。3.for語句的使用注意事項③三個表達式可以放在for語句外部。
for(i=1;i<=5;i++)printf("%d",i);
i=1;for(;i<=5;i++)printf("%d",i);i=1for(;i<5;){printf("%d",i);
i++;}
i=1for(;;){printf("%d",i);
i++;
if(i>5)break;}④循環(huán)體可以是空語句。
for(i=0;i<1000;++i);這個程序的功能是延遲一小段時間,這一小段時間用來計算循環(huán)變量的值和判斷循環(huán)是否終止。⑤注意防止出現(xiàn)“死循環(huán)”。無休止的循環(huán)稱為“死循環(huán)”。例如
main(){intx=10;for(;x<=10;x--)printf(“%d”,++x);}
該程序會輸出無數個“11”而不能正常終止。#include<stdio.h>voidmain(){inti,n,p;scanf("%d",&n);p=1;for(i=2;i<=n;i++)p=p*i;printf("%d%d\n",n,p);}【例】編制一個求n!的程序,n的值由鍵盤輸入。≠0=0
測試表達式循環(huán)體4.3.2while語句2.while語句的執(zhí)行流程【例】顯示50以內的奇數。#include<stdio.h>voidmain(){inti=1;//提前給i賦值
while(i<50){printf("%d",i);i+=2;//修改i的值
}printf("\n");}1.while語句的一般格式:
while(測試表達式)
語句;用for循環(huán)實現(xiàn)。#include<stdio.h>voidmain(){inti,s=0;for(i=1;i<=100;i++)s+=i;printf(“s=%d\n",s);}【例】求s=1+2+3+…+100。
#include<stdio.h>voidmain(){inti,s;i=1;s=0;while(i<=100){s+=i;i++;}printf(“s=%d\n",s);}①while語句相當于下面形式的for語句:
for(;測試表達式;)②和for語句一樣,while也是先判斷后執(zhí)行。比如,程序段
i=3;while(i<3)printf("i=%d",i);中的循環(huán)體將不被執(zhí)行。3.while語句的使用③while語句的循環(huán)體可以是空語句。如
while((ch=getchar())!='A');它與下面的程序段功能相同:
for(;;){ch=getchar();if(ch=='A')break;}這個程序段也可以編寫成
while(1){ch=getchar();if(ch==’A’)break;}④while語句本身不具有給循環(huán)變量賦初值及修改循環(huán)變量值的功能,因此應注意在while語句之前給循環(huán)變量賦初值,在循環(huán)體內修改循環(huán)變量的值,防止出現(xiàn)死循環(huán)?!纠孔匀怀礶的計算公式為請編制程序計算e的近似值,要求被舍棄的首項<0.000001。#include<math.h>#include<stdio.h>voidmain(){intn=1;floate=0,t=1.0;while(fabs(t)>=1E-6){e=e+t;t=t/n;n++;}printf("e=%f\n",e);}4.3.3do-while語句循環(huán)體≠0=0
測試表達式2.do-while語句的執(zhí)行流程【例】顯示50以內的奇數。#include<stdio.h>voidmain(){inti=1;//提前給i賦值
do{printf("%d",i);i+=2;//修改i的值
}while(i<50);printf("\n");}1.do-while語句的一般格式
do
{
語句;}while(測試表達式);#include<stdio.h>voidmain(){intx,c;printf("Inputaninteger:");scanf("%d",&x);do{c=x%10;printf("%d",c);}while((x/=10)!=0);printf("\n");}【例】從鍵盤輸入一個整數,把這個整數中的各位數字反序顯示出來。例如,輸入為1234,則輸出為4321。4.3.4循環(huán)的嵌套
循環(huán)的嵌套是指一個循環(huán)的循環(huán)體中包含了另一個或幾個循環(huán),也稱多重循環(huán)。1.一個二重循環(huán)的例子【例】打印九九乘法表。
#include<stdio.h>voidmain(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=9;j++)printf("%d*%d=%2d",i,j,i*j);printf("\n");}}
請思考,如果要輸出如下圖所示的左下三角形九九乘法表,應如何修改程序?若要輸出右上三角形或右下三角形九九乘法表,又應如何實現(xiàn)?
2.嵌套循環(huán)的使用①內層循環(huán)必須完全包含在外層循環(huán)中,二者不能使用相同的循環(huán)變量,不能出現(xiàn)交叉。②循環(huán)嵌套的層數沒有限制,但層數太多,可讀性變差。
③為了使嵌套的層次關系清晰明了,建議采用縮排格式書寫程序。
【例】用迭代法求正數x(2~100)的平方根。迭代公式為:,要求迭代精度為0.00001。#include<math.h>#include<stdio.h>voidmain(){floatx,x0,x1;for(x=2;x<=100;x++){x0=x/2;x1=(x0+x/x0)/2;do{x0=x1;x1=(x0+x/x0)/2;}while(fabs(x1-x0)>=1e-5);printf("%.0f%f\n",x,x1);}}
所謂迭代,就是從初始值x0出發(fā),用迭代公式計算x1,當|x1-x0|<ε時(ε稱為迭代精度),迭代收斂,x1就是所求的根;否則,用x1替換x0,繼續(xù)使用迭代公式,計算新的x1。4.4轉移控制語句C語言提供的轉移控制語句:
break可用在switch和循環(huán)結構中,強行結束switch或循環(huán)。
continue
只用在循環(huán)結構中,提前進入下一輪循環(huán)。
goto
無條件轉移到指定的位置。
return
只用在子函數中,將控制返回調用段。
exit()<stdlib.h>提供的控制轉移函數,強行控制程序運行結束。4.4.1break語句break語句有兩種用途。一種是用在switch中,強行控制立即退出switch,第二種是用在循環(huán)中,強行控制立即退出循環(huán)?!纠縝reak語句的應用示例。
#include<stdio.h>voidmain(){intt;for(t=0;t<100;t++){printf("%d",t);if(t==10)break;}}for(...){...switch(a){case1:...
break;case2:...}...}break的使用
1.break用在switch中,只強行退出該switch而不影響switch所在的任何循環(huán)。例如for(...){...while(...){...if(...)break;do
{...
if(…)break;}while(...);...}...
}
不能期望用break從最內層循環(huán)一下子退出最外層循環(huán)(可以用goto實現(xiàn))。2.break用在循環(huán)中,只能退出它所在的那一層循環(huán),即for(...){...if(...){...continue;}...}4.4.2continue語句
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 25367-2024柴油機電控共軌系統(tǒng)噴油器總成
- Porantherine-生命科學試劑-MCE-2296
- 1-Propinoyl-Lysergic-acid-methylisopropylamide-1P-MiPLA-生命科學試劑-MCE-1036
- 2025年度銀行賬戶管理與個人財富管理合作協(xié)議方
- 2025年度高層建筑基礎鉆孔施工與質量控制合同
- 二零二五年度特色餐廳廚師勞動合同及勞動爭議處理協(xié)議
- 2025年度綠色環(huán)保版商鋪租賃合同
- 2025年度環(huán)保項目短期現(xiàn)場作業(yè)人員勞動合同
- 二零二五年度綠色環(huán)保產業(yè)財產贈與協(xié)議
- 2025年度新媒體運營專員聘用合同簡易制
- 新急救常用儀器設備操作流程
- 新人教版高中數學選擇性必修第一冊全套精品課件
- 2023年四川省自貢市中考數學真題(原卷版)
- 山東省濰坊市高職單招2023年英語自考測試卷(含答案)
- 三年級數學混合運算100題
- 通信工程安全生產手冊
- GB/T 9074.1-2002螺栓或螺釘和平墊圈組合件
- GB/T 8014-1987鋁及鋁合金陽極氧化陽極氧化膜厚度的定義和有關測量厚度的規(guī)定
- 中醫(yī)醫(yī)院新入職護士培訓大綱
- 運動技能學習與控制課件
- 煙葉分級工新教材(高級篇)
評論
0/150
提交評論