第04章 C語言程序設(shè)計_第1頁
第04章 C語言程序設(shè)計_第2頁
第04章 C語言程序設(shè)計_第3頁
第04章 C語言程序設(shè)計_第4頁
第04章 C語言程序設(shè)計_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第四章語言程序設(shè)計本課介紹語言程序設(shè)計的基本方法和基本的程序語句。從程序流程的角度來看,程序可以分為三種基本結(jié)構(gòu), 即順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。 這三種基本結(jié)構(gòu)可以組成所有的各種復(fù)雜程序。語言提供了多種語句來實現(xiàn)這些程序結(jié)構(gòu)。 本章介紹這些基本語句及其應(yīng)用,使讀者對程序有一個初步的認(rèn)識, 為后面各章的學(xué)習(xí)打下基礎(chǔ)。程序的語句程序的執(zhí)行部分是由語句組成的。 程序的功能也是由執(zhí)行語句實現(xiàn)的。C語句可分為以下五類:1.表達(dá)式語句2.函數(shù)調(diào)用語句3.控制語句4.復(fù)合語句5.空語句1.表達(dá)式語句表達(dá)式語句由表達(dá)式加上分號“;”組成。其一般形式為: 表達(dá)式; 執(zhí)行表達(dá)式語句就是計算表達(dá)式的值。例如:

2、x=y+z; 賦值語句y+z; 加法運(yùn)算語句,但計算結(jié)果不能保留,無實際意義。i+; 自增1語句,i值增12.函數(shù)調(diào)用語句(以后講)由函數(shù)名、實際參數(shù)加上分號“;”組成。其一般形式為: 函數(shù)名(實際參數(shù)表); 執(zhí)行函數(shù)語句就是調(diào)用函數(shù)體并把實際參數(shù)賦予函數(shù)定義中的形式參數(shù),然后執(zhí)行被調(diào)函數(shù)體中的語句,求取函數(shù)值。(在第五章函數(shù)中再詳細(xì)介紹)例如printf(C Program);調(diào)用庫函數(shù),輸出字符串。3.控制語句(以后講)控制語句用于控制程序的流程, 以實現(xiàn)程序的各種結(jié)構(gòu)方式。它們由特定的語句定義符組成。語言有九種控制語句。 可分成以下三類:(1) 條件判斷語句 if語句,switch語句(

3、2) 循環(huán)執(zhí)行語句 do while語句,while語句,for語句(3) 轉(zhuǎn)向語句 break語句,goto語句,continue語句,return語句4.復(fù)合語句把多個語句用括號括起來組成的一個語句稱復(fù)合語句。 在程序中應(yīng)把復(fù)合語句看成是單條語句,而不是多條語句,例如x=y+z;a=b+c;printf(“%d%d”,x,a);是一條復(fù)合語句。復(fù)合語句內(nèi)的各條語句都必須以分號“;”結(jié)尾,在括號“”外不能加分號。5.空語句只有分號“;”組成的語句稱為空語句。 空語句是什么也不執(zhí)行的語句。在程序中空語句可用來作空循環(huán)體。例如 while(getchar()!=n); 本語句的功能是,只要從鍵盤

4、輸入的字符不是回車則重新輸入。這里的循環(huán)體為空語句。賦值語句賦值語句是由賦值表達(dá)式再加上分號構(gòu)成的表達(dá)式語句。 其一般形式為: 變量=表達(dá)式; 賦值語句的功能和特點都與賦值表達(dá)式相同。 它是程序中使用最多的語句之一。 在賦值語句的使用中需要注意以下幾點:1.由于在賦值符“=”右邊的表達(dá)式也可以又是一個賦值表達(dá)式,因此,下述形式 變量=(變量=表達(dá)式); 是成立的,從而形成嵌套的情形。其展開之后的一般形式為: 變量=變量=表達(dá)式;例如:a=b=c=d=e=5;按照賦值運(yùn)算符的右接合性,因此實際上等效于:e=5;d=e;c=d;b=c;a=b;2.注意在變量說明中給變量賦初值和賦值語句的區(qū)別。給變

5、量賦初值是變量說明的一部分,賦初值后的變量與其后的其它同類變量之間仍必須用逗號間隔,而賦值語句則必須用分號結(jié)尾。3.在變量說明中,不允許連續(xù)給多個變量賦初值。 如下述說明是錯誤的: int a=b=c=5 必須寫為 int a=5,b=5,c=5; 而賦值語句允許連續(xù)賦值4.注意賦值表達(dá)式和賦值語句的區(qū)別。賦值表達(dá)式是一種表達(dá)式,它可以出現(xiàn)在任何允許表達(dá)式出現(xiàn)的地方,而賦值語句則不能。下述語句是合法的: if(x=y+5)0) z=x; 語句的功能是,若表達(dá)式x=y+5大于0則z=x。下述語句是非法的: if(x=y+5;)0) z=x; 因為=y+5;是語句,不能出現(xiàn)在表達(dá)式中。數(shù)據(jù)輸出語句

6、本小節(jié)介紹的是向標(biāo)準(zhǔn)輸出設(shè)備顯示器輸出數(shù)據(jù)的語句。在語言中,所有的數(shù)據(jù)輸入輸出都是由庫函數(shù)完成的。 因此都是函數(shù)語句。本小節(jié)先介紹printf函數(shù)和putchar函數(shù)。printf函數(shù)printf函數(shù)稱為格式輸出函數(shù),其關(guān)鍵字最末一個字母f即為“格式”(format)之意。其功能是按用戶指定的格式, 把指定的數(shù)據(jù)顯示到顯示器屏幕上。在前面的例題中我們已多次使用過這個函數(shù)。一、printf函數(shù)調(diào)用的一般形式printf函數(shù)是一個標(biāo)準(zhǔn)庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中。但作為一個特例,不要求在使用 printf 函數(shù)之前必須包含stdio.h文件。printf函數(shù)調(diào)用的一般形式為:

7、printf(“格式控制字符串”,輸出表列)其中格式控制字符串用于指定輸出格式。 格式控制串可由格式字符串和非格式字符串兩種組成。格式字符串是以%開頭的字符串,在%后面跟有各種格式字符,以說明輸出數(shù)據(jù)的類型、形式、長度、小數(shù)位數(shù)等。如“%d”表示按十進(jìn)制整型輸出,“%ld”表示按十進(jìn)制長整型輸出,“%c”表示按字符型輸出等。后面將專門給予討論。非格式字符串在輸出時原樣照印,在顯示中起提示作用。 輸出表列中給出了各個輸出項, 要求格式字符串和各輸出項在數(shù)量和類型上應(yīng)該一一對應(yīng)。void main()int a=88,b=89;printf(%d %dn,a,b);printf(%d,%dn,a,

8、b);printf(%c,%cn,a,b);printf(a=%d,b=%d,a,b);a-8,b-89printf(%d %dn,a,b);printf(%d,%dn,a,b);printf(%c,%cn,a,b);printf(a=%d,b=%d,a,b);本例中四次輸出了a,b的值,但由于格式控制串不同,輸出的結(jié)果也不相同。第四行的輸出語句格式控制串中,兩格式串%d 之間加了一個空格(非格式字符),所以輸出的a,b值之間有一個空格。第五行的printf語句格式控制串中加入的是非格式字符逗號, 因此輸出的a,b值之間加了一個逗號。第六行的格式串要求按字符型輸出 a,b值。第七行中為了提示輸

9、出結(jié)果又增加了非格式字符串。二、格式字符串在Turbo C中格式字符串的一般形式為: 標(biāo)志輸出最小寬度.精度長度類型 其中方括號中的項為可選項。各項的意義介紹如下:1.類型類型字符用以表示輸出數(shù)據(jù)的類型,其格式符和意義下表所示:表示輸出類型的格式字符 格式字符意義d 以十進(jìn)制形式輸出帶符號整數(shù)(正數(shù)不輸出符號)o 以八進(jìn)制形式輸出無符號整數(shù)(不輸出前綴O)x 以十六進(jìn)制形式輸出無符號整數(shù)(不輸出前綴OX)u 以十進(jìn)制形式輸出無符號整數(shù)f 以小數(shù)形式輸出單、雙精度實數(shù)e 以指數(shù)形式輸出單、雙精度實數(shù)g 以%f%e中較短的輸出寬度輸出單、雙精度實數(shù)c 輸出單個字符s 輸出字符串2.標(biāo)志標(biāo)志字符為-

10、、+、#、空格四種,其意義下表所示:標(biāo)志格式字符 標(biāo) 志 意 義- 結(jié)果左對齊,右邊填空格+ 輸出符號(正號或負(fù)號)空格輸出值為正時冠以空格,為負(fù)時冠以負(fù)號# 對c,s,d,u類無影響;對o類, 在輸出時加前綴o 對x類,在輸出時加前綴0x;對e,g,f 類當(dāng)結(jié)果有小數(shù)時才給出小數(shù)點3.輸出最小寬度用十進(jìn)制整數(shù)來表示輸出的最少位數(shù)。 若實際位數(shù)多于定義的寬度,則按實際位數(shù)輸出, 若實際位數(shù)少于定義的寬度則補(bǔ)以空格或0。4.精度精度格式符以“.”開頭,后跟十進(jìn)制整數(shù)。本項的意義是:如果輸出數(shù)字,則表示小數(shù)的位數(shù);如果輸出的是字符, 則表示輸出字符的個數(shù);若實際位數(shù)大于所定義的精度數(shù),則截去超過的

11、部分。5.長度長度格式符為h,l兩種,h表示按短整型量輸出,l表示按長整型量輸出。void main()int a=15;float b=138.3576278;double c=35648256.3645687;char d=p;printf(a=%d,%5d,%o,%xn,a,a,a,a);printf(b=%f,%lf,%5.4lf,%en,b,b,b,b);printf(c=%lf,%f,%8.4lfn,c,c,c);printf(d=%c,%8cn,d,d); a-15b-138.3576278c-35648256.3645687d-p main()int a=29;float b=

12、1243.2341;double c=24212345.24232;char c=hprintf(a=%d,%5d,%o,%xn,a,a,a,a);printf(b=%f,%lf,%5.4lf,%en,b,b,b,b);printf(c=%lf,%f,%8.4lfn,c,c,c);printf(d=%c,%8cn,d,d);本例第七行中以四種格式輸出整型變量a的值,其中“%5d ”要求輸出寬度為5,而a值為15只有兩位故補(bǔ)三個空格。 第八行中以四種格式輸出實型量b的值。其中“%f”和“%lf ”格式的輸出相同,說明“l(fā)”符對“f”類型無影響。“%5.4lf”指定輸出寬度為5,精度為4,由于實際

13、長度超過5故應(yīng)該按實際位數(shù)輸出,小數(shù)位數(shù)超過4位部分被截去。第九行輸出雙精度實數(shù),“%8.4lf ”由于指定精度為4位故截去了超過4位的部分。第十行輸出字符量d,其中“%bc ”指定輸出寬度為8故在輸出字符p之前補(bǔ)加7個空格。使用printf函數(shù)時還要注意一個問題, 那就是輸出表列中的求值順序。不同的編譯系統(tǒng)不一定相同,可以從左到右, 也可從右到左。Turbo C是按從右到左進(jìn)行的。如把例2.13改寫如下述形式:void main()int i=8;printf(%dn%dn%dn%dn%dn%dn,+i,-i,i-,i+,-i-); i-8這個程序與例2.13相比只是把多個printf語句改

14、一個printf 語句輸出。但從結(jié)果可以看出是不同的。為什么結(jié)果會不同呢?就是因為printf函數(shù)對輸出表中各量求值的順序是自右至左進(jìn)行 的。在式中,先對最后一項“-i-”求值,結(jié)果為-8,然后i自減1后為7。 再對“-i+”項求值得-7,然后i自增1后為8。再對“i-”項求值得8,然后i再自減1后為7。再求“i+”項得7,然后I再自增1后為8。 再求“-i”項,i先自減1后輸出,輸出值為7。 最后才求輸出表列中的第一項“+i”,此時i自增1后輸出8。但是必須注意, 求值順序雖是自右至左,但是輸出順序還是從左至右, 因此得到的結(jié)果是上述輸出結(jié)果。字符輸出函數(shù)putchar 函數(shù)putchar

15、函數(shù)是字符輸出函數(shù), 其功能是在顯示器上輸出單個字符。其一般形式為: putchar(字符變量) 例如:putchar(A); 輸出大寫字母Aputchar(x); 輸出字符變量x的值putchar(n); 換行 對控制字符則執(zhí)行控制功能,不在屏幕上顯示。 使用本函數(shù)前必須要用文件包含命令:#include#include void main()char a=B,b=o,c=k;putchar(a);putchar(b);putchar(b);putchar(c);putchar(t);putchar(a);putchar(b);putchar(n);putchar(b);putchar(c)

16、;數(shù)據(jù)輸入語句語言的數(shù)據(jù)輸入也是由函數(shù)語句完成的。 本節(jié)介紹從標(biāo)準(zhǔn)輸入設(shè)備鍵盤上輸入數(shù)據(jù)的函數(shù)scanf和getchar。 scanf函數(shù) scanf函數(shù)稱為格式輸入函數(shù),即按用戶指定的格式從鍵盤上把數(shù)據(jù)輸入到指定的變量之中。一、scanf函數(shù)的一般形式scanf函數(shù)是一個標(biāo)準(zhǔn)庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中,與printf函數(shù)相同,語言也允許在使用scanf函數(shù)之前不必包含stdio.h文件。scanf函數(shù)的一般形式為: scanf(“格式控制字符串”,地址表列); 其中,格式控制字符串的作用與printf函數(shù)相同,但不能顯示非格式字符串, 也就是不能顯示提示字符串。地址表列

17、中給出各變量的地址。 地址是由地址運(yùn)算符“&”后跟變量名組成的。例如,&a,&b分別表示變量a和變量b 的地址。這個地址就是編譯系統(tǒng)在內(nèi)存中給a,b變量分配的地址。在語言中,使用了地址這個概念,這是與其它語言不同的。 應(yīng)該把變量的值和變量的地址這兩個不同的概念區(qū)別開來。變量的地址是C編譯系統(tǒng)分配的,用戶不必關(guān)心具體的地址是多少。 變量的地址和變量值的關(guān)系如下: &a-a567 a為變量名,567是變量的值?amp;a是變量a的地址。在賦值表達(dá)式中給變量賦值,如: a=567 在賦值號左邊是變量名,不能寫地址,而scanf函數(shù)在本質(zhì)上也是給變量賦值,但要求寫變量的地址,如&a。 這兩者在形式上是

18、不同的。&是一個取地址運(yùn)算符,&a是一個表達(dá)式,其功能是求變量的地址。void main()int a,b,c;printf(input a,b,cn);scanf(%d%d%d,&a,&b,&c);printf(a=%d,b=%d,c=%d,a,b,c);注意&的用法!在本例中,由于scanf函數(shù)本身不能顯示提示串,故先用printf語句在屏幕上輸出提示,請用戶輸入a、b、c的值。執(zhí)行scanf語句,則退出TC屏幕進(jìn)入用戶屏幕等待用戶輸入。用戶輸入7、8、9后按下回車鍵,此時,系統(tǒng)又將返回TC屏幕。在scanf語句的格式串中由于沒有非格式字符在“%d%d%d”之間作輸入時的間隔, 因此在輸入

19、時要用一個以上的空格或回車鍵作為每兩個輸入數(shù)之間的間隔。如: 7 8 9或789格式字符串格式字符串的一般形式為: %*輸入數(shù)據(jù)寬度長度類型 其中有方括號的項為任選項。各項的意義如下:1.類型表示輸入數(shù)據(jù)的類型,其格式符和意義下表所示。格式 字符意義d 輸入十進(jìn)制整數(shù)o 輸入八進(jìn)制整數(shù)x 輸入十六進(jìn)制整數(shù)u 輸入無符號十進(jìn)制整數(shù)f或e 輸入實型數(shù)(用小數(shù)形式或指數(shù)形式)c 輸入單個字符s 輸入字符串2.“*”符用以表示該輸入項讀入后不賦予相應(yīng)的變量,即跳過該輸入值。 如 scanf(%d %*d %d,&a,&b);當(dāng)輸入為:1 2 3 時,把1賦予a,2被跳過,3賦予b。3.寬度用十進(jìn)制整數(shù)

20、指定輸入的寬度(即字符數(shù))。例如: scanf(%5d,&a);輸入:12345678只把12345賦予變量a,其余部分被截去。又如: scanf(%4d%4d,&a,&b);輸入:12345678將把1234賦予a,而把5678賦予b。4.長度長度格式符為l和h,l表示輸入長整型數(shù)據(jù)(如%ld) 和雙精度浮點數(shù)(如%lf)。h表示輸入短整型數(shù)據(jù)。使用scanf函數(shù)還必須注意以下幾點:a. scanf函數(shù)中沒有精度控制,如: scanf(%5.2f,&a); 是非法的。不能企圖用此語句輸入小數(shù)為2位的實數(shù)。b. scanf中要求給出變量地址,如給出變量名則會出錯。如 scanf(%d,a);是

21、非法的,應(yīng)改為scnaf(%d,&a);才是合法的。c. 在輸入多個數(shù)值數(shù)據(jù)時,若格式控制串中沒有非格式字符作輸入數(shù)據(jù)之間的間隔則可用空格,TAB或回車作間隔。C編譯在碰到空格,TAB,回車或非法數(shù)據(jù)(如對“%d”輸入“12A”時,A即為非法數(shù)據(jù))時即認(rèn)為該數(shù)據(jù)結(jié)束。d. 在輸入字符數(shù)據(jù)時,若格式控制串中無非格式字符,則認(rèn)為所有輸入的字符均為有效字符。例如:scanf(%c%c%c,&a,&b,&c);輸入為:d e f則把d賦予a, f賦予b,e賦予c。只有當(dāng)輸入為:def時,才能把d賦于a,e賦予b,f賦予c。 如果在格式控制中加入空格作為間隔,如 scanf (%c %c %c,&a,&

22、b,&c);則輸入時各數(shù)據(jù)之間可加空格。void main()char a,b;printf(input character a,bn);scanf(%c%c,&a,&b);printf(%c%cn,a,b);scanf(C14F14%c%c,&a,&b);printf(%c%cn,a,b); 由于scanf函數(shù)%c%c中沒有空格,輸入M N,結(jié)果輸出只有M。而輸入改為MN時則可輸出MN兩字符,見下面的輸入運(yùn)行情況: input character a,bMNMNvoid main()char a,b;printf(input character a,bn);scanf(%c %c,&a,&b

23、);printf(n%c%cn,a,b);scanf(%c %c,&a,&b); 本例表示scanf格式控制串%c %c之間有空格時, 輸入的數(shù)據(jù)之間可以有空格間隔。e. 如果格式控制串中有非格式字符則輸入時也要輸入該非格式字符。例如:scanf(%d,%d,%d,&a,&b,&c); 其中用非格式符“ , ”作間隔符,故輸入時應(yīng)為: 5,6,7又如: scanf(a=%d,b=%d,c=%d,&a,&b,&c);則輸入應(yīng)為a=5,b=6,c=7g. 如輸入的數(shù)據(jù)與輸出的類型不一致時,雖然編譯能夠通過,但結(jié)果將不正確。void main()int a;printf(input a number

24、n);scanf(%d,&a);printf(%ld,a);由于輸入數(shù)據(jù)類型為整型, 而輸出語句的格式串中說明為長整型,因此輸出結(jié)果和輸入數(shù)據(jù)不符。如改動程序如下:void main()long a;printf(input a long integern);scanf(%ld,&a);printf(%ld,a);運(yùn)行結(jié)果為:input a long integer12345678901234567890 當(dāng)輸入數(shù)據(jù)改為長整型后,輸入輸出數(shù)據(jù)相等。鍵盤輸入函數(shù)getchar函數(shù)getchar函數(shù)的功能是從鍵盤上輸入一個字符。其一般形式為: getchar(); 通常把輸入的字符賦予一個字符變量

25、,構(gòu)成賦值語句,如:char c;c=getchar();#includevoid main()char c;printf(input a charactern);c=getchar();putchar(c);使用getchar函數(shù)還應(yīng)注意幾個問題:1.getchar函數(shù)只能接受單個字符,輸入數(shù)字也按字符處理。輸入多于一個字符時,只接收第一個字符。2.使用本函數(shù)前必須包含文件“stdio.h”。3.在TC屏幕下運(yùn)行含本函數(shù)程序時,將退出TC 屏幕進(jìn)入用戶屏幕等待用戶輸入。輸入完畢再返回TC屏幕。void main()char a,b,c;printf(input character a,b,c

26、n);scanf(%c %c %c,&a,&b,&c);printf(%d,%d,%dn%c,%c,%cn,a,b,c,a-32,b-32,c-32);輸入三個小寫字母輸出其ASCII碼和對應(yīng)的大寫字母。void main()int a;long b;float f;double d;char c;printf(%d,%d,%d,%d,%d,sizeof(a),sizeof(b),sizeof(f),sizeof(d),sizeof(c);輸出各種數(shù)據(jù)類型的字節(jié)長度。分支結(jié)構(gòu)程序關(guān)系運(yùn)算符和表達(dá)式在程序中經(jīng)常需要比較兩個量的大小關(guān)系, 以決定程序下一步的工作。比較兩個量的運(yùn)算符稱為關(guān)系運(yùn)算符。

27、 在語言中有以下關(guān)系運(yùn)算符: 小于 大于= 大于或等于= 等于!= 不等于關(guān)系運(yùn)算符都是雙目運(yùn)算符,其結(jié)合性均為左結(jié)合。 關(guān)系運(yùn)算符的優(yōu)先級低于算術(shù)運(yùn)算符,高于賦值運(yùn)算符。 在六個關(guān)系運(yùn)算符中,,=的優(yōu)先級相同,高于=和!=,=和!=的優(yōu)先級相同。關(guān)系表達(dá)式關(guān)系表達(dá)式的一般形式為: 表達(dá)式 關(guān)系運(yùn)算符 表達(dá)式 例如:a+bc-d,x3/2,a+1(bc),a!=(c=d)等。關(guān)系表達(dá)式的值是“真”和“假”,用“1”和“0”表示。如: 50的值為“真”,即為1。(a=3)(b=5)由于35不成立,故其值為假,即為0。void main()char c=k;int i=1,j=2,k=3;floa

28、t x=3e+5,y=0.85;printf(%d,%dn,a+5=k+1);printf(%d,%dn,1j5,x-5.25b & cd等價于(ab) & (cd)!b=c|da等價于(!b)=c)|(dc & x+yc) & (x+y)0 & 42,由于50為真,42也為真,相與的結(jié)果也為真。2.或運(yùn)算|參與運(yùn)算的兩個量只要有一個為真,結(jié)果就為真。 兩個量都為假時,結(jié)果為假。例如:50|58,由于50為真,相或的結(jié)果也就為真3.非運(yùn)算!參與運(yùn)算量為真時,結(jié)果為假;參與運(yùn)算量為假時,結(jié)果為真。例如:!(50)的結(jié)果為假。雖然編譯在給出邏輯運(yùn)算值時,以“1”代表“真”,“0 ”代表“假”。 但

29、反過來在判斷一個量是為“真”還是為“假”時,以“0”代表“假”,以非“0”的數(shù)值作為“真”。例如:由于5和3均為非“0”因此5&3的值為“真”,即為1。又如:5|0的值為“真”,即為1。邏輯表達(dá)式邏輯表達(dá)式的一般形式為: 表達(dá)式 邏輯運(yùn)算符 表達(dá)式 其中的表達(dá)式可以又是邏輯表達(dá)式,從而組成了嵌套的情形。例如:(a&b)&c根據(jù)邏輯運(yùn)算符的左結(jié)合性,上式也可寫為: a&b&c 邏輯表達(dá)式的值是式中各種邏輯運(yùn)算的最后值,以“1”和“0”分別代表“真”和“假”。void main()char c=k;int i=1,j=2,k=3;float x=3e+5,y=0.85;printf(%d,%dn,

30、!x*!y,!x);printf(%d,%dn,x|i&j-3,ij&xy);printf(%d,%dn,i=5&c&(j=8),x+y|i+j+k); 本例中!x和!y分別為0,!x*!y也為0,故其輸出值為0。由于x為非0,故!x的邏輯值為0。對x| i & j-3式,先計算j-3的值為非0,再求i & j-3的邏輯值為1,故x|i&j-3的邏輯值為 1。對ij&xy式,由于ij的值為1,而xy為0故表達(dá)式的值為1,0相與,最后為0,對i=5&c&(j=8)式,由于i=5為假,即值為0, 該表達(dá)式由兩個與運(yùn)算組成,所以整個表達(dá)式的值為0。對于式x+ y|i+j+k由于x+y的值為非0,故整

31、個或表達(dá)式的值為1。If語句用if語句可以構(gòu)成分支結(jié)構(gòu)。它根據(jù)給定的條件進(jìn)行判斷, 以決定執(zhí)行某個分支程序段。語言的if語句有三種基本形式。1.第一種形式為基本形式 if(表達(dá)式) 語句; 其語義是:如果表達(dá)式的值為真,則執(zhí)行其后的語句, 否則不執(zhí)行該語句。其過程可表示為下圖void main()int a,b,max;printf(n input two numbers: );scanf(%d%d,&a,&b);max=a;if (maxb) max=b;printf(max=%d,max);輸入兩個整數(shù),輸出其中的大數(shù)。scanf(%d%d,&a,&b);max=a;if (maxb)pr

32、intf(max=%dn,a);elseprintf(max=%dn,b);輸入兩個整數(shù),輸出其中的大數(shù)。改用if-else語句判別a,b的大小,若a大,則輸出a,否則輸出b。3.第三種形式為if-else-if形式前二種形式的if語句一般都用于兩個分支的情況。 當(dāng)有多個分支選擇時,可采用if-else-if語句,其一般形式為:if(表達(dá)式1)語句1;else if(表達(dá)式2)語句2;else if(表達(dá)式3)語句3;else if(表達(dá)式m)語句m;else語句n;其語義是:依次判斷表達(dá)式的值,當(dāng)出現(xiàn)某個值為真時, 則執(zhí)行其對應(yīng)的語句。然后跳到整個if語句之外繼續(xù)執(zhí)行程序。 如果所有的表達(dá)式

33、均為假,則執(zhí)行語句n 。 然后繼續(xù)執(zhí)行后續(xù)程序。 if-else-if語句的執(zhí)行過程如圖33所示。#includestdio.hvoid main()char c;printf(input a character: );c=getchar();if(c=0&c=A&c=a&c=z)printf(This is a small lettern);elseprintf(This is an other charactern);if(c=0&c=A&c=a&cb)a+;b+;else a=0;b=10;語句的嵌套當(dāng)if語句中的執(zhí)行語句又是if語句時,則構(gòu)成了if 語句嵌套的情形。其一般形式可表示如下

34、:if(表達(dá)式)if語句;或者為if(表達(dá)式)if語句;elseif語句;在嵌套內(nèi)的if語句可能又是if-else型的,這將會出現(xiàn)多個if和多個else重疊的情況,這時要特別注意if和else的配對問題。例如:if(表達(dá)式1)if(表達(dá)式2)語句1;else語句2;其中的else究竟是與哪一個if配對呢?應(yīng)該理解為:還是應(yīng)理解為:if(表達(dá)式1) if(表達(dá)式1) if(表達(dá)式2) if(表達(dá)式2) 語句1; 語句1;else else 語句2; 語句2;為了避免這種二義性,語言規(guī)定,else 總是與它前面最近的if配對,因此對上述例子應(yīng)按前一種情況理解。void main()int a,b;

35、printf(please input A,B: );scanf(%d%d,&a,&b);if(a!=b)if(ab) printf(ABn);else printf(Ab) printf(ABn);else printf(AB、Ab) printf(ABn);else printf(Ab) max=a;else max=b;可用條件表達(dá)式寫為 max=(ab)?a:b; 執(zhí)行該語句的語義是:如ab為真,則把a(bǔ)賦予max,否則把b 賦予max。使用條件表達(dá)式時,還應(yīng)注意以下幾點:1. 條件運(yùn)算符的運(yùn)算優(yōu)先級低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符,但高于賦值符。因此 max=(ab)?a:b可以去掉括號而寫

36、為 max=ab?a:b2. 條件運(yùn)算符?和:是一對運(yùn)算符,不能分開單獨(dú)使用。3. 條件運(yùn)算符的結(jié)合方向是自右至左。例如:ab?a:cd?c:d應(yīng)理解為ab?a:(cd?c:d) 這也就是條件表達(dá)式嵌套的情形,即其中的表達(dá)式3又是一個條件表達(dá)式。void main()int a,b,max;printf(n input two numbers: );scanf(%d%d,&a,&b);printf(max=%d,ab?a:b);用條件表達(dá)式對上例重新編程,輸出兩個數(shù)中的大數(shù)。語句語言還提供了另一種用于多分支選擇的switch語句, 其一般形式為:switch(表達(dá)式)case常量表達(dá)式1: 語

37、句1;case常量表達(dá)式2: 語句2;case常量表達(dá)式n: 語句n;default : 語句n+1;其語義是:計算表達(dá)式的值。 并逐個與其后的常量表達(dá)式值相比較,當(dāng)表達(dá)式的值與某個常量表達(dá)式的值相等時, 即執(zhí)行其后的語句,然后不再進(jìn)行判斷,繼續(xù)執(zhí)行后面所有case后的語句。 如表達(dá)式的值與所有case后的常量表達(dá)式均不相同時,則執(zhí)行default后的語句。void main()int a;printf(input integer number: );scanf(%d,&a);switch (a)case 1:printf(Mondayn);case 2:printf(Tuesdayn);ca

38、se 3:printf(Wednesdayn);case 4:printf(Thursdayn);case 5:printf(Fridayn);case 6:printf(Saturdayn);case 7:printf(Sundayn);default:printf(errorn);本程序是要求輸入一個數(shù)字,輸出一個英文單詞。但是當(dāng)輸入3之后,卻執(zhí)行了case3以及以后的所有語句,輸出了Wednesday 及以后的所有單詞。這當(dāng)然是不希望的。為什么會出現(xiàn)這種情況呢?這恰恰反應(yīng)了switch語句的一個特點。在switch語句中,“case 常量表達(dá)式”只相當(dāng)于一個語句標(biāo)號, 表達(dá)式的值和某標(biāo)號

39、相等則轉(zhuǎn)向該標(biāo)號執(zhí)行,但不能在執(zhí)行完該標(biāo)號的語句后自動跳出整個switch 語句,所以出現(xiàn)了繼續(xù)執(zhí)行所有后面case語句的情況。 這是與前面介紹的if語句完全不同的,應(yīng)特別注意。為了避免上述情況, 語言還提供了一種break語句,專用于跳出switch語句,break 語句只有關(guān)鍵字break,沒有參數(shù)。在后面還將詳細(xì)介紹。修改例題的程序,在每一case語句之后增加break 語句, 使每一次執(zhí)行之后均可跳出switch語句,從而避免輸出不應(yīng)有的結(jié)果。void main()int a;printf(input integer number: );scanf(%d,&a);switch (a)c

40、ase 1:printf(Mondayn);break;case 2:printf(Tuesdayn); break;case 3:printf(Wednesdayn);break;case 4:printf(Thursdayn);break;case 5:printf(Fridayn);break;case 6:printf(Saturdayn);break;case 7:printf(Sundayn);break;default:printf(errorn);在使用switch語句時還應(yīng)注意以下幾點:1.在case后的各常量表達(dá)式的值不能相同,否則會出現(xiàn)錯誤。2.在case后,允許有多個語

41、句,可以不用括起來。3.各case和default子句的先后順序可以變動,而不會影響程序執(zhí)行結(jié)果。4.default子句可以省略不用。程序舉例輸入三個整數(shù),輸出最大數(shù)和最小數(shù)。void main()int a,b,c,max,min;printf(input three numbers: );scanf(%d%d%d,&a,&b,&c);if(ab)max=a;min=b;elsemax=b;min=a;if(maxc)min=c;printf(max=%dnmin=%d,max,min);本程序中,首先比較輸入的a,b的大小,并把大數(shù)裝入max, 小數(shù)裝入min中,然后再與c比較,若max小

42、于c,則把c賦予max;如果c小于min,則把c賦予min。因此max內(nèi)總是最大數(shù),而min內(nèi)總是最小數(shù)。最后輸出max和min的值即可。 計算器程序。用戶輸入運(yùn)算數(shù)和四則運(yùn)算符, 輸出計算結(jié)果。void main()float a,b,s;char c;printf(input expression: a+(-,*,/)b n);scanf(%f%c%f,&a,&c,&b);switch(c)case +: printf(%fn,a+b);break;case -: printf(%fn,a-b);break;case *: printf(%fn,a*b);break;case /: pri

43、ntf(%fn,a/b);break;default: printf(input errorn);float a,b,s;char c;printf(input expression: a+(-,*,/)b n);scanf(%f%c%f,&a,&c,&b);switch(c)case +: printf(%fn,a+b);break;case -: printf(%fn,a-b);break;case *: printf(%fn,a*b);break;case /: printf(%fn,a/b);break;default: printf(input errorn);本例可用于四則運(yùn)算求值

44、。switch語句用于判斷運(yùn)算符, 然后輸出運(yùn)算值。當(dāng)輸入運(yùn)算符不是+,-,*,/時給出錯誤提示。循環(huán)結(jié)構(gòu)程序循環(huán)結(jié)構(gòu)是程序中一種很重要的結(jié)構(gòu)。其特點是, 在給定條件成立時,反復(fù)執(zhí)行某程序段,直到條件不成立為止。 給定的條件稱為循環(huán)條件,反復(fù)執(zhí)行的程序段稱為循環(huán)體。 語言提供了多種循環(huán)語句,可以組成各種不同形式的循環(huán)結(jié)構(gòu)。語句while語句的一般形式為: while(表達(dá)式)語句; 其中表達(dá)式是循環(huán)條件,語句為循環(huán)體。while語句的語義是:計算表達(dá)式的值,當(dāng)值為真(非0)時, 執(zhí)行循環(huán)體語句。其執(zhí)行過程可用圖34表示。 統(tǒng)計從鍵盤輸入一行字符的個數(shù)。#include void main()i

45、nt n=0;printf(input a string:n);while(getchar()!=n) n+;printf(%d,n); int n=0;printf(input a string:n);while(getchar()!=n)n+;printf(%d,n);本例程序中的循環(huán)條件為getchar()!=n,其意義是, 只要從鍵盤輸入的字符不是回車就繼續(xù)循環(huán)。循環(huán)體n+完成對輸入字符個數(shù)計數(shù)。從而程序?qū)崿F(xiàn)了對輸入一行字符的字符個數(shù)計數(shù)。使用while語句應(yīng)注意以下幾點:1.while語句中的表達(dá)式一般是關(guān)系表達(dá)或邏輯表達(dá)式,只要表達(dá)式的值為真(非0)即可繼續(xù)循環(huán)。void main()int a=0,n;printf(n input n: );scanf(%d,&n);while (n-)printf(%d ,a+*2); int a=0,n;printf(n input n: );scanf(%d,&n);while (n-)printf(%d ,a+*2);本例程序?qū)?zhí)行n次循環(huán),每執(zhí)行一次,n值減1。循環(huán)體輸出表達(dá)式

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論