版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語(yǔ)言程序設(shè)計(jì)湖北民族學(xué)院信息工程學(xué)院張zhang_hbmy@第3章程序的控制結(jié)構(gòu)3.1算法與語(yǔ)句
3.1.1算法及其特征一個(gè)程序包括以下兩方面的內(nèi)容:(1)數(shù)據(jù)的描述和組織形式。在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)。(2)對(duì)操作的描述,即操作步驟,也就是算法。瑞士計(jì)算機(jī)科學(xué)家N?沃思(NikiklausWirth)教授提出了程序定義的著名公式:程序=數(shù)據(jù)結(jié)構(gòu)+算法
程序設(shè)計(jì)需解決兩個(gè)問(wèn)題:程序按什么順序或步驟執(zhí)行——算法使用什么語(yǔ)句實(shí)現(xiàn)1.算法的概念計(jì)算機(jī)解決問(wèn)題的方法和步驟就是計(jì)算機(jī)算法,即算法是對(duì)某一特定問(wèn)題的求解步驟的一種描述。2.算法的特性1)有窮性:一個(gè)算法必須保證執(zhí)行有限步之后結(jié)束;2)確定性:算法的每一個(gè)步驟必須具有確切的定義;3)有效性:算法的每一步都必須是計(jì)算機(jī)能進(jìn)行的有效操作;4)輸入:一個(gè)算法有零個(gè)或多個(gè)輸入;5)輸出:一個(gè)算法有一個(gè)或多個(gè)輸出。3.1算法與語(yǔ)句
3.1算法與語(yǔ)句
3.1.2算法和程序結(jié)構(gòu)
算法含有兩大組成要素:1.操作
C語(yǔ)言所描述的操作主要包括算術(shù)運(yùn)算、邏輯運(yùn)算、關(guān)系運(yùn)算、函數(shù)運(yùn)算、位運(yùn)算和I/O操作等。2.控制結(jié)構(gòu)控制結(jié)構(gòu)控制算法所描述的各種操作的執(zhí)行順序。順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)算法設(shè)計(jì)中,由三種基本結(jié)構(gòu)可組成任何復(fù)雜結(jié)構(gòu)的算法。3.1.3算法的描述自然語(yǔ)言描述傳統(tǒng)流程圖描述用N-S圖描述偽代碼描述3.1算法與語(yǔ)句
1.用自然語(yǔ)言描述算法例:用自然語(yǔ)言描述算法求5?。?)原始方法:①:求1×2,得到結(jié)果2;②:將①中的結(jié)果乘以3,得到新的結(jié)果6;③:將②中的結(jié)果乘以4,又得到新的結(jié)果24;④:將③中的結(jié)果乘以5,得到最后的結(jié)果120。(2)改進(jìn)方法①:定義整型變量facto,初始值置為1;②:定義整型變量i,初始值置為2;③:使facto×i,將乘積賦值給變量facto;④:使i+1,將結(jié)果賦值給i;⑤:判斷i的值是否小于或等于5,如果是,返回③并重復(fù)③④,否則輸出facto的值。1.用自然語(yǔ)言描述算法2.用傳統(tǒng)流程圖描述算法流程圖是對(duì)給定算法的一種圖形解法。也稱框圖,用規(guī)定的一系列圖形、流程線及文字說(shuō)明表示算法。具體例子見(jiàn)教材用傳統(tǒng)流程圖表示求5!的算法FTfac=fac*ii<=5?開(kāi)始結(jié)束fac=1;i=2;i=i+13.用N-S圖描述算法N-S圖也是一種流程圖形式,它摒棄了流程線,算法描述在一個(gè)矩形框內(nèi)。
例:用N-S圖描述求5!的算法fac=1直到i>5fac=fac×ii=i+1
輸出faci=24.用偽代碼描述算法Begin(算法開(kāi)始)fac=1i=2whilei<=5{fac=fac*1i=i+1}printfacEnd(算法結(jié)束)例:用偽代碼描述求5!的算法書(shū)本例子錯(cuò)誤!語(yǔ)句說(shuō)明語(yǔ)句表達(dá)式語(yǔ)句空語(yǔ)句控制語(yǔ)句復(fù)合語(yǔ)句條件控制語(yǔ)句跳轉(zhuǎn)控制語(yǔ)句循環(huán)控制語(yǔ)句3.1.4C語(yǔ)言的語(yǔ)句分類1.說(shuō)明語(yǔ)句
說(shuō)明語(yǔ)句是對(duì)變量或被調(diào)函數(shù)的聲明,不產(chǎn)生機(jī)器指令,其作用是描述程序中被處理數(shù)據(jù)(變量或函數(shù))的名稱和類型,供編譯程序使用。說(shuō)明語(yǔ)句可以出現(xiàn)在程序中任何塊(即函數(shù)或復(fù)合語(yǔ)句)的外面(稱為外部說(shuō)明)或塊中(稱為局部說(shuō)明)。例:inta;/*定義變量a為整型*/floatz; /*定義變量z為浮點(diǎn)型*/floatadd(floatx,floaty);/*函數(shù)的聲明*/3.1.4C語(yǔ)言的語(yǔ)句分類2.表達(dá)式語(yǔ)句
一般形式:表達(dá)式;例:x=10后面無(wú)分號(hào),是賦值表達(dá)式,但不是語(yǔ)句x=10;后面有分號(hào),是賦值語(yǔ)句3.1.4C語(yǔ)言的語(yǔ)句分類3.控制語(yǔ)句控制語(yǔ)句用于控制程序的執(zhí)行流程,實(shí)現(xiàn)各種控制結(jié)構(gòu)。C語(yǔ)言提供9種控制語(yǔ)句,可劃分為三類。見(jiàn)教材。3.1.4C語(yǔ)言的語(yǔ)句分類4.復(fù)合語(yǔ)句把多條語(yǔ)句用一對(duì)花括號(hào){}組成的一個(gè)語(yǔ)句稱為復(fù)合語(yǔ)句。例:{intx,a=3,b=5;x=a;a=b;b=x;}注意:
“}”后不加分號(hào);復(fù)合語(yǔ)句在語(yǔ)法上等價(jià)于一個(gè)語(yǔ)句。3.1.4C語(yǔ)言的語(yǔ)句分類5.空語(yǔ)句一般形式為:;
它在語(yǔ)法上占有一個(gè)簡(jiǎn)單語(yǔ)句的位置,執(zhí)行該語(yǔ)句不做任何操作??照Z(yǔ)句常用于循環(huán)語(yǔ)句中,構(gòu)成空循環(huán)。3.1.4C語(yǔ)言的語(yǔ)句分類C語(yǔ)言程序設(shè)計(jì)湖北民族學(xué)院信息工程學(xué)院張zhang_hbmy@1.數(shù)據(jù)類型轉(zhuǎn)換:自動(dòng)轉(zhuǎn)換、賦值轉(zhuǎn)換、強(qiáng)制轉(zhuǎn)換2.算法的概念:對(duì)操作的描述,即操作步驟3.算法的描述方法:自然語(yǔ)言、流程圖、N-S圖以及偽代碼4.C語(yǔ)言語(yǔ)句分類:說(shuō)明、表達(dá)式、控制、復(fù)合以及空語(yǔ)句習(xí)題2中錯(cuò)誤修正以及第三大題第四大題講解上一堂課知識(shí)點(diǎn)回顧例a&&b例a||b例a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d)短路特性:邏輯表達(dá)式求解時(shí),并非所有的邏輯運(yùn)算符都被執(zhí)行,只是在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出表達(dá)式的解時(shí),才執(zhí)行該運(yùn)算符2.3運(yùn)算符與表達(dá)式//只在a為真時(shí),才判別b的值;//只在a為假時(shí),才判別b的值;//結(jié)果m=0,n=12.3.4邏輯運(yùn)算符和表達(dá)式(4)第3章程序的控制結(jié)構(gòu)3.2數(shù)據(jù)的輸入與輸出
C語(yǔ)言無(wú)I/O語(yǔ)句,I/O操作由庫(kù)函數(shù)實(shí)現(xiàn)#include<stdio.h>本節(jié)介紹用于鍵盤(pán)輸入和顯示器輸出的庫(kù)函數(shù)一、字符的輸入與輸出函數(shù)
1.字符輸出函數(shù)putchar()
調(diào)用格式:
putchar(參數(shù));
功能:在顯示器上輸出單個(gè)字符
參數(shù):可以是字符常量、字符型變量或整型變量,即將一個(gè)整型數(shù)作為ASCII編碼輸出相應(yīng)的字符。
返回值:輸出成功返回輸出字符的ASCII碼值;出錯(cuò),為EOF(-1)【例】輸出單個(gè)字符。
#include<stdio.h>main(){inti=97;charch='a';putchar(i);putchar('\n'); putchar(ch); }程序運(yùn)行結(jié)果為:aa一、字符的輸入與輸出函數(shù)2.字符輸入函數(shù)getchar()
調(diào)用格式:getchar();
功能:從鍵盤(pán)上讀入一個(gè)字符。
返值:若讀入成功,返回讀入字符的ASCII碼值;
出錯(cuò),返回EOF(-1)通常把讀入的字符賦予一個(gè)字符變量,構(gòu)成賦值語(yǔ)句。例:
charc;c=getchar();一、字符的輸入與輸出函數(shù)【例3.2】輸入單個(gè)字符。
#include<stdio.h> main() {intch; ch=getchar(); putchar(ch); }程序運(yùn)行結(jié)果如下:
a↙a執(zhí)行g(shù)etchar()時(shí)輸入字符以回車(chē)結(jié)束輸入。
一、字符的輸入與輸出函數(shù)二、格式化輸入/輸出函數(shù)
1.格式輸出函數(shù)printf()
調(diào)用格式:printf(“格式控制字符串”,輸出項(xiàng)列表)
功能:按格式控制字符串指定格式,向顯示器輸出所列出的輸出項(xiàng)
返回值:若輸出成功,返回輸出字節(jié)數(shù);出錯(cuò),返回EOF(-1)
printf(“a=%4d,b=%4d”,a,b);格式控制字符串輸出項(xiàng)表列1.格式輸出函數(shù)printf()格式控制字符串格式說(shuō)明:用于指定輸出格式,由“%”、格式控制字符、附加格式修飾符組成。普通字符或轉(zhuǎn)義序列:原樣輸出輸出項(xiàng)表列:要輸出的數(shù)據(jù),可以沒(méi)有,多個(gè)時(shí)以“,”分隔。輸出項(xiàng)的個(gè)數(shù)必須與格式說(shuō)明的個(gè)數(shù)一致,位置一一對(duì)應(yīng)。printf(“a=%4d,b=%4d”,a,b);格式控制字符串輸出項(xiàng)表列1.格式輸出函數(shù)printf()格式說(shuō)明:
%[flags][width][.prec][F|N|H|L]type
標(biāo)志輸出最小寬度精度長(zhǎng)度類型(1)type類型表示格式控制字符,用來(lái)說(shuō)明對(duì)應(yīng)輸出項(xiàng)的輸出格式d以帶符號(hào)的十進(jìn)制形式輸出整數(shù)(正數(shù)不輸出符號(hào))o以8進(jìn)制無(wú)符號(hào)形式輸出整數(shù)(不輸出前導(dǎo)符O)x(X)以16進(jìn)制無(wú)符號(hào)形式輸出整數(shù)(不輸出前導(dǎo)符Ox)u以無(wú)符號(hào)10進(jìn)制形式輸出整數(shù)c以字符形式輸出一個(gè)字符s輸出字符串f以小數(shù)形式輸出單、雙精度數(shù),默認(rèn)輸出6位小數(shù)e(E)以標(biāo)準(zhǔn)指數(shù)形式輸出單、雙精度數(shù),小數(shù)位數(shù)為6位g(G)選用%f或%e格式中輸出寬度較短的一種格式1.格式輸出函數(shù)printf()格式說(shuō)明:
%[flags][width][.prec][F|N|H|L]type
標(biāo)志輸出最小寬度精度長(zhǎng)度類型(2)附加格式修飾符:可根據(jù)輸出格式要求進(jìn)行取舍。
Flags標(biāo)志字符常用的:
-:為左對(duì)齊,系統(tǒng)默認(rèn)右對(duì)齊
+:正數(shù)輸出+,負(fù)數(shù)輸出-
空格:正數(shù)輸出空格,負(fù)數(shù)輸出-Width寬度指示符:用十進(jìn)制數(shù)來(lái)設(shè)置輸出值的最少輸出個(gè)數(shù),少則補(bǔ)空格,多則按實(shí)際輸出,缺省則按實(shí)際輸出。.prec精度指示符:用小數(shù)點(diǎn)加十進(jìn)制正整數(shù)構(gòu)成,用來(lái)限制輸出數(shù)的精度,對(duì)于實(shí)數(shù),指定輸出的小數(shù)位數(shù)(四舍五入)。[F|N|h|L]長(zhǎng)度修飾符:見(jiàn)教材例inta=1234;floatf=123.456;charch=‘a(chǎn)’;printf(“%8d,%2d\n”,a,a);printf(“%f,%8f,%8.1f,%.2f,%.2e\n”,f,f,f,f,f);printf(“%3c\n”,ch);運(yùn)行1234,1234結(jié)果:123.456000,123.456000,123.5,123.46,1.23e+2
a1.格式輸出函數(shù)printf()2.格式化輸入函數(shù)scanf()調(diào)用格式:scanf("格式控制字符串",地址表列)功能:按格式控制字符串指定的格式,從鍵盤(pán)讀入數(shù)據(jù),并存入地址表指定的內(nèi)存單元。返回值:返回輸入數(shù)據(jù)個(gè)數(shù)例:scanf(“%d,%d,%f”,&a,&b,&c);地址表列:由一個(gè)或多個(gè)地址組成,若有多個(gè)以逗號(hào)隔開(kāi)。常用取地址運(yùn)算符&得到變量地址。格式控制字符串:
格式說(shuō)明:說(shuō)明需輸入數(shù)據(jù)的類型。普通字符:輸入數(shù)據(jù)時(shí)要原樣輸入。二、格式化輸入/輸出函數(shù)格式說(shuō)明:%[*][width][F|N][h|L]typeType類型:是必須的,表示需輸入數(shù)據(jù)的類型。d(D)十進(jìn)制整數(shù)o(O)八進(jìn)制整數(shù)x(X)十六進(jìn)制整數(shù)i(I)自動(dòng)根據(jù)數(shù)頭分辨十、八、十六進(jìn)制u(U)無(wú)符號(hào)十進(jìn)制整數(shù)c單個(gè)字符s字符串f(e,g,G)實(shí)數(shù)n不輸入數(shù)據(jù),將已讀入的字符輸送到對(duì)應(yīng)的地址中%百分號(hào)2.格式化輸入函數(shù)scanf()格式說(shuō)明:
%[*][width][F|N][h|L]type*輸入賦值抑制字符:輸入數(shù)據(jù)但不賦給對(duì)應(yīng)變量,跳過(guò)該輸入。width寬度指示符:表示最多可輸入的字符個(gè)數(shù)。F|N地址大小修飾符:FfarNnearh|L輸入數(shù)據(jù)類型:h短整型,l長(zhǎng)整或雙精度2.格式化輸入函數(shù)scanf()例:scanf("%d%*d%d",&a,&b);輸入:567時(shí)把5賦予a,6被跳過(guò),7賦予b。2.格式化輸入函數(shù)scanf()說(shuō)明:(1)scanf()的格式控制字符串中的普通字符必須原樣輸入。例:scanf(“x=%d”,&x);(2)輸入分隔符的指定一般以空格、TAB或回車(chē)鍵作為分隔符其它字符做分隔符:格式串中兩個(gè)格式符間字符(3)scanf函數(shù)中沒(méi)有精度控制,如:scanf(“%5.2f”,&a);是非法的。例scanf(“%d,%d,%d”,&a,&b,&c);
輸入12,24,362.格式化輸入函數(shù)scanf()例scanf(“%d%d%d”,&a,&b,&c);
輸入122436例:輸入圓的半徑,輸出圓的周長(zhǎng)和面積。分析:1.定義實(shí)型變量r、c、s用于存放半徑、周長(zhǎng)、面積;2.調(diào)用輸入函數(shù),輸入r:3.分別利用周長(zhǎng)公式和面積公式求出c、s;4.調(diào)用輸出函數(shù)輸出c、s。3.2基本輸入/輸出函數(shù)#include<stdio.h>voidmain(){floatr,c,s;
scanf(“%f”,&r);/*輸入一個(gè)浮點(diǎn)數(shù)據(jù),存入地址&r*/c=2*3.14159*r;/*計(jì)算周長(zhǎng),賦值給c*/s=3.14159*r*r;/*計(jì)算面積,賦值給s*/printf(“\nc=%8.4f”,c);/*周長(zhǎng)占8個(gè)字符寬,4位小數(shù)*/printf(“\ns=%8.4f”,s);
/*輸出面積,數(shù)據(jù)共占8個(gè)字符寬,4位小數(shù)*/}3.2基本輸入/輸出函數(shù)C語(yǔ)言程序設(shè)計(jì)湖北民族學(xué)院信息工程學(xué)院張zhang_hbmy@分析:1.輸入小寫(xiě)字母存入變量a;2.轉(zhuǎn)換成大寫(xiě)a=a-32;3.輸出a。例:從鍵盤(pán)輸入一個(gè)小寫(xiě)字母,用大寫(xiě)形式輸出該字母。3.2基本輸入/輸出函數(shù)#include<stdio.h>main(){chara;printf("Inputalowercaseletter:");a=getchar();a=a-32;/*將大寫(xiě)字母轉(zhuǎn)換成對(duì)應(yīng)的小寫(xiě)字母*/printf("%c\n",a);}
思考:如何使程序可以處理任何字符的輸入。即判斷輸入的是小寫(xiě)字母,才轉(zhuǎn)換成大寫(xiě);如果輸入的其他字符,則直接輸出。
3.2基本輸入/輸出函數(shù)結(jié)構(gòu)化程序設(shè)計(jì)基本思想:任何程序都可以用三種基本結(jié)構(gòu)表示,限制使用無(wú)條件轉(zhuǎn)移語(yǔ)句(goto)結(jié)構(gòu)化程序:由三種基本結(jié)構(gòu)反復(fù)嵌套構(gòu)成的程序優(yōu)點(diǎn):結(jié)構(gòu)清晰,易讀,提高程序設(shè)計(jì)質(zhì)量和效率三種基本結(jié)構(gòu)結(jié)構(gòu)化程序的三種基本結(jié)構(gòu)順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)3.3順序結(jié)構(gòu)特點(diǎn):程序按照語(yǔ)句編排的先后順序依次執(zhí)行有點(diǎn):程序簡(jiǎn)單明了,按順序執(zhí)行缺點(diǎn):功能有限,很難處理復(fù)雜問(wèn)題教材例題prog03_08.cAB●●ab二分支選擇結(jié)構(gòu)多分支選擇結(jié)構(gòu)特點(diǎn):通過(guò)對(duì)某個(gè)給定條件的判斷,自動(dòng)選擇要執(zhí)行的語(yǔ)句PAB真假●●baA1A2AiAnk=k2k=k1k=knk=ki......●ab●3.4選擇結(jié)構(gòu)例如分段函數(shù)分析:首先判斷x,如果x<0,則y=3-x;否則,y=2*x;需要根據(jù)x的值進(jìn)行流程選擇(分支)3.4選擇結(jié)構(gòu)
C語(yǔ)言的選擇語(yǔ)句有兩種:if語(yǔ)句、switch語(yǔ)句main(){floatx,y;scanf(“%f”,&x);y=2*x;if(x<0)y=3-x;printf(“y=%6.2f”,y);}1.(單分支選擇結(jié)構(gòu)):格式:if(表達(dá)式)語(yǔ)句執(zhí)行過(guò)程:表達(dá)式語(yǔ)句真假表達(dá)式語(yǔ)句1語(yǔ)句2真假2.(雙分支選擇結(jié)構(gòu)):格式:if(表達(dá)式)
語(yǔ)句1else
語(yǔ)句2執(zhí)行過(guò)程:3.4.1
if語(yǔ)句main(){floatx,y;scanf(“%f”,&x);
if(x<0)y=3-x;
elsey=2*x;printf(“y=%6.2f”,y);}main(){floatx,y;scanf(“%f”,&x);y=2*x;
if(x<0)y=3-x;printf(“y=%6.2f”,y);}3.4選擇結(jié)構(gòu)例:輸入兩個(gè)數(shù),比較其大小,將較大的數(shù)輸出。算法分析:(1)輸入兩個(gè)數(shù)據(jù)a,b;(2)如果a>b則輸出a;否則,輸出b。#include<stdio.h>main(){floata,b;scanf(“%f,%f”,&a,&b);if(a>b)printf(“%f”,a);elseprintf(“%f”,b);}3.4選擇結(jié)構(gòu)表達(dá)式1語(yǔ)句1真假表達(dá)式2表達(dá)式3語(yǔ)句n語(yǔ)句3語(yǔ)句2真真假假3.(多分支選擇結(jié)構(gòu)):格式:
if(表達(dá)式1)
語(yǔ)句1
elseif(表達(dá)式2)
語(yǔ)句2elseif(表達(dá)式3)
語(yǔ)句3…...else
語(yǔ)句n
執(zhí)行過(guò)程:例:if(salary>1000)index=0.4;elseif(salary>800)index=0.3;elseif(salary>600)index=0.2;elseif(salary>400)index=0.1;elseindex=0;
3.4選擇結(jié)構(gòu)if語(yǔ)句中的表達(dá)式一般為關(guān)系或邏輯表達(dá)式,也可以為任何數(shù)值類型的表達(dá)式。執(zhí)行語(yǔ)句可以是一條簡(jiǎn)單語(yǔ)句、空語(yǔ)句或復(fù)合語(yǔ)句,也可以嵌套其它流程控制語(yǔ)句。
if(x)if(x!=0)if(!x)if(x==0)例考慮下面程序的輸出結(jié)果:#include<stdio.h>main(){intx,y;scanf(“%d,%d”,&x,&y);if(x>y)x=y;y=x;elsex++;y++;printf(“%d,%d\n”,x,y);}CompileError!3.4選擇結(jié)構(gòu)3.4.2if語(yǔ)句的嵌套當(dāng)if語(yǔ)句中的執(zhí)行語(yǔ)句又是if語(yǔ)句時(shí),則構(gòu)成了if語(yǔ)句嵌套的情形。例如:if(表達(dá)式1)if(表達(dá)式2)
語(yǔ)句1;if(表達(dá)式1)if(表達(dá)式2)
語(yǔ)句1;else
語(yǔ)句2;3.4選擇結(jié)構(gòu)#include<stdio.h>main(){intx,y;printf("Enterintegerx,y:");scanf("%d,%d",&x,&y);if(x!=y)if(x>y)printf("X>Y\n");elseprintf("X<Y\n");
elseprintf("X==Y\n");}運(yùn)行:Enterintegerx,y:12,23X<YEnterintegerx,y:12,6X>YEnterintegerx,y:12,12X==Y例
:輸入兩整數(shù)并判斷其大小關(guān)系3.4選擇結(jié)構(gòu)缺省{}時(shí),else總是和它上面離它最近的未配對(duì)的if配對(duì)if(……)if(……)if(……)else…...else…...else…...if~else配對(duì)原則:3.4選擇結(jié)構(gòu)例:if(a==b)if(b==c)printf(“a==b==c”);elseprintf(“a!=b”);修改:if(a==b){if(b==c)printf(“a==b==c”);}elseprintf(“a!=b”);實(shí)現(xiàn)if~else正確配對(duì)方法:加{}3.4選擇結(jié)構(gòu)例考慮下面程序輸出結(jié)果:main(){intx=100,a=10,b=20;intv1=5,v2=0;if(a<b)if(b!=15)if(!v1)x=1;elseif(v2)x=10;x=-1;printf(“%d”,x);}結(jié)果:-13.4選擇結(jié)構(gòu)一般形式:switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句組1;
[break;]case常量表達(dá)式2:語(yǔ)句組2;
[break;]…….case常量表達(dá)式n:語(yǔ)句組n;
[break;][default:語(yǔ)句組n+1;]}執(zhí)行過(guò)程:switch表達(dá)式語(yǔ)句組1語(yǔ)句組2語(yǔ)句組n語(yǔ)句組…...E1E2Endefaultcase3.4.3switch…case語(yǔ)句說(shuō)明:語(yǔ)句中的表達(dá)式可以是數(shù)字型或字符型,表達(dá)式的值,稱為開(kāi)關(guān)值語(yǔ)句結(jié)構(gòu)中各個(gè)case后常量表達(dá)式的值必須互不相同;否則執(zhí)行時(shí)將出現(xiàn)矛盾,即同一個(gè)開(kāi)關(guān)值,對(duì)應(yīng)多種執(zhí)行方案當(dāng)表達(dá)式的值與某一個(gè)常量相等時(shí),就執(zhí)行后面的語(yǔ)句;若無(wú)break語(yǔ)句,執(zhí)行該語(yǔ)句后,流程控制轉(zhuǎn)移到下一個(gè)分支:繼續(xù)執(zhí)行這一個(gè)分支的語(yǔ)句,一至到最后一個(gè)語(yǔ)句執(zhí)行完當(dāng)表達(dá)式的值與所有常量表達(dá)式的值不相等時(shí),執(zhí)行default:后面的語(yǔ)句case后可包含多個(gè)可執(zhí)行語(yǔ)句,且不必加{}多個(gè)case可共用一組執(zhí)行語(yǔ)句switch可嵌套如:……case‘A’:case‘B’:case‘C’:printf(“score>60\n”);break;……..3.4.3switch…case語(yǔ)句switch(grade){case‘A’:printf(“85~100\n”);case‘B’:printf(“70~84\n”);case‘C’:printf(“60~69\n”);case‘D’:printf(“<60\n”);default:printf(“error\n”);}運(yùn)行結(jié)果:若grade為A則輸出:85~10070~8460~69<60error3.4.3switch…case語(yǔ)句例:按照考試成績(jī)的等級(jí)打印出百分制分?jǐn)?shù)段,可以用switch語(yǔ)句實(shí)現(xiàn)例:按照考試成績(jī)的等級(jí)打印出百分制分?jǐn)?shù)段,可以用switch語(yǔ)句實(shí)現(xiàn)3.4.3switch…case語(yǔ)句switch(grade){case‘A’:printf(“85~100\n”);break;case‘B’:printf(“70~84\n”);break;case‘C’:printf(“60~69\n”);break;case‘D’:printf(“<60\n”);break;default:printf(“error\n”);}運(yùn)行結(jié)果:若grade為A則輸出:85~100運(yùn)行結(jié)果:若grade為E則輸出:error例voidmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“\na=%d,b=%d”,a,b);}運(yùn)行結(jié)果:a=2,b=13.4.3switch…case語(yǔ)句例,根據(jù)輸入的學(xué)生百分制成績(jī)判斷等級(jí)并輸出。3.4.3switch…case語(yǔ)句score0——5960——6970——7980——8990——100score/10score/100,1,2,3,4,56789,10default使用switch解題的關(guān)鍵是通過(guò)分析找到表達(dá)式然后將問(wèn)題分幾種情況3.4.3switch…case語(yǔ)句case4:case5:y='E';break;case6:y='D';break;case7:y='C';break;case8:y='B';break;case9:case10:y='A';break;default:y='';}if(y=='')printf("Scoreerror!");elseprintf("Grade=%c",y);}#include<stdio.h>main(){intx;chary;printf("\nx:");scanf("%d",&x);switch(x/10){case0:case1:case2:case3:3.4.3switch…case語(yǔ)句switch和else-if的比較else-if比switch的條件控制更強(qiáng)大一些else-if可以依照各種邏輯運(yùn)算的結(jié)果進(jìn)行流程控制switch只能進(jìn)行==判斷,并且只能是整數(shù)判斷switch比else-if更清晰兩者都要盡量避免用得過(guò)多、過(guò)長(zhǎng),尤其不要嵌套得太多,它們大大增加程序的分支,使邏輯關(guān)系顯得混亂,不易維護(hù),易出錯(cuò)3.4.3switch…case語(yǔ)句C語(yǔ)言程序設(shè)計(jì)湖北民族學(xué)院信息工程學(xué)院張zhang_hbmy@當(dāng)型循環(huán)結(jié)構(gòu)直到型循環(huán)結(jié)構(gòu)PA假真●●baAP假真b●●a循環(huán)結(jié)構(gòu)3.5循環(huán)結(jié)構(gòu)
C語(yǔ)言有while、do-while、和for語(yǔ)句三種循環(huán)結(jié)構(gòu)語(yǔ)句。前兩個(gè)稱為條件循環(huán),即根據(jù)條件來(lái)決定是否繼續(xù)循環(huán);后一個(gè)稱為計(jì)數(shù)循環(huán),即根據(jù)設(shè)定的執(zhí)行次數(shù)來(lái)執(zhí)行循環(huán)。3.5循環(huán)結(jié)構(gòu)一般形式:while(表達(dá)式)
循環(huán)體語(yǔ)句;執(zhí)行流程:表達(dá)式循環(huán)體假(0)真(非0)while3.5.1
while語(yǔ)句3.5循環(huán)結(jié)構(gòu)特點(diǎn):先判斷表達(dá)式,后執(zhí)行循環(huán)體說(shuō)明:如果表達(dá)式的值一開(kāi)始就為0,則循環(huán)體一次也不執(zhí)行循環(huán)體可為任意類型語(yǔ)句循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語(yǔ)句While語(yǔ)句特點(diǎn)和說(shuō)明3.5循環(huán)結(jié)構(gòu)用while循環(huán)求1至100的和.3.5循環(huán)結(jié)構(gòu)解決“累加”類型問(wèn)題基本方法:
兩個(gè)變量:累加和,當(dāng)前項(xiàng)(1)先給累加和賦初值(一般為0);(2)用循環(huán)語(yǔ)句實(shí)現(xiàn)累加;(3)循環(huán)體語(yǔ)句的設(shè)計(jì):累加和當(dāng)前值=累加和原值+當(dāng)前項(xiàng);例:用while循環(huán)求1至100的和#include<stdio.h>main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}循環(huán)初值循環(huán)終值循環(huán)變量增值循環(huán)條件循環(huán)體3.5循環(huán)結(jié)構(gòu)#include<stdio.h>main(){inti=1;while(i<=10){printf("%d*%d=%d\n",i,i,i*i);i++;}}運(yùn)行結(jié)果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100例輸出1~10的平方3.5循環(huán)結(jié)構(gòu)一般形式:do
循環(huán)體語(yǔ)句;
while(表達(dá)式);執(zhí)行流程:do循環(huán)體表達(dá)式假(0)真(非0)while3.5.2
do-while語(yǔ)句3.5循環(huán)結(jié)構(gòu)特點(diǎn):先執(zhí)行循環(huán)體,后判斷表達(dá)式說(shuō)明:至少執(zhí)行一次循環(huán)體do~while可轉(zhuǎn)化成while結(jié)構(gòu)表達(dá)式循環(huán)體假(0)真(非0)循環(huán)體While循環(huán)do~while語(yǔ)句特點(diǎn)和說(shuō)明3.5循環(huán)結(jié)構(gòu)例:用do-while循環(huán)求1至100的和。#include<stdio.h>main(){inti,sum=0;i=1;
do{sum=sum+i;i++;}while(i<=100)printf("%d",sum);}#include<stdio.h>main(){inti,sum=0;i=1;
while(i<=100){sum=sum+i;i++;}printf("%d",sum);}
運(yùn)行結(jié)果:5050
運(yùn)行結(jié)果:50503.5循環(huán)結(jié)構(gòu)一般形式:for([表達(dá)式1];[
表達(dá)式2];[
表達(dá)式3])
循環(huán)體語(yǔ)句;執(zhí)行流程:3.5.3
for語(yǔ)句表達(dá)式2循環(huán)體假(0)真(非0)for表達(dá)式1表達(dá)式33.5循環(huán)結(jié)構(gòu)for語(yǔ)句一般應(yīng)用形式:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值){
循環(huán)體語(yǔ)句;}例:用for循環(huán)求1至100的和。#include<stdio.h>main(){inti,sum=0;for(i=1;i<=100;i++)sum=sum+i;printf("%d",sum);}3.5循環(huán)結(jié)構(gòu)for語(yǔ)句中表達(dá)式1;表達(dá)式2
;表達(dá)式3
類型任意,都可省略,但分號(hào);不可省。(1)省略了“表達(dá)式1(循環(huán)變量賦初值)”,表示不對(duì)循環(huán)控制變量賦初值(2)省略了“表達(dá)式2(循環(huán)條件)”,則不做其它處理時(shí)便成為死循環(huán)(3)省略了“表達(dá)式3(循環(huán)變量增量)”,則不對(duì)循環(huán)控制變量進(jìn)行操作,這時(shí)可在語(yǔ)句體中加入修改循環(huán)控制變量的語(yǔ)句for語(yǔ)句說(shuō)明3.5循環(huán)結(jié)構(gòu)逗號(hào)表達(dá)式
逗號(hào)運(yùn)算符的主要應(yīng)用就在for語(yǔ)句中。for語(yǔ)句中的表達(dá)式1和表達(dá)式3可以是逗號(hào)表達(dá)式,特別是有兩個(gè)循環(huán)變量參與對(duì)循環(huán)的控制時(shí)。表達(dá)式1和表達(dá)式3為逗號(hào)表達(dá)式,將使程序顯得非常清晰。
例:for(i=1,j=10;i<=j;i++,j--)3.5循環(huán)結(jié)構(gòu)例:求1/100+2/99+…+50/51floats=0.0;for(i=1,j=100;i<j;i++,j--)s=s+i/j;3.5循環(huán)結(jié)構(gòu)選擇三種循環(huán)的一般思路:如果循環(huán)次數(shù)已知,用for如果循環(huán)次數(shù)未知,用while如果循環(huán)體至少要執(zhí)行一次,用do-while只是思路,不是定律3.5循環(huán)結(jié)構(gòu)在一個(gè)循環(huán)結(jié)構(gòu)中又嵌入另一個(gè)或幾個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。嵌套在內(nèi)的循環(huán)體稱為
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 自動(dòng)語(yǔ)音識(shí)別課程設(shè)計(jì)
- 阿奇霉素合成課程設(shè)計(jì)
- 2025年度特色飲品店轉(zhuǎn)讓及加盟支持合同
- 2025年度電影愛(ài)好者社團(tuán)包場(chǎng)觀影合同
- 2025年度終止醫(yī)療護(hù)理勞務(wù)合同書(shū)
- 2025年度樹(shù)木移植與養(yǎng)護(hù)服務(wù)合同范本3篇
- 二零二五年度知識(shí)產(chǎn)權(quán)侵權(quán)賠償合同(版權(quán)維權(quán))4篇
- 二零二五年度體育場(chǎng)館承建及運(yùn)動(dòng)設(shè)施裝修合同4篇
- 二零二五年房地產(chǎn)無(wú)底薪業(yè)務(wù)員傭金分成與業(yè)務(wù)拓展合同3篇
- 二零二五年度新型建筑外墻保溫材料應(yīng)用施工合同4篇
- 產(chǎn)品共同研發(fā)合作協(xié)議范本5篇
- 風(fēng)水學(xué)的基礎(chǔ)知識(shí)培訓(xùn)
- 吸入療法在呼吸康復(fù)應(yīng)用中的中國(guó)專家共識(shí)2022版
- 1-35kV電纜技術(shù)參數(shù)表
- 信息科技課程標(biāo)準(zhǔn)測(cè)(2022版)考試題庫(kù)及答案
- 施工組織設(shè)計(jì)方案針對(duì)性、完整性
- 2002版干部履歷表(貴州省)
- DL∕T 1909-2018 -48V電力通信直流電源系統(tǒng)技術(shù)規(guī)范
- 2024年服裝制版師(高級(jí))職業(yè)鑒定考試復(fù)習(xí)題庫(kù)(含答案)
- 門(mén)診部縮短就診等候時(shí)間PDCA案例-課件
評(píng)論
0/150
提交評(píng)論