結(jié)構(gòu)化程序設(shè)計(jì)_第1頁
結(jié)構(gòu)化程序設(shè)計(jì)_第2頁
結(jié)構(gòu)化程序設(shè)計(jì)_第3頁
結(jié)構(gòu)化程序設(shè)計(jì)_第4頁
結(jié)構(gòu)化程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第3章

結(jié)構(gòu)化程序設(shè)計(jì)第一節(jié)輸入輸出函數(shù)第二節(jié)順序結(jié)構(gòu)程序設(shè)計(jì)第三節(jié)選擇結(jié)構(gòu)程序設(shè)計(jì)第四節(jié)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第五節(jié)結(jié)構(gòu)化程序設(shè)計(jì)舉例1/96《C語言程序設(shè)計(jì)》

龍昭華主編課件制作:劉達(dá)一節(jié)

輸入輸出函數(shù)(第三章結(jié)構(gòu)化程序設(shè)計(jì))2/96一、標(biāo)準(zhǔn)字符數(shù)據(jù)的輸入輸出●C語言無I/O語句,I/O操作由函數(shù)實(shí)現(xiàn)●I/O操作由函數(shù)在stdio.h中定義●使用I/O操作由函數(shù)時(shí)必須使用#include<stdio.h>或#include“stdio.h”1、標(biāo)準(zhǔn)字符輸出函數(shù)

格式:putchar(c)、putch(c)

參數(shù):參數(shù)c為字符常量、字符或整型變量、表達(dá)式

功能:把字符c輸出到標(biāo)準(zhǔn)輸出設(shè)備(即顯示器)上

返回值:正常返回,為顯示字符的代碼值;若出錯(cuò),返回為EOF(即-1)說明:

①此函數(shù)只能輸出單個(gè)字符數(shù)據(jù)。②參數(shù)c可以是字符常量、轉(zhuǎn)義字符、字符變量、整型常量、整型變量。③從功能角度來看,printf()函數(shù)使用%c完全可以代替putchar()函數(shù)和putch()函數(shù)。④putchar()函數(shù)和putch()函數(shù)的功能完全一樣。課件制作:劉達(dá)3.1第一節(jié)

輸入輸出函數(shù)3/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))#include<stdio.h>main(){intc;chara;c=65;a='B';putchar(c);putchar('\n');putchar(a);}運(yùn)行結(jié)果:AB#include<stdio.h>main(){intc=65;chara=‘B’;printf(“%c\n%c”,c,a);}運(yùn)行結(jié)果:AB等價(jià)于:課件制作:劉達(dá)明023-668341102、標(biāo)準(zhǔn)字符輸入函數(shù)第一節(jié)

輸入輸出函數(shù)4/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))

格式:getchar()、getch()、getche()

功能:從標(biāo)準(zhǔn)的輸入設(shè)備(如鍵盤)讀一個(gè)字符

返回值:正常,返回讀取的字符代碼值;若出錯(cuò),返回為EOF(即-1)說明:

①getchar()函數(shù)、getch()函數(shù)、getche()函數(shù),都只能接受一個(gè)字符。②getchar()函數(shù)在輸入一個(gè)或若干個(gè)字符后,必須以回車鍵結(jié)束,否則字符不被輸入。但只有第一個(gè)字符被接受。并且在屏幕上回顯全部輸入的字符。③getch()和getche()函數(shù)在輸入一個(gè)字符后,立即被函數(shù)接受,不用回車鍵。使用getch()接受字符時(shí),屏幕上不回顯原輸入的字符。使用getche()接受字符時(shí),要顯示原輸入的字符。

④利用回顯和不回顯的特點(diǎn),getch()和getche()這兩個(gè)函數(shù)經(jīng)常用于交互輸入的過程中完成暫停等功能。

⑤從功能角度來看,scanf()函數(shù)使用%c完全可以代替getchar()、getch()和getche()函數(shù)。課件制作:劉達(dá)3.2從鍵盤輸入一小寫字母,輸出對(duì)應(yīng)的大寫字母。第一節(jié)

輸入輸出函數(shù)5/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))#include<stdio.h>voidmain(){charch;printf("Pleaseinputasmallcharacter:");ch=getchar();/*輸入1個(gè)字符并賦給ch*/ch=ch-32;putchar(ch);putchar('\n');}運(yùn)行結(jié)果:Pleaseinputasmallcharacter:ac(回車)A#include<stdio.h>voidmain(){charch;printf(“Inputasmallcharacter:");ch=getch();/*輸一字符給ch*/ch=ch-32;putchar(ch);putchar('\n');}運(yùn)行結(jié)果:Inputasmallcharacter:(輸入a)A課件制作:劉達(dá)3.3第一節(jié)

輸入輸出函數(shù)6/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))#include<stdio.h>

main()

{

charc,s[20];

printf(“Name:”);

gets(s);/*從鍵盤讀字符串(回車結(jié)束)*/

printf(“Pressanykeytocontinue...”);

getch();

/*等待輸入任一鍵確認(rèn)(不顯示)*/

}運(yùn)行結(jié)果:Name:VeryGood!(回車)Pressanykeytocontinue…#include<stdio.h>main(){intc;printf("Enteracharacter:");c=getchar();printf("%c--->hex%x\n",c,c);}運(yùn)行結(jié)果:Enteracharacter:A(回車)A--->hex41例3.4課件制作:劉達(dá)3.5第一節(jié)

輸入輸出函數(shù)7/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))#include<stdio.h>

voidmain(){charch1,ch2,ch3;printf("Pleaseinputtwocharacter:");ch1=getchar();/*輸入一個(gè)字符并賦給ch*/putchar(ch1);putchar('\n');ch2=getchar();/*輸入一個(gè)字符并輸出*/putchar(ch2);putchar('\n');ch3=getchar();printf(“%d\n”,ch3);}運(yùn)行結(jié)果:Pleasinputtwocharacter:ab(回車)ab10實(shí)際上第一個(gè)getchar()輸入了ab兩個(gè)字符,而第二個(gè)getchar()是直接讀取原輸入的第二個(gè)字符b。即將‘a(chǎn)’賦給了ch1,將‘b’賦給了ch2。ch3的值實(shí)際上是第一個(gè)getchar()所輸入的,我們不需要的“垃圾”字符。也就是說,用getchar()輸入字符時(shí),其輸入的字符個(gè)數(shù)比可見的字符多1個(gè)。課件制作:劉達(dá)3章

結(jié)構(gòu)化程序設(shè)計(jì)----習(xí)題18/96《C語言程序設(shè)計(jì)》

龍昭華主編

習(xí)題(一)***復(fù)習(xí)本章已講內(nèi)容,預(yù)習(xí)本章剩余內(nèi)容。課件制作:劉達(dá)、格式化輸出函數(shù)第一節(jié)

輸入輸出函數(shù)9/96

格式:printf(“格式控制字符串”,輸出項(xiàng)列表)

功能:按指定格式向顯示器輸出數(shù)據(jù)

返回值:正常,返回輸出字節(jié)數(shù);若出錯(cuò),返回為EOF(即-1)括號(hào)內(nèi)包括兩部分:⑴格式控制字符串。是用雙引號(hào)括起來的字符串,它包括兩種信息:①格式說明:由%和格式字符組成,它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。格式說明總是由一個(gè)%開始,以一個(gè)格式字符結(jié)束,中間可有若干個(gè)修飾符。如:%d、%f、%7d、%8.3f、%-04d、%08d、%6s、%#o、%#x等。②普通字符:按原樣輸出。如逗號(hào)、空格、換行符、提示信息等。⑵輸出列表項(xiàng)。需要輸出的一些數(shù)據(jù)(可以沒有,多個(gè)時(shí)以“,”分隔),可以是常量、變量、表達(dá)式,其類型與個(gè)數(shù)必須與格式控制字符串中格式字符的類型、個(gè)數(shù)一致。printf函數(shù)的一般形式為:printf(參數(shù)1,參數(shù)2,參數(shù)3,……,參數(shù)n)1、printf函數(shù)的一般形式(第三章結(jié)構(gòu)化程序設(shè)計(jì))課件制作:劉達(dá)明023-668341102、printf函數(shù)的格式控制字符串第一節(jié)

輸入輸出函數(shù)10/96格式字符:d,ix,Xoucse,Efg,G%%十六進(jìn)制無符號(hào)整數(shù)(無0x)不帶符號(hào)十進(jìn)制整數(shù)十進(jìn)制整數(shù)指數(shù)形式浮點(diǎn)小數(shù)單一字符字符串八進(jìn)制無符號(hào)整數(shù)(無前0)小數(shù)形式浮點(diǎn)小數(shù)(有效6位)e和f中較短一種(不輸出0)百分號(hào)本身inta=567;printf(“%d”,a);inta=255;printf(“%x”,a);inta=65;printf(“%o”,a);inta=567;printf(“%u”,a);chara=65;printf(“%c”,a);printf(“%s”,“ABC”);floata=567.789;printf(“%e”,a);floata=567.789;printf(“%f”,a);floata=567.789;printf(“%g”,a);printf(“%%”);567ff101567AABC5.677890e+02567.789000567.789%p指針的值char*p;p=“12”;printf(“%p”,p);0194(第三章結(jié)構(gòu)化程序設(shè)計(jì))課件制作:劉達(dá)3.6第一節(jié)

輸入輸出函數(shù)11/96main(){inta=3,b=4;printf(“%d%d%%\n”,a,b);printf(“a=%d,b=%d\n”,a,b);}111111111111111165535或-1例3.7

main(){unsignedintu=65535;inti=-1,j=1234;printf(“u=%d,i=%u\n”,u,i);printf(“%d,%o,%x,%X”,j,j,j,j);}運(yùn)行結(jié)果:4%a=3,b=4運(yùn)行結(jié)果:u=-1,i=655351234,2322,4d2,4D2(第三章結(jié)構(gòu)化程序設(shè)計(jì))課件制作:劉達(dá)rintf函數(shù)的修飾符(附加格式說明符)及其含義第一節(jié)

輸入輸出函數(shù)12/96.n對(duì)實(shí)數(shù),指定小數(shù)點(diǎn)后位數(shù)(四舍五入)對(duì)字符串,指定實(shí)際輸出位數(shù)修飾符功能m輸出數(shù)據(jù)域?qū)?數(shù)據(jù)長度<m,左補(bǔ)空格;否則按實(shí)際輸出輸出數(shù)據(jù)在域內(nèi)左對(duì)齊(缺省右對(duì)齊)-指定在有符號(hào)數(shù)的正數(shù)前顯示正號(hào)(+)+輸出數(shù)值時(shí)指定左面不使用的空位置自動(dòng)填00在八進(jìn)制和十六進(jìn)制數(shù)前顯示前導(dǎo)0,0x#在d,o,x,u前,指定輸出精度為long型在e,f,g前,指定輸出精度為double型l以短整型格式輸出數(shù)據(jù)h(第三章結(jié)構(gòu)化程序設(shè)計(jì))課件制作:劉達(dá)rintf函數(shù)說明:第一節(jié)

輸入輸出函數(shù)13/96

①修飾符是可選的,用于確定數(shù)據(jù)輸出的寬度、精度、小數(shù)位數(shù)、對(duì)齊方式等;用于產(chǎn)生更規(guī)范整齊的輸出。當(dāng)沒有修飾符時(shí),以上各項(xiàng)按系統(tǒng)缺省設(shè)定顯示。

②修飾符的順序?yàn)椋篬-][+][0][m.n][l|h]。

③格式字符除了E、G、X外,其余要用小寫。

④可以在printf函數(shù)中的“格式控制字符串”內(nèi)使用轉(zhuǎn)義字符,如:\n、\t、\377等。

⑤輸出轉(zhuǎn)換:當(dāng)格式字符與輸出項(xiàng)類型不一致時(shí),自動(dòng)按指定格式輸出。

⑥在實(shí)際應(yīng)用中,還可以用常量或變量的值來控制輸出數(shù)據(jù)的寬度,其方法是以一個(gè)“*”作為修飾符,插入到%之后。如:inti=123;printf(“%*d”,5,i);等價(jià)于:printf(“%5d”,i);又如:inti=123,k=5;printf(“%*d”,k,i);用k動(dòng)態(tài)指定場寬。

⑦當(dāng)指定寬度小于數(shù)據(jù)的實(shí)際寬度時(shí),對(duì)字符串或整數(shù),按該數(shù)據(jù)的實(shí)際場寬輸出;對(duì)浮點(diǎn)數(shù),整數(shù)部分按實(shí)際場寬輸出,相應(yīng)小數(shù)位的數(shù)四舍五入。

⑧對(duì)于修飾符數(shù)字0,當(dāng)格式字符為d,o,x,e,f,g時(shí),數(shù)據(jù)的前面補(bǔ)0。當(dāng)格式字符為c,s時(shí),數(shù)據(jù)的前面補(bǔ)空格(相當(dāng)于修飾符0不起作用)。若修飾符0的前面有修飾符,則修飾符0不起作用。(第三章結(jié)構(gòu)化程序設(shè)計(jì))課件制作:劉達(dá)rintf函數(shù)格式控制符的主要組合說明:第一節(jié)

輸入輸出函數(shù)14/96

①d格式符:%d、%md、%ld、%mld、%hd、%+md、%-md、%0md等。

②o格式符:%o、%lo、%ho、%mo、%#o等。

③x格式符:%x、%lx、%mx、%#x、%hx等。

④u格式符:%u、%lu、%hu等。

⑤c格式符:%c、%mc等。

⑥s格式符:%s、%ms、%-ms、%m.ns、%-m.ns、%.ns(前m自動(dòng)為n)等。

⑦f格式符:%f、%m.nf、%-m.nf、%lf等。

⑧e格式符:

%e、%m.ne、%-m.ne、%.ne(前m自動(dòng)為n)等。(第三章結(jié)構(gòu)化程序設(shè)計(jì))課件制作:劉達(dá)3.8教材p43的例3.2第一節(jié)

輸入輸出函數(shù)15/96#include<stdio.h>{inta=15;floatb=138.3576278;doublec=35648456.3645687;chard=‘p’;printf(“a=%d,%5d,%o,%x\n”,a,a,a,a);printf(“b=%f,%lf,%5.4lf,%e\n”,b,b,b,b);printf(“c=%lf,%f,%8.4lf\n”,c,c,c);printf(“b=%g,c=%g\n”,b,c);printf(“d=%c,%8c\n”,d,d);}輸出結(jié)果為:a=15,15,17,fb=138.357620,138.357620,138.3576,1.38358e+02c=35648456.364569,35648456.364569,35648456.3646b=138.358,c=3.56485e+07d=p,p(第三章結(jié)構(gòu)化程序設(shè)計(jì))課件制作:劉達(dá)、格式化輸入函數(shù)第一節(jié)

輸入輸出函數(shù)16/96

格式:scanf("格式控制字符串",輸入項(xiàng)地址表)

功能:按指定格式從鍵盤讀入數(shù)據(jù),存入地址表指定的存儲(chǔ)單元中,并按回車鍵結(jié)束

返回值:正常,返回輸入數(shù)據(jù)個(gè)數(shù);若出錯(cuò),返回為EOF(即-1)或0括號(hào)內(nèi)包括兩部分:⑴格式控制字符串。其說明同printf函數(shù)。格式控制字符串必須用雙引號(hào)括起,由格式轉(zhuǎn)換說明符和須原樣輸入的非格式字符兩部分組成。格式轉(zhuǎn)換說明符必須以百分號(hào)“%”開始,格式字符結(jié)束,中間有若干個(gè)修飾符。⑵輸入項(xiàng)地址表。是由若干個(gè)地址組成的列表,可以是變量的地址、或字符串的首地址、指針變量、數(shù)組名等。注意:地址表是需要讀入的所有變量的地址,而不是變量本身。這與printf()函數(shù)完全不同,要特別注意。各個(gè)變量的地址之間用","分開。scanf函數(shù)的一般形式為:

scanf(參數(shù)1,參數(shù)2,參數(shù)3,……,參數(shù)n)1、scanf函數(shù)的一般形式(第三章結(jié)構(gòu)化程序設(shè)計(jì))課件制作:劉達(dá)明023-668341102、scanf函數(shù)的格式控制字符串第一節(jié)

輸入輸出函數(shù)17/96格式字符:格式控制字符串的一般格式為:

%修飾符格式字符

例scanf(“%d”,&a);

輸入:10

則a=10(十進(jìn)制)例scanf(“%x”,&a);

輸入:11

則a=17(十進(jìn)制)d,ix,Xoucse,Ef用來輸入一個(gè)十六進(jìn)制整數(shù)

用來輸入一個(gè)無符號(hào)整數(shù)

以指數(shù)形式輸入一個(gè)實(shí)數(shù)

用來輸入一個(gè)字符

用來輸入一個(gè)字符串

用來輸入一個(gè)八進(jìn)制整數(shù)

用來輸入一個(gè)實(shí)數(shù)

用來輸入一個(gè)十進(jìn)制整數(shù)

g,G作用與e和f相同(第三章結(jié)構(gòu)化程序設(shè)計(jì))課件制作:劉達(dá)canf函數(shù)的修飾符(附加格式說明符)及其含義第一節(jié)

輸入輸出函數(shù)18/96l修飾符功能hm*用于d,o,x前,指定輸入為short型整數(shù)用于d,o,x前,指定輸入為long型整數(shù)用于e,f前,指定輸入為double型實(shí)數(shù)指定輸入數(shù)據(jù)寬度,遇空格或不可轉(zhuǎn)換字符則結(jié)束抑制符,指定輸入項(xiàng)讀入后不賦給變量修飾符的順序?yàn)椋篬*][m][l|h](第三章結(jié)構(gòu)化程序設(shè)計(jì))課件制作:劉達(dá)canf函數(shù)說明:第一節(jié)

輸入輸出函數(shù)19/96

⑴修飾符是可選的,用于確定數(shù)據(jù)輸出的寬度等。

⑵格式控制字符串中,可以包括格式轉(zhuǎn)換字符說明之外的其它普通字符,這些普通字符在輸入時(shí)要原樣輸入。

⑶scanf函數(shù)中沒有精度控制,但用十進(jìn)制整數(shù)指定輸入的寬度(即字符數(shù))。

⑷scanf中要求給出變量地址,即用&運(yùn)算符,如給出變量名則會(huì)出錯(cuò)。但字符串?dāng)?shù)組或字符串指針變量,由于數(shù)組名和指針變量名本身就是地址,因此使用scanf()函數(shù)時(shí),不需要在它們前面加上"&"操作符。

⑸在輸入多個(gè)數(shù)值數(shù)據(jù)時(shí),若格式控制字符串中沒有非格式字符作輸入數(shù)據(jù)之間的分隔,則可用空格、TAB鍵或回車鍵作分隔。C編譯在遇到空格、TAB鍵、達(dá)到寬度要求、回車鍵或非法數(shù)據(jù)時(shí)即認(rèn)為該數(shù)據(jù)結(jié)束。

⑹在輸入字符數(shù)據(jù)時(shí),若格式控制字符串中無非格式字符,則認(rèn)為所有輸入的字符均為有效字符。

⑺如果格式控制字符串中有非格式字符則輸入時(shí)也要輸入該非格式字符。

⑻%后的“*”修飾符用以表示該輸入項(xiàng)讀入后不賦予相應(yīng)的變量,即跳過該輸入值。

⑼用“%c”格式符時(shí),空格和轉(zhuǎn)義字符作為有效字符輸入。

⑽空白字符會(huì)使scanf()函數(shù)在讀操作中略去輸入中的一個(gè)或多個(gè)空白字符。(第三章結(jié)構(gòu)化程序設(shè)計(jì))課件制作:劉達(dá)scanf輸入函數(shù)留下的“垃圾”處理方法:第一節(jié)

輸入輸出函數(shù)20/96①用getchar()清除。②用函數(shù)fflush(stdin)清除全部剩余內(nèi)容。③用格式串中空格或“%*c”來“吃掉”。例intx;charch;scanf(“%d”,&x);scanf(“%c”,&ch);printf(“x=%d,ch=%d\n”,x,ch);執(zhí)行:123輸出:x=123,ch=10例intx;charch;scanf(“%d”,&x);ch=getchar();printf(“x=%d,ch=%d\n”,x,ch);執(zhí)行:123輸出:x=123,ch=10⑿在使用scanf函數(shù)時(shí),在格式控制字符串中不要使用‘\n’轉(zhuǎn)義字符。(第三章結(jié)構(gòu)化程序設(shè)計(jì))課件制作:劉達(dá)3.9第一節(jié)

輸入輸出函數(shù)21/96#include<stdio.h>

main()

{

charc1,c2;

scanf("%c",&c1);

scanf("%c",&c2);

printf("c1is%c,c2is%c",c1,c2);

}執(zhí)行:a(回車)輸出結(jié)果為:c1isa,c2is#include<stdio.h>

main()

{

charc1,c2;

scanf("%c",&c1);

fflush(stdin);

scanf("%c",&c2);

printf("c1is%c,c2is%c",c1,c2);

}執(zhí)行:a(回車)b(回車)輸出結(jié)果為:c1isa,c2isb(第三章結(jié)構(gòu)化程序設(shè)計(jì))課件制作:劉達(dá)二節(jié)

順序結(jié)構(gòu)程序設(shè)計(jì)(第三章結(jié)構(gòu)化程序設(shè)計(jì))22/96例3.10

輸入三角形三邊,求三角形面積。解:其中:a、b、c分別是三角形三邊的長,s=(a+b+c)/2。其算法和程序分別為:#include<stdio.h>#include<math.h>

main()

{

floata,b,c,s,area;

scanf(“a=%f,b=%f,c=%f",&a,&b,&c);

if((a>0)&&(b>0)&&(c>0)&&(a+b>c)&&(a+c>b)&&(b+c>a)){s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c));

printf(“a=%f,b=%f,c=%f\n",a,b,c);printf(“area=%7.2f\n”,area);}elseprintf(“Datainputerror!”);}/*執(zhí)行結(jié)果參見教材P49*/

輸入三角形三邊長a,b,ca+b>c且a+c>b且b+c>a且a>0且b>0且c>0

s=(a+b+c)/2

area=sqrt(s*(s-a)*(s-b)*(s-c))

打印三角形三邊長a,b,c

打印三角形面積area是否打印三角形三邊長輸入錯(cuò)誤已知三角形三邊,求三角形面積的公式為:課件制作:劉達(dá)3.11第二節(jié)

順序結(jié)構(gòu)程序設(shè)計(jì)23/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))輸入一個(gè)華氏溫度,要求輸出攝氏溫度。公式為:c=(5/9)*(F-32)。取2位小數(shù)。解:#include<stdio.h>main()

{

floatF,c;

scanf(“%f”,&F);/*輸入華氏溫度F*/

c=(5.0/9.0)*(F-32.0);/*計(jì)算攝氏溫度c*/printf(“F=%f\n",F);printf(“c=%7.2f\n”,c);}執(zhí)行:90(回車)輸出結(jié)果為:F=90.000000c=32.22輸入華氏溫度Fc=(5.0/9.0)*(F-32.0)打印華氏溫度F打印攝氏溫度c課件制作:劉達(dá)堂作業(yè):第二節(jié)

順序結(jié)構(gòu)程序設(shè)計(jì)24/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))編寫一程序,從輸入鍵盤一個(gè)字符,輸出其ASCII碼。課件制作:劉達(dá)3章

結(jié)構(gòu)化程序設(shè)計(jì)----習(xí)題225/96《C語言程序設(shè)計(jì)》

龍昭華主編

習(xí)題(二)***復(fù)習(xí)本章已講內(nèi)容,預(yù)習(xí)本章剩余內(nèi)容。3.1教材P93~94的習(xí)題3.1選擇題中的⑴、⑵、⑶、⑷小題。3.2教材P96的習(xí)題3.4編程題中的⑴、⑵小題。課件制作:劉達(dá)三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)(第三章結(jié)構(gòu)化程序設(shè)計(jì))26/96一、if語句1、“if(表達(dá)式)語句”形式語句格式的一般形式為:

if(表達(dá)式)語句;

語句功能:執(zhí)行此語句時(shí),先求表達(dá)式的值,若其值為“真”,則執(zhí)行語句;若其值為“假”,則在if結(jié)構(gòu)體內(nèi)什么也不執(zhí)行。而程序直接去執(zhí)行if語句后面的語句。注意:①if后面的“表達(dá)式”一般用于表示一個(gè)條件,它可以是關(guān)系表達(dá)式、邏輯表達(dá)式、算術(shù)表達(dá)式、字符型表達(dá)式等。②格式中的“語句”,可以只包含一個(gè)簡單語句,也可以是復(fù)合語句。如果是復(fù)合語句,必須用一對(duì)花括號(hào){}將語句括起來。如果只有一條語句,則可不用{}括起來。語句表達(dá)式ab真(非0)假(0)語句真假表達(dá)式課件制作:劉達(dá)明023-668341102、“if(表達(dá)式)語句1else語句2”形式第三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)27/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))語句格式的一般形式為:

if(表達(dá)式)語句1;else語句2;

語句功能:執(zhí)行此語句時(shí),先求表達(dá)式的值,若其值為“真”,則執(zhí)行語句1;若其值為“假”,則執(zhí)行語句2。最后程序跳出if語句執(zhí)行后面的語句。注意:①if后面的“表達(dá)式”一般用于表示一個(gè)條件,它可以是關(guān)系表達(dá)式、邏輯表達(dá)式、算術(shù)表達(dá)式、字符型表達(dá)式等。②格式中的“語句”,可以只包含一個(gè)簡單語句,也可以是復(fù)合語句。如果是復(fù)合語句,必須用一對(duì)花括號(hào){}將語句括起來。如果只有一條語句,則可不用{}括起來。語句1語句2真假表達(dá)式語句1語句2表達(dá)式b真(非0)假(0)課件制作:劉達(dá)明023-668341103、“if……

elseif”形式第三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)28/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))語句格式的一般形式為:

if(表達(dá)式1)語句1;elseif(表達(dá)式2)語句2;elseif(表達(dá)式3)語句3;……elseif(表達(dá)式n)語句n;else語句n+1;表達(dá)式1表達(dá)式2表達(dá)式3表達(dá)式n語句1語句2語句3語句n語句n+1真(非0)假(0)真(非0)假(0)假(0)假(0)真(非0)真(非0)課件制作:劉達(dá)f……elseif語句功能:第三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)29/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))先求表達(dá)式1的值,若其值為“真”,則執(zhí)行語句1;否則求表達(dá)式2的值,若其值為“真”,則執(zhí)行語句2;否則求表達(dá)式3的值,若其值為“真”,則執(zhí)行語句3;……求表達(dá)式n的值,若其值為“真”,則執(zhí)行語句n,否則執(zhí)行語句n+1。注意:

①if后面的“表達(dá)式”一般用于表示一個(gè)條件,它可以是關(guān)系表達(dá)式、邏輯表達(dá)式、算術(shù)表達(dá)式、字符型表達(dá)式等C語言允許的任意類型的表達(dá)式。

②只有當(dāng)表達(dá)式1的值為“假”時(shí),才去求表達(dá)式2的值;只有當(dāng)表達(dá)式2的值為“假”時(shí),才去求表達(dá)式3的值;……。

③格式中的“語句”,可以只包含一個(gè)簡單語句,也可以是復(fù)合語句。如果是復(fù)合語句,必須用一對(duì)花括號(hào){}將語句括起來。如果只有一條語句,則可不用{}括起來。

④在此種形式中,可以沒有最后else子句。

⑤此種形式的語句主要用于多分支的處理。課件制作:劉達(dá)明023-668341104、if語句的嵌套第三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)30/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))if(expr1)if(expr2)statement1elsestatement2內(nèi)嵌ifif(expr1)statement1elseif(expr3)statement3elsestatement4內(nèi)嵌ifif(expr1)if(expr2)statement1elsestatement3

內(nèi)嵌ifif(expr1)if(expr2)statement1elsestatement2elseif(expr3)statement3elsestatement4內(nèi)嵌if內(nèi)嵌if課件制作:劉達(dá)f語句說明:第三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)31/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))

①if(x)if(x!=0)、if(!x)if(x==0)。

②else子句不能單獨(dú)使用,它必須是if語句的一部分,只能與if配對(duì)使用。在if…else配對(duì)時(shí),如果缺省{},else總是和它上面離它最近的未配對(duì)的if配對(duì)。為了避免不必要的誤會(huì),在使用if…else時(shí),最好使用花括號(hào){}指明if與else的配對(duì)關(guān)系。

③在if語句中,條件判斷表達(dá)式必須用括號(hào)括起來,在語句之后必須加分號(hào)。

④在if語句的幾種形式中,所有的語句應(yīng)為單個(gè)語句,如果要想在滿足條件時(shí)執(zhí)行多個(gè)語句,則必須組成復(fù)合語句的形式,用一對(duì)花括號(hào){}括起來,并且在花括號(hào)“}”之后不能加分號(hào)。

⑤在C語言中,雖然允許if語句進(jìn)行嵌套,但嵌套的層次一般不宜超過2—3層。if(……)if(……)if(……)else…...else…...else…...

⑥在“if(表達(dá)式)語句1else語句2”形式中,如果語句1與語句2都是單個(gè)語句,并且是對(duì)同一個(gè)變量賦值,則這種方式可使用條件運(yùn)算符來代替:如:if(a>b)i=10;elsei=20;(注意:雖然這里在else前和整個(gè)語句結(jié)束處各有一個(gè)分號(hào),但仍屬于同一個(gè)if語句,而不是兩個(gè)語句),可以使用:i=(a>b)?10:20;來代替。課件制作:劉達(dá)3.12

大寫轉(zhuǎn)小寫,小寫轉(zhuǎn)大寫,其余不變。第三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)32/96解:從鍵盤輸入一個(gè)字符,如果是大寫字母,則轉(zhuǎn)換為小寫字母;如果是小寫字母,則轉(zhuǎn)換為大寫字母;如果為其它字符,則原樣輸出。#include<stdio.h>main(){charx;printf(“Enterachar:\n”);x=getchar();if((x>=’a’)&&(x<=‘z’))x-=‘a(chǎn)’-’A’;elseif((x>=’A’)&&(x<=‘Z’))x+=‘a(chǎn)’-’A’;putchar(x);}(第三章結(jié)構(gòu)化程序設(shè)計(jì))輸入字符xx為小寫字母x為大寫字母將x轉(zhuǎn)換為大寫字母將x轉(zhuǎn)換為小寫字母輸出字符x真真假假課件制作:劉達(dá)3.13

輸入四個(gè)整數(shù),要求按大小順序輸出。第三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)33/96解:此題按依次比較的方法排出其大小順序。#include<stdio.h>main(){intt,a,b,c,d;printf(“Input4integer:”);scanf(“%d,%d,%d,%d”,&a,&b,&c,&d);printf(“S=%d,%d,%d,%d\n”,a,b,c,d);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(a>d){t=a;a=d;d=t;}if(b>c){t=b;b=c;c=t;}(第三章結(jié)構(gòu)化程序設(shè)計(jì))if(b>d){t=b;b=d;d=t;}if(c>d){t=c;c=d;d=t;}printf(“Indexorder:”);printf(“%d,%d,%d,%d\n”,a,b,c,d);}執(zhí)行:Input4integer:6,8,1,4(回車)S=6,8,1,4Indexorder:1,4,6,8課件制作:劉達(dá)、switch語句第三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)34/96switch語句是多分支選擇語句,也稱為開關(guān)語句。其一般格式為:switch(表達(dá)式){case常量表達(dá)式1:語句組1;break;

case常量表達(dá)式2:語句組2;break;

……

case常量表達(dá)式n:語句組n;break;

default:語句組n+1;}根據(jù)表達(dá)式的值p進(jìn)行選擇ab語句1語句2語句n…p1p2pn語句n+1其它(第三章結(jié)構(gòu)化程序設(shè)計(jì))計(jì)算表達(dá)式常量表達(dá)式1常量表達(dá)式2常量表達(dá)式n語句組1語句組2語句組n語句組n+1…………其它課件制作:劉達(dá)witch語句功能:第三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)35/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))執(zhí)行switch語句時(shí),先求表達(dá)式的值,然后依次與各常量表達(dá)式的值進(jìn)行比較,若與某常量表達(dá)式的值相等,則執(zhí)行其后的各語句,直至遇到break語句或switch語句的最后一條語句。即:當(dāng)“表達(dá)式”=“常量表達(dá)式1”時(shí),從“語句組1”開始執(zhí)行;當(dāng)“表達(dá)式”=“常量表達(dá)式2”時(shí),從“語句組2”開始執(zhí)行;當(dāng)“表達(dá)式”與“常量表達(dá)式1”、“常量表達(dá)式2”、┄、“常量表達(dá)式n”都不相等時(shí),從“語句組n+1”開始執(zhí)行。

開始執(zhí)行語句組后,遇到break或switch語句的最后一條語句,才結(jié)束switch語句的執(zhí)行。課件制作:劉達(dá)witch語句的說明1:第三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)36/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))①switch后面括號(hào)內(nèi)的“表達(dá)式”,ANSI標(biāo)準(zhǔn)允許它為任何類型。使用最多的表達(dá)式的值為:字符型、整型或枚舉型。

②case后面包含多個(gè)語句句時(shí),不需要加大括號(hào)。

③當(dāng)每一個(gè)case語句后均有break語句時(shí),case出現(xiàn)的次序不影響執(zhí)行結(jié)果。(最后一個(gè)分支default總是放在最后,這時(shí),default后不需要break語句)。

④多個(gè)case可以共用一組執(zhí)行語句。這時(shí)需要共用的前面的case語句實(shí)際上無語句組,并且不要用break。

⑤表達(dá)式和各常量表達(dá)式的類型應(yīng)一致,并且各常量表達(dá)式的值應(yīng)互不相同。

⑥switch允許嵌套、default子句可以沒有。

⑦“case常量表達(dá)式:”只是起語句標(biāo)號(hào)作用,并不是在該處進(jìn)行條件判斷。在執(zhí)行switch語句時(shí),根據(jù)switch后面表達(dá)式的值找到匹配的入口標(biāo)號(hào),就從此標(biāo)號(hào)開始執(zhí)行下去,不再進(jìn)行判斷。如果該case后面沒有break或switch語句沒有結(jié)束,在執(zhí)行完該case后的語句組后,接著執(zhí)行下一個(gè)case語句,直到break或switch語句結(jié)束為止。課件制作:劉達(dá)witch語句的說明2:第三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)37/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))

⑧用if的嵌套可以實(shí)現(xiàn)多分支選擇,但若分支比較多,則嵌套的層次也比較多,使寫出的程序變得繁長且可讀性差;用if┄elseif也可以實(shí)現(xiàn)多分支選擇。用switch語句也可以方便、簡捷地實(shí)現(xiàn)多分支選擇。在程序中究竟使用那種結(jié)構(gòu)實(shí)現(xiàn)分支,依賴于問題的不同和個(gè)人的編程風(fēng)格。總的來說,就是要求程序具有良好的可讀性和正確性。

⑨if┄elseif應(yīng)用于多條件并列測試,從中取一的情形;switch應(yīng)用于單條件測試,從其多個(gè)結(jié)果取一種的情形。

⑩break是退出開關(guān)語句,它用來中途退出switch語句的執(zhí)行,往往在一個(gè)case執(zhí)行完成后使用break退出switch語句。而default后則可以不要break。break語句不能用于循環(huán)語句和switch語句之外的任何其它語句之中。課件制作:劉達(dá)、選擇結(jié)構(gòu)程序舉例第三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)38/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))例3.14

寫一程序,從鍵盤上從鍵盤上輸入年份year,判斷其是否閏年。(教材P57例3.16)解:閏年的條件是:能被4整除、但不能被100整除,或者能被400整除。(x能被y整除,則余數(shù)為0,即x%y=0)輸入年份賦給yaeryear能被4整除真真假假year能被100整除year能被400整除真假leap=1leap=0leap=1leap=0leap真假輸出year是閏年輸出year是平年用流程圖畫的算法見教材P58~P59。用N-S圖畫的算法見右圖。該例的程序見教材P58~P59。注:對(duì)閏年標(biāo)志leap的判斷也可使用switch語句來完成。課件制作:劉達(dá)3.15第三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)39/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))解:分析:折扣點(diǎn)的變化都發(fā)生在距離為250的倍數(shù)上,如下表:運(yùn)輸公司費(fèi)用的計(jì)算問題。距離s越遠(yuǎn),每公里的運(yùn)費(fèi)越低。設(shè)每公里每噸貨物的基本運(yùn)費(fèi)為p,貨物重量為w(噸),折扣為d,則總運(yùn)輸費(fèi)用f的計(jì)算公式為:f=p*w*s*(1-d)。其中折扣數(shù)d與距離s有關(guān),具體標(biāo)準(zhǔn)如下:s<250km沒有折扣250<=s<500折扣2%500<=s<1000折扣5%1000<=s<2000折扣8%2000<=s<3000折扣10%s>=3000折扣15%s/2500123456789101112d(%)02581015課件制作:劉達(dá)3.15的N-S圖算法:第三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)40/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))定義整型變量c,s,實(shí)型變量p,w,d,f輸入p、w、ss>=3000真假c=12c=s/250d=0d=2d=15d=5d=8d=10c0123456789101112f=p*w*s*(1-d/100)打印f課件制作:劉達(dá)3.15的程序:第三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)41/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))#include<stdio.h>main(){intc,s;/*c-s/250s-距離*/floatp,w,d,f;/*p-運(yùn)費(fèi)單價(jià)*//*w-重量d-折扣f-總運(yùn)輸費(fèi)用*/printf(“pleaseinputp,w,s:\n”);scanf(“%f,%f,%d”,&p,&w,&s);c=(s>=3000)?12:(s/250);switch(c){case0:d=0;break;case1:d=2;break;case2:case3:d=5;break;case4:case5:case6:case7:d=8;break;case8:case9:case10:case11:d=10;break;case12:d=15;break;}/*endswitch*/f=p*w*s*(1-d/100);printf(“f=%10.2f\n”,f);}/*endmain*/運(yùn)行結(jié)果:0.05,100,1200(回車)f=5520.00課件制作:劉達(dá)三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)42/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))例3.16從鍵盤輸入2個(gè)四位數(shù)之內(nèi)的四則運(yùn)算符(+、-、*、/),輸出它們的運(yùn)算結(jié)果;若輸入的不是四則運(yùn)算符,則輸出出錯(cuò)信息。

(教材P64例3.20)定義整型變量a,b,d,字符型變量c輸入a、c、bd=a+bd=a-bd=a*b真c‘+’‘-’‘*’‘/’其它打印a+b的結(jié)果b==0假d=a/b打印a-b的結(jié)果打印a*b的結(jié)果打印a/b的結(jié)果打印divisoriszero打印inputoperatorerror例3.17

見教材P67的例3.23。主要明白break的作用。課件制作:劉達(dá)三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)43/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))例3.18main(){inta=2,b=7,c=5;clrscr();switch(a>0)/*a>0的值為:0或1*/{case1:switch(b<0)/*值:0,1*/{case1:printf("@");break;case2:printf("!");break;default:printf("&");}case0:switch(c==5){case0:printf("*");break;case1:printf("#");break;default:printf("$");break;}default:printf(">");}printf("\n");}運(yùn)行結(jié)果:&#>若將b值初值改為:b=-7;則:運(yùn)行結(jié)果:@#>課件制作:劉達(dá)三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)44/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))例3.19給一個(gè)不多于5位的正整數(shù),要求:①求它是幾位數(shù);②分別打印出每一位數(shù)字;③按逆序打印出各位數(shù)字。如:321,輸出:123。解:N-S圖算法如右邊所示:輸入一正整數(shù)(0~99999)

位數(shù)=5位數(shù)=4位數(shù)=3位數(shù)=2位數(shù)=1>9999>999>99>9計(jì)算各位的數(shù)值真假假假假真真真位數(shù)54321輸出個(gè)、十、百、千、萬,五位輸出個(gè)、十、百、千,四位輸出個(gè)、十、百,三位輸出個(gè)、十,兩位輸出個(gè)位課件制作:劉達(dá)三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)45/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))例3.19的程序:#include<stdio.h>main(){longnum;intn1,n2,n3,n4,n5,n;printf(“Input0~99999:”);scanf(“%ld”,&num);if(num>9999)n=5;elseif(num>999)n=4;elseif(num>99)n=3;elseif(num>9)n=2;elsen=1;printf(“n=%d\n”,n);printf(“Everyfigure:”);n5=num/10000;n4=(num-n5*10000)/1000;n3=(num-n5*10000-n4*1000)/100;n2=(num-n5*10000-n4*1000-n3*100)/10;n1=(num-n5*10000-n4*1000-n3*100-n2*10;switch(n){case5:printf(“%d,%d,%d,%d,%d”,n5,n4,n3,n2,n1);printf(“\nAntitonefigure:”);printf(“%d%d%d%d%d”,n1,n2,n3,n4,n5);break;case4:printf(“%d,%d,%d,%d”,n4,n3,n2,n1);printf(“\nAntitonefigure:”);printf(“%d%d%d%d”,n1,n2,n3,n4);break;課件制作:劉達(dá)三節(jié)

選擇結(jié)構(gòu)程序設(shè)計(jì)46/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))例3.19的程序(續(xù)):case3:printf(“%d,%d,%d”,n3,n2,n1);printf(“\nAntitonefigure:”);printf(“%d%d%d”,n1,n2,n3);break;case2:printf(“%d,%d”,n2,n1);printf(“\nAntitonefigure:”);printf(“%d%d”,n1,n2);break;case1:printf(“%d”,n1);printf(“\nAntitonefigure:”);printf(“%d”,n1);break;}}運(yùn)行結(jié)果:Input0~99999:123(回車)n=3Everyfigure:1,2,3Antitonefigure:321注:輸入數(shù)據(jù)123位數(shù)為:3每位數(shù)字為:1,2,3反序數(shù)字為:321課件制作:劉達(dá)3章

結(jié)構(gòu)化程序設(shè)計(jì)----習(xí)題347/96《C語言程序設(shè)計(jì)》

龍昭華主編

習(xí)題(三)***復(fù)習(xí)本章已講內(nèi)容,預(yù)習(xí)本章剩余內(nèi)容。3.3教材P96的習(xí)題3.4編程題中的⑶、⑸、⑹小題。課件制作:劉達(dá)四節(jié)

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)48/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))概述C語言可實(shí)現(xiàn)循環(huán)的語句:用goto和if構(gòu)成循環(huán)while語句用來實(shí)現(xiàn)當(dāng)循環(huán)do~while語句用來實(shí)現(xiàn)直到型循環(huán)for語句用于次數(shù)型循環(huán)課件制作:劉達(dá)、goto語句及其與if語句構(gòu)成的循環(huán)第四節(jié)

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)49/96

1、goto語句

goto語句稱為“無條件轉(zhuǎn)移語句”。實(shí)現(xiàn)程序的任意轉(zhuǎn)移。goto語句通常使用在:①多重循環(huán)結(jié)構(gòu)的內(nèi)層循環(huán)體中,用來解決從內(nèi)層循環(huán)體直接跳到外層循環(huán)之外的問題。②與if語句構(gòu)成循環(huán)結(jié)構(gòu)。goto語句是非結(jié)構(gòu)化的語句,建議不用或少用goto語句。goto語句的一般格式為:

注意:①語句標(biāo)號(hào)是標(biāo)識(shí)符,它的定名規(guī)則與變量名相同,其后必須跟一個(gè)“:”才能放在本程序的某條語句之前,作為該語句的一個(gè)代號(hào)。帶有語句標(biāo)號(hào)的語句可以是C語言的任何語句。②goto語句中的“語句標(biāo)號(hào)”必須是在本語句所在的函數(shù)中已存在的。不允許從某個(gè)函數(shù)跳轉(zhuǎn)到其它函數(shù)中。③特別強(qiáng)調(diào),不能用整數(shù)來做標(biāo)號(hào)。goto語句標(biāo)號(hào);….…..語句標(biāo)號(hào):語句;(第三章結(jié)構(gòu)化程序設(shè)計(jì))課件制作:劉達(dá)明023-668341102、goto語句與if語句構(gòu)成循環(huán)第四節(jié)

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)50/96在C語言中可以用goto語句與if語句一起構(gòu)造循環(huán)。例3.20計(jì)算1+2+3+……+100。解:算法簡單,直接寫出程序即可。(詳見教材P69的例3.24)實(shí)際上,這里用的是“當(dāng)型”循環(huán)結(jié)構(gòu)。當(dāng)滿足“i<=100”時(shí),執(zhí)行if語句的花括號(hào){}內(nèi)的循環(huán)體。#include<stdio.h>main(){inti,sum=0;i=1;A:if(i<=100){sum+=i; i++;

gotoA;}printf(“sum=%d",sum);}sum=0+1=1sum=1+2=3sum=3+3=6sum=6+4……sum=4950+100=5050循環(huán)初值循環(huán)終值循環(huán)變量增值循環(huán)條件循環(huán)體(第三章結(jié)構(gòu)化程序設(shè)計(jì))課件制作:劉達(dá)、while語句構(gòu)成循環(huán)第四節(jié)

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)51/96while語句實(shí)現(xiàn)當(dāng)型循環(huán)結(jié)構(gòu)。其一般形式為:while(表達(dá)式)

循環(huán)體語句;循環(huán)體表達(dá)式ab真(非0)假(0)當(dāng)表達(dá)式為真(非0)循環(huán)體

功能:先計(jì)算表達(dá)式的值,若其值為“真”(非0),則執(zhí)行循環(huán)體,否則退出循環(huán)。

(第三章結(jié)構(gòu)化程序設(shè)計(jì))課件制作:劉達(dá)hile語句說明:第四節(jié)

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)52/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))

①格式中的表達(dá)式可以為算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式等。

②循環(huán)體可以是單獨(dú)的一個(gè)語句,也可以是復(fù)合語句。復(fù)合語句必須用{}括起來,否則只執(zhí)行到第一個(gè)分號(hào)處。

③不要構(gòu)成死循環(huán)。循環(huán)體內(nèi)應(yīng)有使循環(huán)趨向于結(jié)束的語句。

④結(jié)構(gòu)“while(1)循環(huán)體語句;”為無限循環(huán)。

⑤while循環(huán)是在滿足條件時(shí)執(zhí)行的。若表達(dá)式的值一開始就為0,則循環(huán)體一次也不被執(zhí)行。

⑥當(dāng)表達(dá)式值為0或循環(huán)體內(nèi)遇break、return、goto則退出循環(huán)。

⑦在while循環(huán)體內(nèi)也允許空語句。如:while((c=getche())!=‘\X0D’);例3.21:求1+2+……+100。詳見教材P70的例3.25。課件制作:劉達(dá)、do-while語句構(gòu)成循環(huán)第四節(jié)

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)53/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))do-while語句實(shí)現(xiàn)直到型循環(huán)結(jié)構(gòu)。其一般形式為:循環(huán)體表達(dá)式ab真(非0)假(0)當(dāng)表達(dá)式為真(非0)循環(huán)體

功能:先執(zhí)行循環(huán)體,然后計(jì)算表達(dá)式,如果表達(dá)式的值為“真”(非0),繼續(xù)執(zhí)行循環(huán)體,然后再計(jì)算表達(dá)式,如果表達(dá)式的值仍為“真”,再繼續(xù)執(zhí)行循環(huán)體;如此循環(huán),直到表達(dá)式的值為“假”(0)時(shí),結(jié)束循環(huán)體do-while語句的執(zhí)行,執(zhí)行do-while語句后面的語句。do

循環(huán)體語句;while(表達(dá)式);課件制作:劉達(dá)o-while語句說明:第四節(jié)

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)54/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))①格式中的表達(dá)式可以為算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式等。②循環(huán)體可以是單獨(dú)的一個(gè)語句,也可以是復(fù)合語句。復(fù)合語句必須用{}括起來,否則程序出錯(cuò)。

③在使用時(shí),while(條件表達(dá)式)后必須有分號(hào)。④do…while循環(huán)是先執(zhí)行循環(huán)體,再判斷循環(huán)條件,因而循環(huán)體至少執(zhí)行一次。

⑤當(dāng)表達(dá)式值為0或循環(huán)體內(nèi)遇break、return、goto則退出循環(huán)。

⑥在循環(huán)體內(nèi)應(yīng)有使條件表達(dá)式的值發(fā)生改變的語句。否則就要構(gòu)成死循環(huán)。例3.22:求1+2+……+100。詳見教材P73的例3.28。課件制作:劉達(dá)hile循環(huán)與do-while循環(huán)的比較與轉(zhuǎn)換第四節(jié)

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)55/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))do-while結(jié)構(gòu)可以轉(zhuǎn)化為while結(jié)構(gòu)。如圖:while與do-while的比較:循環(huán)體表達(dá)式ac真(非0)假(0)循環(huán)體bmain(){intsum=0,i;scanf(“%d”,&i);while(i<=10){sum+=i;i++;}printf(“sum=%d\n”,sum);}main(){intsum=0,i;scanf(“%d”,&i);do{sum+=i;i++;}while(i<=10);printf(“sum=%d\n”,sum);}結(jié)果:輸入1時(shí),為55輸入11時(shí),為0結(jié)果:輸入1時(shí),為55輸入11時(shí),為11課件制作:劉達(dá)、for語句構(gòu)成循環(huán)第四節(jié)

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)56/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))

for語句是循環(huán)控制結(jié)構(gòu)中使用最廣泛的最為靈活的一種循環(huán)控制語句。它不僅用于已知循環(huán)次數(shù)的情況,而且可以用于循環(huán)次數(shù)不確定的而只給出循環(huán)結(jié)束條件的情況。它完全可以代替while語句。for語句的一般形式為:for(<表達(dá)式1>;<表達(dá)式2>;<表達(dá)式3>)

循環(huán)體語句;語句功能:執(zhí)行順序如下:①計(jì)算表達(dá)式1;②求表達(dá)式2的值,若其值為“真”(非0),轉(zhuǎn)③,否則,退出循環(huán);③執(zhí)行循環(huán)體;④計(jì)算表達(dá)式3;⑤轉(zhuǎn)②。當(dāng)表達(dá)式2為真(非0)循環(huán)體語句計(jì)算表達(dá)式1計(jì)算表達(dá)式3課件制作:劉達(dá)or語句可以轉(zhuǎn)換成while語句第四節(jié)

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)57/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))for語句可轉(zhuǎn)換為下面的while語句:表達(dá)式1;while(表達(dá)式2){循環(huán)體語句;表達(dá)式3;}當(dāng)表達(dá)式2為真(非0)循環(huán)體語句計(jì)算表達(dá)式1計(jì)算表達(dá)式3for語句最簡單,也是最易于理解的形式為:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)循環(huán)體語句;課件制作:劉達(dá)or語句說明:第四節(jié)

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)58/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))

⑴“表達(dá)式1”可以是任何類型的,一般為賦值表達(dá)式,用于給控制循環(huán)次數(shù)的變量賦初值。在“表達(dá)式1”中可以使用逗號(hào)運(yùn)算符?!氨磉_(dá)式1”既可以設(shè)置循環(huán)變量的初值,又可以是與循環(huán)變量無關(guān)的其他表達(dá)式。如:for(sum=0,i=1;i<=100;i++)?!氨磉_(dá)式1”可以省略,但其后的分號(hào)“;”必須保留。如:for(;i<=100;i++)。

⑵“表達(dá)式2”可以是任何類型的,只要其結(jié)果為“真”(非0)或“假”(0)的表達(dá)式都可以。一般為關(guān)系或邏輯表達(dá)式,用于控制循環(huán)是否繼續(xù)執(zhí)行?!氨磉_(dá)式2”可以省略,但其后的分號(hào)“;”必須保留。如:for(i=1;;i++)。再如:for(i=0;(c=getchar())!=‘\n’;i+=c)。

⑶“表達(dá)式3”可以是任何類型的,一般為賦值表達(dá)式,用于修改循環(huán)控制變量的值,以便使得某次循環(huán)后,表達(dá)式2的值為“假”(0),從而退出循環(huán)。“表達(dá)式3”可以省略。特別注意:表達(dá)式3后無分號(hào)。在“表達(dá)式3”中可以使用逗號(hào)運(yùn)算符。如:for(i=1;i<=100;)。再如:for(i=1;i<=100;i++,i++)。

⑷“循環(huán)體”可以是任何語句,可以是單獨(dú)的一條語句,也可以是復(fù)合語句。復(fù)合語句必須用一對(duì)花括號(hào){}括起來。課件制作:劉達(dá)or語句說明(續(xù)):第四節(jié)

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)59/96(第三章結(jié)構(gòu)化程序設(shè)計(jì))

⑸“表達(dá)式1”、“表達(dá)式2”、“表達(dá)式3”三部分使用兩個(gè)分號(hào)將其分開。這三個(gè)表達(dá)式中可以省略其中一個(gè)、兩個(gè)或三個(gè),但相應(yīng)表達(dá)式后面的分號(hào)不能省略。①省略“表達(dá)式1”,此時(shí)應(yīng)在for語句前面設(shè)置循環(huán)初始條件。

②省略“表達(dá)式2”,此時(shí)不判別循環(huán)條件,認(rèn)為循環(huán)循環(huán)條件始終為“真”,循環(huán)將無終止地進(jìn)行下去。此時(shí)在循環(huán)體內(nèi)部應(yīng)有退出循環(huán)的語句。③省略“表達(dá)式3(循環(huán)變量增量)”,則不對(duì)循環(huán)控制變量進(jìn)行操作,這時(shí)可在語句體中加入修改循環(huán)控制變量的語

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論