




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C語言程序設(shè)計TheCProgrammingLanguage華中科技大學(xué)計算機學(xué)院
曹計昌8/7/20231華中科技大學(xué)計算機學(xué)院C語言程序設(shè)計TheCProgrammingLanguC語言程序設(shè)計第4章流程控制8/7/20232華中科技大學(xué)計算機學(xué)院C語言程序設(shè)計第4章流程控制7/31/20232華中科技大主要內(nèi)容4.1C語句分類 4.2表達式語句4.3復(fù)合語句
4.4if語句4.5switch語句
4.6while語句4.7for語句 4.8do-while語句4.9goto語句和標(biāo)號語句4.10break語句、continue語句和return語句4.11嵌套循環(huán)程序設(shè)計**4.12推理機程序設(shè)計8/7/20233華中科技大學(xué)計算機學(xué)院主要內(nèi)容4.1C語句分類 4.2表達式語句7/31/2C語句4.1C語句分類
說明語句可執(zhí)行語句變量說明、函數(shù)說明、常量定義、類型定義、……表達式語句、復(fù)合語句、選擇語句(if和switch)、循環(huán)語句(while,do-while和for)、轉(zhuǎn)移語句(break,continue,goto和return)、標(biāo)號語句8/7/20234華中科技大學(xué)計算機學(xué)院C語句4.1C語句分類說明語句可執(zhí)行語句變量說明、函數(shù) 在任何C表達式的末尾加一個分號都可以構(gòu)成一個語句,即表達式語句。表達式語句的一般形式: 表達式; 其中,“;”是C語句不可缺少的組成部分,它表示一個語句的結(jié)束。在C語言中,賦值、輸入和輸出都由表達式語句實現(xiàn)。例:x=y+1 x=y+1; x+=y x+=y; i=j=k i=j=k;
printf(”hello”) printf(”hello”); scanf(”%d”,&x) scanf(”%d”,&x);
4.2表達式語句
8/7/20235華中科技大學(xué)計算機學(xué)院 在任何C表達式的末尾加一個分號都可以構(gòu)成一個 再如: a–b; 也是一個表達式語句,但是由于在表達式求值的過程中并沒有改變?nèi)魏巫兞康闹?,這樣的表達式語句并沒有實際意義。 僅由一個分號構(gòu)成的語句稱為空語句,即: ; 它不執(zhí)行任何操作。在程序設(shè)計中,如果某處在語法上需要一條語句,而在實際功能上不需要執(zhí)行任何操作時,可以使用空語句。4.2表達式語句(續(xù))
8/7/20236華中科技大學(xué)計算機學(xué)院 再如:4.2表達式語句(續(xù))7/31/20236華中1.復(fù)合語句的一般形式 用花括號“{}”括起來的一組語句,語法上等價于單個語句,語法格式為: { 說明部分 語句部分 } 說明部分可包含0至多個說明語句;語句部分可包含0至多個執(zhí)行語句。 復(fù)合語句又稱塊。函數(shù)體是一個塊。4.3復(fù)合語句8/7/20237華中科技大學(xué)計算機學(xué)院1.復(fù)合語句的一般形式4.3復(fù)合語句7/31/20237例4.3:不含說明語句的復(fù)合語句{ t=a;a=b;b=t;}例4.4:包含說明了語句的復(fù)合語句。{ intt; t=a;a=b;b=t;}復(fù)合語句舉例8/7/20238華中科技大學(xué)計算機學(xué)院例4.3:不含說明語句的復(fù)合語句復(fù)合語句舉例7/31/2022.嵌套的復(fù)合語句 復(fù)合語句中包含復(fù)合語句,從而形成嵌套的復(fù)合語句。例如:{ inta=0,b=1; { inta=1; printf(”a=%d\n”,a); printf(”b=%d\n”,b+=1); } printf(“a=%d\n”,a); printf(“b=%d\n”,b);}4.3復(fù)合語句(續(xù))8/7/20239華中科技大學(xué)計算機學(xué)院2.嵌套的復(fù)合語句4.3復(fù)合語句(續(xù))7/31/20233.復(fù)合語句的用途 復(fù)合語句在程序設(shè)計中主要有以下兩種用途: (1)用于語法上只允許出現(xiàn)單個語句而處理上需要執(zhí)行多個語句的地方,例如作為if語句的子句及循環(huán)語句的循環(huán)體。 (2)用于改變嵌套if-else語句的配對規(guī)則。 此外,當(dāng)需要說明臨時使用的局部變量時,也可使用復(fù)合語句。4.3復(fù)合語句(續(xù))8/7/202310華中科技大學(xué)計算機學(xué)院3.復(fù)合語句的用途4.3復(fù)合語句(續(xù))7/31/20231.if語句的一般形式 if語句有兩種形式: (1)if格式:if(表達式)語句1; (2)if-else格式:if(表達式)語句1;else語句2;4.4if語句8/7/202311華中科技大學(xué)計算機學(xué)院1.if語句的一般形式4.4if語句7/31/20232.嵌套的if語句 1)嵌套if語句的形式 當(dāng)if子句或else子句中又包含if語句時,則形成嵌套的if語句。例如,可以用下面的一個嵌套的if語句求a,b,c三個數(shù)中最大值: if(a>b) if(a>c)max=a; elsemax=c; else if(b>c)max=b; elsemax=c;4.4if語句(續(xù))8/7/202312華中科技大學(xué)計算機學(xué)院2.嵌套的if語句4.4if語句(續(xù))7/31/202 2)嵌套if語句中else的配對規(guī)則 對嵌套if語句中else與if的配對必須制定一個規(guī)則,否則會造成理解上的二義性。例如: if(n>0) if(a>b)z=a; elsez=b;
編譯程序約定:else與其前面最靠近的還未配對的if配對,即內(nèi)層優(yōu)先配對原則。
4.4if語句(續(xù))8/7/202313華中科技大學(xué)計算機學(xué)院 2)嵌套if語句中else的配對規(guī)則4.4if語句(例4.6:解方程ax+b=0,a和b從終端輸入。#include<stdio.h>voidmain(void){ floata,b,x; printf(”inputa,b:\n”); scanf(”%f%f”,&a,&b); if(!a)printf(”errorininputdata\n”); else{ x=-b/a; printf(”x=%.4f\n”,x);}}3.程序設(shè)計舉例8/7/202314華中科技大學(xué)計算機學(xué)院例4.6:解方程ax+b=0,a和b從終端輸入。3.1.switch語句的形式 switch語句的一般形式為: switch(表達式){ case常量表達式1:語句序列1; case常量表達式2:語句序列2; … case常量表達式n:語句序列n; default: 語句序列n+1; }4.5switch語句8/7/202315華中科技大學(xué)計算機學(xué)院1.switch語句的形式4.5switch語句7/32.switch語句的使用要點 使用switch語句時,第一要注意列出的case應(yīng)能包括選擇表達式所有的取值情況,如果不能全部包括,則應(yīng)使用default子句處理余下的情況。
第二應(yīng)特別注意break在switch中的作用,如果希望執(zhí)行完某一case下的語句之后便跳出switch語句,則必須使用break或return轉(zhuǎn)移語句。break跳出switch語句之后繼續(xù)執(zhí)行switch語句后面的一個語句(如果有),return語句則立即結(jié)束函數(shù)并返回到調(diào)用處(如果是主函數(shù),則結(jié)束程序)。4.5switch語句(續(xù))8/7/202316華中科技大學(xué)計算機學(xué)院2.switch語句的使用要點4.5switch語句( 例如:下面是一個不含轉(zhuǎn)移語句的switch語句,注意觀察該語句執(zhí)行時的輸出。 i=1; switch(i){ case0:printf("%d\t",i); case1:printf("%d\t",i++); case2:printf("%d\t",i++); case3:printf("%d",i++); default:printf("\n"); } printf("%d\n",i);
4.5switch語句(續(xù))輸出:1234 8/7/202317華中科技大學(xué)計算機學(xué)院 例如:下面是一個不含轉(zhuǎn)移語句的switch語句,注意觀察該例4.8:學(xué)生考試成績按以下標(biāo)準(zhǔn)分等(x為學(xué)生考試分數(shù)): 分數(shù)范圍 等級英文名 90≤x≤100 excellent(優(yōu)) 80≤x<90 good(良) 60≤x<80 middle(中) x<60 bad(差) 輸入某學(xué)生的考試分數(shù),輸出該學(xué)生的考試成績的英文等級。要求用switch語句來實現(xiàn)。3.程序設(shè)計舉例8/7/202318華中科技大學(xué)計算機學(xué)院例4.8:學(xué)生考試成績按以下標(biāo)準(zhǔn)分等(x為學(xué)生考試分數(shù)):3 分析:switch語句可用來解決多分支問題,但每個case后面的常量都是一個離散的值,不能表示一個數(shù)值范圍。為此,將分數(shù)范圍[0,100]每10分劃為一段,則可劃分為[0,10),[10,20),[20,30),[30,40),[40,50),[50,60),[60,70),[70,80),[80,90),[90,100)十個分數(shù)段。進一步對分數(shù)值進行除以10然后取整的處理,可以發(fā)現(xiàn)上面同一分數(shù)段內(nèi)的分數(shù)經(jīng)處理后得到相同的一個整數(shù)。比如,[0,10)范圍內(nèi)的數(shù)除以10然后取整,結(jié)果都是0;[10,20)范圍內(nèi)的數(shù)除以10然后取整,結(jié)果都是1;……這樣一來,就可以用一個離散值代表一個分數(shù)段內(nèi)的所有分數(shù)值。p98
例4.8源程序代碼ex4.8.c。3.程序設(shè)計舉例(續(xù))8/7/202319華中科技大學(xué)計算機學(xué)院 分析:switch語句可用來解決多分支問題,但每個casep99例4.9:輸入某年某月,輸出該月的天數(shù)。 注意:switch語句允許多種情況執(zhí)行相同的語句,執(zhí)行相同語句的case可以寫成一行,其間可以用空格或制表符分隔,但不能用逗號分隔。例如: case4:case6:case9:case11:days=30; 正確 case4,case6,case9,case11:days=30; 錯誤 case4,6,9,11:days=30; 錯誤4.5switch語句(續(xù))8/7/202320華中科技大學(xué)計算機學(xué)院p99例4.9:輸入某年某月,輸出該月的天數(shù)。4.5s1.while語句的形式 while語句的一般形式為: while(表達式)語句 while語句流程圖:4.6while語句8/7/202321華中科技大學(xué)計算機學(xué)院1.while語句的形式4.6while語句7/31/ i=0; while(i<5){ printf(”i=%d\t”,i); i++; } printf(”i=%d\n”,i);
注意:如果循環(huán)體中沒有改變循環(huán)變量的值,或循環(huán)變量值的變化不能使循環(huán)控制表達式的結(jié)果為0,則循環(huán)將永不終止(通常稱之為“死循環(huán)”)。如果循環(huán)控制表達式的值一開始就為0(條件為假),則循環(huán)體一次都不執(zhí)行。解釋:p101-p102例4.11,例4.12,例4.13
例4.10while循環(huán)語句示例8/7/202322華中科技大學(xué)計算機學(xué)院 i=0;例4.10while循環(huán)語句示例7/31/2 例4.14:將來自標(biāo)準(zhǔn)輸入文件的正文復(fù)制到標(biāo)準(zhǔn)輸出文件,每次輸入和復(fù)制一個字符。
分析:以EOF(系統(tǒng)常量,值為-1)為結(jié)束標(biāo)志的字符流稱為一個正文,可以包含空白字符,例如空格符、制表符和換行符。根據(jù)題目要求,輸入函數(shù)應(yīng)使用getchar(每次輸入一個字符),輸出函數(shù)應(yīng)使用putchar(每次輸出一個字符);復(fù)制過程是一個重復(fù)地調(diào)用getchar讀和調(diào)用putchar寫的過程,因此程序的流程結(jié)構(gòu)是一個循環(huán)語句;讀入的字符是否為EOF則是循環(huán)控制條件。2.程序設(shè)計舉例8/7/202323華中科技大學(xué)計算機學(xué)院 例4.14:將來自標(biāo)準(zhǔn)輸入文件的正文復(fù)制到標(biāo)準(zhǔn)輸出文件,每 例4.14:算法步驟: (1)調(diào)用getchar讀入一個字符并賦給字符變量c。 (2)如果c不是EOF,則執(zhí)行(3);否則結(jié)束執(zhí)行。 (3)輸出c; (4)讀下一字符并賦給字符變量c; (5)轉(zhuǎn)步驟(2)。
p102
例4.14源程序代碼ex4.14.c2.程序設(shè)計舉例(續(xù))8/7/202324華中科技大學(xué)計算機學(xué)院 例4.14:算法步驟:2.程序設(shè)計舉例(續(xù))7/31/20例4.15輸入一個C程序(一段正文),按原來格式復(fù)制輸出,復(fù)制過程中刪去輸入程序中所有的注釋。 分析:為了刪去C程序中所有的注釋,關(guān)鍵在于如何區(qū)分注釋部分和需要復(fù)制的部分。為此,可將復(fù)制過程劃分為4種狀態(tài):復(fù)制狀態(tài)(COPY)、開始注釋狀態(tài)(START)、注釋狀態(tài)(COMMENT)和結(jié)束復(fù)制狀態(tài)(END),初始狀態(tài)為COPY。每種狀態(tài)下的處理方法如下: (1)在COPY狀態(tài)下,若讀入字符為’/’(可能為注釋開始符號),則將狀態(tài)改為START;否則將讀入的字符復(fù)制到輸出。 2.程序設(shè)計舉例(續(xù))8/7/202325華中科技大學(xué)計算機學(xué)院例4.15輸入一個C程序(一段正文),按原來 (2)在START狀態(tài)下,若讀入字符為’*’(確定注釋開始),則將狀態(tài)改為COMMENT;否則(不是注釋),將上一次讀入的字符’/’復(fù)制到輸出;然后檢查本次讀入的字符是否為’/’,若是,則狀態(tài)保持START不變,否則將本次讀入的字符復(fù)制到輸出并將狀態(tài)改為COPY。 (3)在COMMENT狀態(tài)下,若讀入字符為’*’(可能為注釋結(jié)束符號),則將狀態(tài)改為END。 (4)在END狀態(tài)下,若讀入字符為’/’(確定注釋結(jié)束),則將狀態(tài)恢復(fù)成COPY;否則(不是注釋結(jié)束),如果讀入字符是’*’,則狀態(tài)保持END不變,否則將狀態(tài)改為COMMENT。(p104源程序4.15)2.程序設(shè)計舉例(續(xù))8/7/202326華中科技大學(xué)計算機學(xué)院 (2)在START狀態(tài)下,若讀入字符為’*’(確定注釋開1.for語句的形式 for語句的一般語法形式表示為: for(e1;e2;e3)s for語句流程圖:等價于: e1; while(e2){ s; e3; }4.7for語句8/7/202327華中科技大學(xué)計算機學(xué)院1.for語句的形式4.7for語句7/31/2023 使用for語句時須注意表達式e1,e2,e3的用法: (1)三個表達式可以全部或部分缺省,但無論缺省e1,e2或e3,它們之間的分號不能省。 (2)缺省e1和e3時的for語句形如for(;e2;)s,等價于一個形如while(e2)s的while語句。 (3)缺省e2時的for語句for(e1;;e3)s和三個表達式都缺省的for語句for(;;)s都是無限循環(huán)語句。被省略的e2缺省值恒為非0(e1和e3沒有缺省值)。4.7for語句(續(xù))8/7/202328華中科技大學(xué)計算機學(xué)院 使用for語句時須注意表達式e1,e2,e3的用法:4.7例4.16:for循環(huán)語句示例。 inti; for(i=1;i<4;i++) printf(”i=%ds=%d\n”,i,2*i);幾種等價的形式: i=1; for(;i<4;i++) printf(”i=%ds=%d\n”,i,2*i);或 for(i=1;i<4;){ printf(”i=%ds=%d\n”,i,2*i); i++; }4.7for語句(續(xù))8/7/202329華中科技大學(xué)計算機學(xué)院例4.16:for循環(huán)語句示例。4.7for語句(續(xù))7或 i=1; for(;i<4;){ printf(”i=%ds=%d\n”,i,2*i); i++; }或 i=1; for(;;){ printf(”i=%ds=%d\n”,i,2*i); i++; if(!(i<4))break; }4.7for語句(續(xù))8/7/202330華中科技大學(xué)計算機學(xué)院或4.7for語句(續(xù))7/31/202330華中科技大 例4.19:輸入一批整數(shù),以0為結(jié)束。輸出其中最大的一個值。
分析:從若干個數(shù)中找出最大的一個數(shù)可用"打擂臺"的方法,即兩兩相比,大者留下;當(dāng)所有的數(shù)比完時留下的那個數(shù)為最大。比較過程采用每次輸入一個數(shù)立即與上一次留下的那個較大的數(shù)比較的方法,因此程序中只需用兩個變量:一個變量x用于保存每次輸入的一個數(shù)據(jù),另一個變量max用于保存每兩個數(shù)相比中較大的一個數(shù)。這種方法可以用于從任意多個輸入數(shù)據(jù)中找出其中的最大值。2.程序設(shè)計舉例8/7/202331華中科技大學(xué)計算機學(xué)院 例4.19:輸入一批整數(shù),以0為結(jié)束。輸出其中最大的一個值 例4.19:算法步驟: (1)輸入第一個數(shù)(x)。 (2)置最大數(shù)max初值為x。 (3)如果x不等于0,則執(zhí)行(4);否則,執(zhí)行(7)。 (4)輸入下一個數(shù)(x)。 (5)如果max<x,則將max修改為x(賦值)。 (6)轉(zhuǎn)步驟(3)。 (7)輸出max,結(jié)束。
p107
例4.19源程序代碼ex4.19.c。2.程序設(shè)計舉例(續(xù))8/7/202332華中科技大學(xué)計算機學(xué)院 例4.19:算法步驟:2.程序設(shè)計舉例(續(xù))7/31/20 例4.20:求n!,n從終端輸入。 分析:根據(jù)階乘的定義,n為≥0的整數(shù),n的階乘等于1至n連乘,即n!=1*2*3*...*n。這種反復(fù)進行的相同或類似的操作可以通過循環(huán)語句來實現(xiàn)。循環(huán)體實現(xiàn)的操作是,每循環(huán)一次時將第i項(i分別為1,2,3,…,n)與前面各項相乘的結(jié)果(即i-1的階乘)相乘(稱為累乘);循環(huán)結(jié)束條件為i等于n。i起著雙重作用,既是階乘因子又是循環(huán)變量。 考慮到n較大時n!是一個相當(dāng)大的數(shù),為避免溢出,應(yīng)將結(jié)果變量說明為long,unsignedlong,或double。此外,累乘過程開始之前一定要將存放累乘積的變量置初值1,而不能置為0。2.程序設(shè)計舉例(續(xù))8/7/202333華中科技大學(xué)計算機學(xué)院 例4.20:求n!,n從終端輸入。2.程序設(shè)計舉例(續(xù))7 例4.20:算法步驟: (1)輸入n。 (2)將累乘積變量fac及循環(huán)變量i置初值1。 (3)如果i≤n,則執(zhí)行累乘(fac=fac*i);否則(i>n),轉(zhuǎn)步驟(5)。 (4)將i值增加1,轉(zhuǎn)步驟(3)。 (5)輸出累乘結(jié)果fac,結(jié)束。
p108
例4.20源程序代碼ex4.20.c。2.程序設(shè)計舉例(續(xù))8/7/202334華中科技大學(xué)計算機學(xué)院 例4.20:算法步驟:2.程序設(shè)計舉例(續(xù))7/31/201.do-while語句的形式 do-while語句的一般形式為: do語句while(表達式); do-while語句流程圖:4.8do-while語句8/7/202335華中科技大學(xué)計算機學(xué)院1.do-while語句的形式4.8do-while語 do-while語句: do語句while(表達式);可以用以下等價的while循環(huán)語句來代替。 語句 while(表達式) { 語句 }4.8do-while語句(續(xù))8/7/202336華中科技大學(xué)計算機學(xué)院 do-while語句:4.8do-while語句(續(xù)) 例4.21:把輸入的整數(shù)按反方向輸出。例如,輸入的數(shù)是12345,要求輸出結(jié)果是54321。 分析:在輸入一個整數(shù)時,是從高位到低位(或者說從左到右)依次輸入各位上的數(shù)字。要按反方向輸出,就是從低位到高位(或者說從右到左)連續(xù)地輸出該數(shù)的各位數(shù)字。具體來說,就是先輸出個位數(shù)字,再輸出十位數(shù)字,直到最高位數(shù)字。獲取一個整數(shù)的個位數(shù)字的算法是將該整數(shù)除以10取余(模10)。去掉一個整數(shù)的個位數(shù)字(使十位數(shù)字變個位數(shù)字,百位數(shù)字變十位數(shù)字,直到最高位數(shù)字變次高位數(shù)字)的算法是將該整數(shù)除以10(整數(shù)除)。這樣,可以用循環(huán)語句從低位到高位依次輸出原整數(shù)的數(shù)字。(源程序代碼ex4.21.c)
2.程序設(shè)計舉例8/7/202337華中科技大學(xué)計算機學(xué)院 例4.21:把輸入的整數(shù)按反方向輸出。例如,輸入的數(shù)是122.程序設(shè)計舉例(續(xù)) 例4.24:輸入任意一個大于或等于2的整數(shù)n,判斷該數(shù)是否為素數(shù)并輸出相應(yīng)結(jié)果。 分析:根據(jù)數(shù)學(xué)定義,一個大于2的整數(shù)n,如果除1和n外不能被任何數(shù)整除(即n不含1和n以外的任何因子),則n是素數(shù);此外,整數(shù)2不符合上述定義,但規(guī)定2是最小素數(shù)。為了確定n是否含有1和n以外的因子,只需用2至(也可以用2至n-1或2至n/2)作除數(shù)除n。如果均不能整除n,則n是素數(shù),否則(即只要發(fā)現(xiàn)一個因子)n不是素數(shù)。顯然,用2至作除數(shù)時所做的除法次數(shù)比用2至n-1或2至n/2作除數(shù)時少得多。8/7/202338華中科技大學(xué)計算機學(xué)院2.程序設(shè)計舉例(續(xù)) 例4.24:輸入任意一個大于或等于22.程序設(shè)計舉例(續(xù)) 例4.24:算法步驟: (1)輸入n,直到n符合要求為止(循環(huán)語句); (2)確定除數(shù)i的初值(i=2)及終值j(j=sqrt(n)); (3)檢查2~sqrt(n)的每一個數(shù)是否都不是n的因子(循環(huán)語句),方法是,i從2開始,用i除n,若余數(shù)非0且i<=j,則使i值增加1再重復(fù)該過程;若余數(shù)為0(找到一個因子)或i<=j不成立,則結(jié)束循環(huán)。 (4)如果循環(huán)結(jié)束后余數(shù)為非0,則說明2~sqrt(n)范圍內(nèi)的整數(shù)都不是n的因子,因此可以判定n是素數(shù);否則(發(fā)現(xiàn)一個因子),n不是素數(shù)。
例4.24源程序代碼ex4.24.c。8/7/202339華中科技大學(xué)計算機學(xué)院2.程序設(shè)計舉例(續(xù)) 例4.24:算法步驟:7/31/203.循環(huán)語句小結(jié)(略) 三種循環(huán)語句的區(qū)別及使用要點歸納如下(s是循環(huán)體;e,e1,e2,e3是表達式): (1)while(e)s和for(e1;e2;e3)s先測試e或e2,后執(zhí)行s,若第一次測試時e或e2結(jié)果為0,則s一次也不執(zhí)行;doswhile(e);先執(zhí)行s,后測試e,所以s總是至少被執(zhí)行一次。使用時應(yīng)根據(jù)具體情況選用,一般說來,必定要執(zhí)行的循環(huán)可以用三種循環(huán)語句中任何一種;可能不被執(zhí)行的循環(huán)則不能用do-while。 (2)第一次測試循環(huán)條件(e或e2)之前,循環(huán)變量必須賦初值,初值只賦一次;在循環(huán)體(s)或e3(對于for語句)中必須有能夠改變循環(huán)變量值的語句或表達式。寫循環(huán)條件時,應(yīng)注意避免無限循環(huán)、永不執(zhí)行的循環(huán)或執(zhí)行次數(shù)不正確的循環(huán)等情況。8/7/202340華中科技大學(xué)計算機學(xué)院3.循環(huán)語句小結(jié)(略) 三種循環(huán)語句的區(qū)別及使用要點歸納如下3.循環(huán)語句小結(jié)(續(xù))(略) (3)for語句控制部分的e1可以包含給循環(huán)變量賦初值以及其他與循環(huán)有關(guān)的運算,即在循環(huán)開始之前僅執(zhí)行一次的運算;e2不要求一定是關(guān)系表達式或邏輯表達式,只要能正確控制循環(huán)體的執(zhí)行(非0值執(zhí)行循環(huán)體,0值結(jié)束循環(huán)),任何表達式都可以;e3是每次執(zhí)行循環(huán)體后緊接著要執(zhí)行的表達式,通常用于改變循環(huán)變量的值,如i++之類,e3也可以包括某些屬于循環(huán)體部分的內(nèi)容,也可將e3放到循環(huán)體最后??梢?,for語句使用非常靈活,其控制部分的三個表達式可以容納除循環(huán)變量賦初值、測試循環(huán)條件和修改循環(huán)變量值的運算以外的其他與循環(huán)有關(guān)的運算。 (4)任何循環(huán)語句當(dāng)循環(huán)體含有一個以上語句時,必須寫成復(fù)合語句(用{}括起來);當(dāng)循環(huán)體為空語句時不要掉了分號(;)。8/7/202341華中科技大學(xué)計算機學(xué)院3.循環(huán)語句小結(jié)(續(xù))(略) (3)for語句控制部分的egoto語句又稱為無條件轉(zhuǎn)移語句,它的一般形式為: goto標(biāo)號; 任何可執(zhí)行C語句都可以加標(biāo)號前綴成為標(biāo)號語句。標(biāo)號語句的形式為: 標(biāo)號:語句goto語句中的標(biāo)號是對標(biāo)號的引用,標(biāo)號語句中的標(biāo)號是對標(biāo)號的定義。被goto語句引用的標(biāo)號必須有且僅有一個對應(yīng)的標(biāo)號語句,對應(yīng)的標(biāo)號語句稱為稱為該goto語句的目標(biāo)語句;而允許標(biāo)號語句沒有對應(yīng)的goto語句。概而言之,有標(biāo)號的引用必須有惟一的標(biāo)號定義,而有標(biāo)號的定義不必有標(biāo)號的引用。4.9goto語句和標(biāo)號語句8/7/202342華中科技大學(xué)計算機學(xué)院goto語句又稱為無條件轉(zhuǎn)移語句,它的一般形式為:4.94.9goto語句和標(biāo)號語句(續(xù))goto語句的目標(biāo)語句允許出現(xiàn)的范圍稱為標(biāo)號的作用域。C語言中標(biāo)號的作用域是goto語句所在的函數(shù),即goto語句不能從一個函數(shù)轉(zhuǎn)移到另一個函數(shù)中,但可以在一個函數(shù)內(nèi)從嵌套結(jié)構(gòu)的內(nèi)層直接轉(zhuǎn)到最外層。使用標(biāo)號語句時,要注意同一函數(shù)內(nèi)的標(biāo)號不能同名。goto語句和標(biāo)號語句在函數(shù)中出現(xiàn)的先后位置沒有約束,即對標(biāo)號的定義和對標(biāo)號的引用沒有先后次序的規(guī)定。8/7/202343華中科技大學(xué)計算機學(xué)院4.9goto語句和標(biāo)號語句(續(xù))goto語句的目標(biāo)語句goto語句和標(biāo)號語句的用法 例4.25:輸入一個算式,模擬袖珍計算器的加、減、乘、除四則運算。假定計算時不考慮運算符的優(yōu)先級,也不允許輸入圓括號(),而是按照運算符出現(xiàn)的先后順序執(zhí)行運算。例如, 輸入10.8+0.13*100 計算結(jié)果為1093.000000
例4.25源程序代碼ex4.25.c。8/7/202344華中科技大學(xué)計算機學(xué)院goto語句和標(biāo)號語句的用法 例4.25:輸入一個算式,模注意:
goto語句不是必需的語言成分。因為用goto語句實現(xiàn)的任何控制轉(zhuǎn)移,都可以通過循環(huán)語句、if語句和其他轉(zhuǎn)移語句的適當(dāng)配合以及用整型變量標(biāo)記狀態(tài)的方法實現(xiàn)。goto語句的惟一好處是可以從嵌套結(jié)構(gòu)的最內(nèi)層(switch語句或循環(huán)語句)直接轉(zhuǎn)到最外層(隔層轉(zhuǎn)移),用起來較方便.但如果隨意地使用goto語句則會破壞程序的結(jié)構(gòu)化特性,使程序的邏輯結(jié)構(gòu)不清,因此應(yīng)盡量少用或不用goto語句。8/7/202345華中科技大學(xué)計算機學(xué)院注意: 7/31/202345華中科技大學(xué)計算機學(xué)院1.break語句 break語句的形式為: break; break是關(guān)鍵字。break語句有以下兩種用途: (1)用于switch語句中,從中途退出switch語句; (2)用于循環(huán)語句中,從循環(huán)體內(nèi)直接退出當(dāng)前循環(huán)。 注意:對于嵌套的循環(huán)語句和switch語句,break語句的執(zhí)行只能退出直接包含break的那一層結(jié)構(gòu)。4.10break語句、continue語句和return語句8/7/202346華中科技大學(xué)計算機學(xué)院1.break語句4.10break語句、contin4.10break語句(續(xù)) 例4.27:打印ASCII字符集中字符碼為32~126的字符及其字符碼的對照表,每行打印8對對應(yīng)值。
例4.27源程序代碼ex4.27.c。 例4.28:打印2~100之間的所有素數(shù),每行輸出10個數(shù)。 分析:如4.8節(jié)例4.24的程序所示,判斷一個數(shù)是否為素數(shù)(找因子)要用循環(huán)語句實現(xiàn),因此判斷2~100之間的每一個數(shù)是否為素數(shù)要用二重循環(huán)。
例4.28源程序代碼ex4.28.c。8/7/202347華中科技大學(xué)計算機學(xué)院4.10break語句(續(xù)) 例4.27:打印ASCI2.continue語句continue語句的形式為: continue;(continue是關(guān)鍵字)
continue語句只能出現(xiàn)在循環(huán)語句中,用于終止循環(huán)體的本次執(zhí)行(并非退出循環(huán)語句);即在循環(huán)體的本次執(zhí)行中,跳過從continue語句之后直到循環(huán)體結(jié)束的所有語句,控制轉(zhuǎn)移到循環(huán)體的末尾。對于while(e)s;和doswhile(e);,在執(zhí)行continue語句之后馬上執(zhí)行對循環(huán)控制表達式(e)的計算和測試;對于for(e1;e2;e3)s則馬上執(zhí)行表達式e3,然后執(zhí)行對表達式e2的計算和測試。8/7/202348華中科技大學(xué)計算機學(xué)院2.continue語句continue語句的形式為:7/2.continue語句(續(xù)) 例4.29:輸入10個整數(shù),輸出其中正數(shù)的個數(shù)及平均值。
例4.29源程序代碼ex4.29.c。 本例不用continue語句也能實現(xiàn)同樣的功能,改寫工作作為練習(xí)請讀者自己完成。8/7/202349華中科技大學(xué)計算機學(xué)院2.continue語句(續(xù)) 例4.29:輸入10個整數(shù)3.return語句return語句有下面兩種形式: (1)不帶表達式的return語句: return; (2)帶表達式的return語句: return表達式; return語句的功能是從被調(diào)用函數(shù)返回到調(diào)用函數(shù)。 不帶表達式的return語句只能返回控制、不能返回值,因此只能用于從無返回值的函數(shù)中返回。帶表達式的return語句(表達式可以用()括起來)在返回控制的同時,將表達式的值返回到調(diào)用處,函數(shù)調(diào)用表達式的值就是這個返回值。8/7/202350華中科技大學(xué)計算機學(xué)院3.return語句return語句有下面兩種形式:7/33.return語句(續(xù)) 例4.30:寫一個函數(shù)sign,返回浮點數(shù)x的符號。如果x小于0,則返回-1;如果x等于0,則返回0;如果x大于0,則返回1。
例4.30源程序代碼ex4.30.c。8/7/202351華中科技大學(xué)計算機學(xué)院3.return語句(續(xù)) 例4.30:寫一個函數(shù)sign 嵌套循環(huán)指循環(huán)體是一個循環(huán)語句,或循環(huán)體包含循環(huán)語句。 嵌套循環(huán)又稱為多重循環(huán),三種循環(huán)語句可以相互任意嵌套。具有兩層嵌套的循環(huán)稱為二重循環(huán),具有n重嵌套的循環(huán)稱為n重循環(huán);二重以上的循環(huán)統(tǒng)稱為多重循環(huán)。 C語言對循環(huán)的嵌套層數(shù)沒有限制,其中二重循環(huán)應(yīng)用最為普遍,其次是三重循環(huán)。4.11嵌套循環(huán)程序設(shè)計8/7/202352華中科技大學(xué)計算機學(xué)院 嵌套循環(huán)指循環(huán)體是一個循環(huán)語句,或循環(huán)體包含循環(huán)語句。4. 例4.31:計算s=11+22+33+...+nn,n由終端輸入。 分析:設(shè)每一項的底用整型變量i表示,i從1開始每次增1直至n??紤]到溢出,ii及各項之和分別用長整型變量term和s表示。計算term是用循環(huán)對同一個i累乘i次;計算s也是用循環(huán)對每個term累加n次,而且計算term的循環(huán)是嵌套在計算s的循環(huán)體內(nèi)的,所以計算s的算法是一個二重循環(huán)語句。外層循環(huán)(簡稱外循環(huán))控制項數(shù),內(nèi)層循環(huán)(簡稱內(nèi)循環(huán))控制每項i的累乘次數(shù)。4.11嵌套循環(huán)程序設(shè)計(續(xù))8/7/202353華中科技大學(xué)計算機學(xué)院 例4.31:計算s=11+22+33+...+nn,n由終 例4.31:程序4.31的流程圖。
例4.31源程序代碼ex4.31.c。4.11嵌套循環(huán)程序設(shè)計(續(xù))8/7/202354華中科技大學(xué)計算機學(xué)院 例4.31:程序4.31的流程圖。4.11
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東育嬰師試題及答案
- 企業(yè)管理規(guī)定試題及答案
- 2024年紡織設(shè)計師行業(yè)調(diào)查試題及答案
- 廣告設(shè)計師考試色彩心理研究試題及答案
- 廣告設(shè)計與內(nèi)容營銷試題及答案
- 2024年與設(shè)計相關(guān)的行業(yè)動態(tài)國際商業(yè)美術(shù)設(shè)計師考試試題及答案
- 買豆?jié){的孩子試題及答案
- 2024年廣告設(shè)計師的復(fù)習(xí)新方法試題及答案
- 廣告設(shè)計中的轉(zhuǎn)化率提升策略試題及答案
- 科學(xué)編制考試試題及答案
- 人教版美術(shù)一年級下冊《走進舊時光》課件
- 2025-2030中國棒棒糖行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 不同來源硫酸軟骨素的化學(xué)結(jié)構(gòu)、抗氧化與降脂活性對比
- 天津東疆綜合保稅區(qū)管理委員會招聘筆試題庫2025
- 廣東省2024-2025學(xué)年佛山市普通高中教學(xué)質(zhì)量檢測英語試卷及答案(二)高三試卷(佛山二模)
- 江蘇省南京市江寧區(qū)2024-2025學(xué)年統(tǒng)編版二年級下冊期中考試語文試卷(含答案)
- 鐵路調(diào)車綜合實訓(xùn)鐵鞋的使用和注意事項課件
- 高端定制店面管理制度
- 多模態(tài)自適應(yīng)技術(shù)應(yīng)用于鋼材表面缺陷檢測的研究與分析
- 無人機配送技術(shù)發(fā)展-全面剖析
- 人工智能設(shè)計倫理(浙江大學(xué))知到智慧樹章節(jié)答案
評論
0/150
提交評論