C語(yǔ)言分塊教程 C語(yǔ)言程序設(shè)計(jì)初步.doc_第1頁(yè)
C語(yǔ)言分塊教程 C語(yǔ)言程序設(shè)計(jì)初步.doc_第2頁(yè)
C語(yǔ)言分塊教程 C語(yǔ)言程序設(shè)計(jì)初步.doc_第3頁(yè)
C語(yǔ)言分塊教程 C語(yǔ)言程序設(shè)計(jì)初步.doc_第4頁(yè)
C語(yǔ)言分塊教程 C語(yǔ)言程序設(shè)計(jì)初步.doc_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第三章: 語(yǔ)言程序設(shè)計(jì)初步語(yǔ)言程序設(shè)計(jì)本課介紹語(yǔ)言程序設(shè)計(jì)的基本方法和基本的程序語(yǔ)句。從程序流程的角度來(lái)看,程序可以分為三種基本結(jié)構(gòu), 即順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。 這三種基本結(jié)構(gòu)可以組成所有的各種復(fù)雜程序。語(yǔ)言提供了多種語(yǔ)句來(lái)實(shí)現(xiàn)這些程序結(jié)構(gòu)。 本章介紹這些基本語(yǔ)句及其應(yīng)用,使讀者對(duì)程序有一個(gè)初步的認(rèn)識(shí), 為后面各章的學(xué)習(xí)打下基礎(chǔ)。程序的語(yǔ)句程序的執(zhí)行部分是由語(yǔ)句組成的。 程序的功能也是由執(zhí)行語(yǔ)句實(shí)現(xiàn)的。C語(yǔ)句可分為以下五類:1.表達(dá)式語(yǔ)句2.函數(shù)調(diào)用語(yǔ)句3.控制語(yǔ)句4.復(fù)合語(yǔ)句5.空語(yǔ)句1.表達(dá)式語(yǔ)句表達(dá)式語(yǔ)句由表達(dá)式加上分號(hào)“;”組成。其一般形式為: 表達(dá)式; 執(zhí)行表達(dá)式語(yǔ)句就是計(jì)算表達(dá)式的值。例如: x=y+z; 賦值語(yǔ)句y+z; 加法運(yùn)算語(yǔ)句,但計(jì)算結(jié)果不能保留,無(wú)實(shí)際意義i+; 自增1語(yǔ)句,i值增12.函數(shù)調(diào)用語(yǔ)句由函數(shù)名、實(shí)際參數(shù)加上分號(hào)“;”組成。其一般形式為: 函數(shù)名(實(shí)際參數(shù)表); 執(zhí)行函數(shù)語(yǔ)句就是調(diào)用函數(shù)體并把實(shí)際參數(shù)賦予函數(shù)定義中的形式參數(shù),然后執(zhí)行被調(diào)函數(shù)體中的語(yǔ)句,求取函數(shù)值。(在第五章函數(shù)中再詳細(xì)介紹)例如printf(C Program);調(diào)用庫(kù)函數(shù),輸出字符串。3.控制語(yǔ)句控制語(yǔ)句用于控制程序的流程, 以實(shí)現(xiàn)程序的各種結(jié)構(gòu)方式。它們由特定的語(yǔ)句定義符組成。語(yǔ)言有九種控制語(yǔ)句。 可分成以下三類:(1) 條件判斷語(yǔ)句if語(yǔ)句,switch語(yǔ)句(2) 循環(huán)執(zhí)行語(yǔ)句do while語(yǔ)句,while語(yǔ)句,for語(yǔ)句(3) 轉(zhuǎn)向語(yǔ)句break語(yǔ)句,goto語(yǔ)句,continue語(yǔ)句,return語(yǔ)句4.復(fù)合語(yǔ)句把多個(gè)語(yǔ)句用括號(hào)括起來(lái)組成的一個(gè)語(yǔ)句稱復(fù)合語(yǔ)句。 在程序中應(yīng)把復(fù)合語(yǔ)句看成是單條語(yǔ)句,而不是多條語(yǔ)句,例如 x=y+z;a=b+c;printf(“%d%d”,x,a);是一條復(fù)合語(yǔ)句。復(fù)合語(yǔ)句內(nèi)的各條語(yǔ)句都必須以分號(hào)“;”結(jié)尾,在括號(hào)“”外不能加分號(hào)。5.空語(yǔ)句只有分號(hào)“;”組成的語(yǔ)句稱為空語(yǔ)句。 空語(yǔ)句是什么也不執(zhí)行的語(yǔ)句。在程序中空語(yǔ)句可用來(lái)作空循環(huán)體。例如 while(getchar()!=n); 本語(yǔ)句的功能是,只要從鍵盤輸入的字符不是回車則重新輸入。這里的循環(huán)體為空語(yǔ)句。賦值語(yǔ)句賦值語(yǔ)句是由賦值表達(dá)式再加上分號(hào)構(gòu)成的表達(dá)式語(yǔ)句。 其一般形式為: 變量=表達(dá)式; 賦值語(yǔ)句的功能和特點(diǎn)都與賦值表達(dá)式相同。 它是程序中使用最多的語(yǔ)句之一。 在賦值語(yǔ)句的使用中需要注意以下幾點(diǎn):1.由于在賦值符“=”右邊的表達(dá)式也可以又是一個(gè)賦值表達(dá)式,因此,下述形式 變量=(變量=表達(dá)式); 是成立的,從而形成嵌套的情形。其展開(kāi)之后的一般形式為: 變量=變量=表達(dá)式; 例如:a=b=c=d=e=5;按照賦值運(yùn)算符的右接合性,因此實(shí)際上等效于: e=5;d=e;c=d;b=c;a=b;2.注意在變量說(shuō)明中給變量賦初值和賦值語(yǔ)句的區(qū)別。給變量賦初值是變量說(shuō)明的一部分,賦初值后的變量與其后的其它同類變量之間仍必須用逗號(hào)間隔,而賦值語(yǔ)句則必須用分號(hào)結(jié)尾。 3.在變量說(shuō)明中,不允許連續(xù)給多個(gè)變量賦初值。 如下述說(shuō)明是錯(cuò)誤的: int a=b=c=5 必須寫為 int a=5,b=5,c=5; 而賦值語(yǔ)句允許連續(xù)賦值4.注意賦值表達(dá)式和賦值語(yǔ)句的區(qū)別。賦值表達(dá)式是一種表達(dá)式,它可以出現(xiàn)在任何允許表達(dá)式出現(xiàn)的地方,而賦值語(yǔ)句則不能。下述語(yǔ)句是合法的: if(x=y+5)0) z=x; 語(yǔ)句的功能是,若表達(dá)式x=y+5大于0則z=x。下述語(yǔ)句是非法的: if(x=y+5;)0) z=x; 因?yàn)?y+5;是語(yǔ)句,不能出現(xiàn)在表達(dá)式中。數(shù)據(jù)輸出語(yǔ)句本小節(jié)介紹的是向標(biāo)準(zhǔn)輸出設(shè)備顯示器輸出數(shù)據(jù)的語(yǔ)句。在語(yǔ)言中,所有的數(shù)據(jù)輸入輸出都是由庫(kù)函數(shù)完成的。 因此都是函數(shù)語(yǔ)句。本小節(jié)先介紹printf函數(shù)和putchar函數(shù)。printf函數(shù)printf函數(shù)稱為格式輸出函數(shù),其關(guān)鍵字最末一個(gè)字母f即為“格式”(format)之意。其功能是按用戶指定的格式, 把指定的數(shù)據(jù)顯示到顯示器屏幕上。在前面的例題中我們已多次使用過(guò)這個(gè)函數(shù)。一、printf函數(shù)調(diào)用的一般形式printf函數(shù)是一個(gè)標(biāo)準(zhǔn)庫(kù)函數(shù),它的函數(shù)原型在頭文件“stdio.h”中。但作為一個(gè)特例,不要求在使用 printf 函數(shù)之前必須包含stdio.h文件。printf函數(shù)調(diào)用的一般形式為: printf(“格式控制字符串”,輸出表列)其中格式控制字符串用于指定輸出格式。 格式控制串可由格式字符串和非格式字符串兩種組成。格式字符串是以%開(kāi)頭的字符串,在%后面跟有各種格式字符,以說(shuō)明輸出數(shù)據(jù)的類型、形式、長(zhǎng)度、小數(shù)位數(shù)等。如“%d”表示按十進(jìn)制整型輸出,“%ld”表示按十進(jìn)制長(zhǎng)整型輸出,“%c”表示按字符型輸出等。后面將專門給予討論。非格式字符串在輸出時(shí)原樣照印,在顯示中起提示作用。 輸出表列中給出了各個(gè)輸出項(xiàng), 要求格式字符串和各輸出項(xiàng)在數(shù)量和類型上應(yīng)該一一對(duì)應(yīng)。void main()int a=88,b=89;printf(%d %dn,a,b);printf(%d,%dn,a,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é)果也不相同。第四行的輸出語(yǔ)句格式控制串中,兩格式串%d 之間加了一個(gè)空格(非格式字符),所以輸出的a,b值之間有一個(gè)空格。第五行的printf語(yǔ)句格式控制串中加入的是非格式字符逗號(hào), 因此輸出的a,b值之間加了一個(gè)逗號(hào)。第六行的格式串要求按字符型輸出 a,b值。第七行中為了提示輸出結(jié)果又增加了非格式字符串。二、格式字符串在Turbo C中格式字符串的一般形式為: 標(biāo)志輸出最小寬度.精度長(zhǎng)度類型 其中方括號(hào)中的項(xiàng)為可選項(xiàng)。各項(xiàng)的意義介紹如下:1.類型類型字符用以表示輸出數(shù)據(jù)的類型,其格式符和意義下表所示:表示輸出類型的格式字符 格式字符意義d 以十進(jìn)制形式輸出帶符號(hào)整數(shù)(正數(shù)不輸出符號(hào))o 以八進(jìn)制形式輸出無(wú)符號(hào)整數(shù)(不輸出前綴O)x 以十六進(jìn)制形式輸出無(wú)符號(hào)整數(shù)(不輸出前綴OX)u 以十進(jìn)制形式輸出無(wú)符號(hào)整數(shù)f 以小數(shù)形式輸出單、雙精度實(shí)數(shù)e 以指數(shù)形式輸出單、雙精度實(shí)數(shù)g 以%f%e中較短的輸出寬度輸出單、雙精度實(shí)數(shù)c 輸出單個(gè)字符s 輸出字符串2.標(biāo)志標(biāo)志字符為-、+、#、空格四種,其意義下表所示: 標(biāo)志格式字符 標(biāo) 志 意 義- 結(jié)果左對(duì)齊,右邊填空格+ 輸出符號(hào)(正號(hào)或負(fù)號(hào))空格輸出值為正時(shí)冠以空格,為負(fù)時(shí)冠以負(fù)號(hào)# 對(duì)c,s,d,u類無(wú)影響;對(duì)o類, 在輸出時(shí)加前綴o 對(duì)x類,在輸出時(shí)加前綴0x;對(duì)e,g,f 類當(dāng)結(jié)果有小數(shù)時(shí)才給出小數(shù)點(diǎn)3.輸出最小寬度用十進(jìn)制整數(shù)來(lái)表示輸出的最少位數(shù)。 若實(shí)際位數(shù)多于定義的寬度,則按實(shí)際位數(shù)輸出, 若實(shí)際位數(shù)少于定義的寬度則補(bǔ)以空格或0。4.精度精度格式符以“.”開(kāi)頭,后跟十進(jìn)制整數(shù)。本項(xiàng)的意義是:如果輸出數(shù)字,則表示小數(shù)的位數(shù);如果輸出的是字符, 則表示輸出字符的個(gè)數(shù);若實(shí)際位數(shù)大于所定義的精度數(shù),則截去超過(guò)的部分。5.長(zhǎng)度長(zhǎng)度格式符為h,l兩種,h表示按短整型量輸出,l表示按長(zhǎng)整型量輸出。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-pmain()int a=29;float b=1243.2341;double c=24212345.24232;char d=h;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的值,其中“%5d ”要求輸出寬度為5,而a值為15只有兩位故補(bǔ)三個(gè)空格。 第八行中以四種格式輸出實(shí)型量b的值。其中“%f”和“%lf ”格式的輸出相同,說(shuō)明“l(fā)”符對(duì)“f”類型無(wú)影響。“%5.4lf”指定輸出寬度為5,精度為4,由于實(shí)際長(zhǎng)度超過(guò)5故應(yīng)該按實(shí)際位數(shù)輸出,小數(shù)位數(shù)超過(guò)4位部分被截去。第九行輸出雙精度實(shí)數(shù),“%8.4lf ”由于指定精度為4位故截去了超過(guò)4位的部分。第十行輸出字符量d,其中“%bc ”指定輸出寬度為8故在輸出字符p之前補(bǔ)加7個(gè)空格。使用printf函數(shù)時(shí)還要注意一個(gè)問(wèn)題, 那就是輸出表列中的求值順序。不同的編譯系統(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這個(gè)程序與例2.13相比只是把多個(gè)printf語(yǔ)句改一個(gè)printf 語(yǔ)句輸出。但從結(jié)果可以看出是不同的。為什么結(jié)果會(huì)不同呢?就是因?yàn)閜rintf函數(shù)對(duì)輸出表中各量求值的順序是自右至左進(jìn)行 的。在式中,先對(duì)最后一項(xiàng)“-i-”求值,結(jié)果為-8,然后i自減1后為7。 再對(duì)“-i+”項(xiàng)求值得-7,然后i自增1后為8。再對(duì)“i-”項(xiàng)求值得8,然后i再自減1后為7。再求“i+”項(xiàng)得7,然后I再自增1后為8。 再求“-i”項(xiàng),i先自減1后輸出,輸出值為7。 最后才求輸出表列中的第一項(xiàng)“+i”,此時(shí)i自增1后輸出8。但是必須注意, 求值順序雖是自右至左,但是輸出順序還是從左至右, 因此得到的結(jié)果是上述輸出結(jié)果。字符輸出函數(shù)putchar 函數(shù)putchar 函數(shù)是字符輸出函數(shù), 其功能是在顯示器上輸出單個(gè)字符。其一般形式為: putchar(字符變量) 例如:putchar(A); 輸出大寫字母Aputchar(x); 輸出字符變量x的值putchar(n); 換行 對(duì)控制字符則執(zhí)行控制功能,不在屏幕上顯示。 使用本函數(shù)前必須要用文件包含命令:#includevoid 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);數(shù)據(jù)輸入語(yǔ)句語(yǔ)言的數(shù)據(jù)輸入也是由函數(shù)語(yǔ)句完成的。 本節(jié)介紹從標(biāo)準(zhǔn)輸入設(shè)備鍵盤上輸入數(shù)據(jù)的函數(shù)scanf和getchar。 scanf函數(shù) scanf函數(shù)稱為格式輸入函數(shù),即按用戶指定的格式從鍵盤上把數(shù)據(jù)輸入到指定的變量之中。一、scanf函數(shù)的一般形式 scanf函數(shù)是一個(gè)標(biāo)準(zhǔn)庫(kù)函數(shù),它的函數(shù)原型在頭文件“stdio.h”中,與printf函數(shù)相同,語(yǔ)言也允許在使用scanf函數(shù)之前不必包含stdio.h文件。scanf函數(shù)的一般形式為: scanf(“格式控制字符串”,地址表列); 其中,格式控制字符串的作用與printf函數(shù)相同,但不能顯示非格式字符串, 也就是不能顯示提示字符串。地址表列中給出各變量的地址。 地址是由地址運(yùn)算符“&”后跟變量名組成的。例如,&a,&b分別表示變量a和變量b 的地址。這個(gè)地址就是編譯系統(tǒng)在內(nèi)存中給a,b變量分配的地址。在語(yǔ)言中,使用了地址這個(gè)概念,這是與其它語(yǔ)言不同的。 應(yīng)該把變量的值和變量的地址這兩個(gè)不同的概念區(qū)別開(kāi)來(lái)。變量的地址是C編譯系統(tǒng)分配的,用戶不必關(guān)心具體的地址是多少。 變量的地址和變量值的關(guān)系如下: &a-a567 a為變量名,567是變量的值,&a是變量a的地址。在賦值表達(dá)式中給變量賦值,如: a=567 在賦值號(hào)左邊是變量名,不能寫地址,而scanf函數(shù)在本質(zhì)上也是給變量賦值,但要求寫變量的地址,如&a。 這兩者在形式上是不同的。&是一個(gè)取地址運(yùn)算符,&a是一個(gè)表達(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語(yǔ)句在屏幕上輸出提示,請(qǐng)用戶輸入a、b、c的值。執(zhí)行scanf語(yǔ)句,則退出TC屏幕進(jìn)入用戶屏幕等待用戶輸入。用戶輸入7、8、9后按下回車鍵,此時(shí),系統(tǒng)又將返回TC屏幕。在scanf語(yǔ)句的格式串中由于沒(méi)有非格式字符在“%d%d%d”之間作輸入時(shí)的間隔, 因此在輸入時(shí)要用一個(gè)以上的空格或回車鍵作為每?jī)蓚€(gè)輸入數(shù)之間的間隔。如: 7 8 9或789格式字符串格式字符串的一般形式為: %*輸入數(shù)據(jù)寬度長(zhǎng)度類型 其中有方括號(hào)的項(xiàng)為任選項(xiàng)。各項(xiàng)的意義如下:1.類型表示輸入數(shù)據(jù)的類型,其格式符和意義下表所示。格式 字符意義 d 輸入十進(jìn)制整數(shù)o 輸入八進(jìn)制整數(shù)x 輸入十六進(jìn)制整數(shù)u 輸入無(wú)符號(hào)十進(jìn)制整數(shù)f或e 輸入實(shí)型數(shù)(用小數(shù)形式或指數(shù)形式)c 輸入單個(gè)字符s 輸入字符串2.“*”符用以表示該輸入項(xiàng)讀入后不賦予相應(yīng)的變量,即跳過(guò)該輸入值。 如 scanf(%d %*d %d,&a,&b);當(dāng)輸入為:1 2 3 時(shí),把1賦予a,2被跳過(guò),3賦予b。3.寬度用十進(jìn)制整數(shù)指定輸入的寬度(即字符數(shù))。例如: scanf(%5d,&a);輸入:12345678只把12345賦予變量a,其余部分被截去。又如: scanf(%4d%4d,&a,&b);輸入:12345678將把1234賦予a,而把5678賦予b。4.長(zhǎng)度長(zhǎng)度格式符為l和h,l表示輸入長(zhǎng)整型數(shù)據(jù)(如%ld) 和雙精度浮點(diǎn)數(shù)(如%lf)。h表示輸入短整型數(shù)據(jù)。使用scanf函數(shù)還必須注意以下幾點(diǎn):a. scanf函數(shù)中沒(méi)有精度控制,如: scanf(%5.2f,&a); 是非法的。不能企圖用此語(yǔ)句輸入小數(shù)為2位的實(shí)數(shù)。b. scanf中要求給出變量地址,如給出變量名則會(huì)出錯(cuò)。如 scanf(%d,a);是非法的,應(yīng)改為scnaf(%d,&a);才是合法的。c. 在輸入多個(gè)數(shù)值數(shù)據(jù)時(shí),若格式控制串中沒(méi)有非格式字符作輸入數(shù)據(jù)之間的間隔則可用空格,TAB或回車作間隔。C編譯在碰到空格,TAB,回車或非法數(shù)據(jù)(如對(duì)“%d”輸入“12A”時(shí),A即為非法數(shù)據(jù))時(shí)即認(rèn)為該數(shù)據(jù)結(jié)束。d. 在輸入字符數(shù)據(jù)時(shí),若格式控制串中無(wú)非格式字符,則認(rèn)為所有輸入的字符均為有效字符。例如:scanf(%c%c%c,&a,&b,&c);輸入為:d e f則把d賦予a, f賦予b,e賦予c。只有當(dāng)輸入為:def時(shí),才能把d賦于a,e賦予b,f賦予c。 如果在格式控制中加入空格作為間隔,如 scanf (%c %c %c,&a,&b,&c);則輸入時(shí)各數(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éi)有空格,輸入M N,結(jié)果輸出只有M。而輸入改為MN時(shí)則可輸出MN兩字符,見(jiàn)下面的輸入運(yùn)行情況: input character a,bMNMNvoid main()char a,b;printf(input character a,bn);scanf(%c %c,&a,&b);printf(n%c%cn,a,b);scanf(%c %c,&a,&b); 本例表示scanf格式控制串%c %c之間有空格時(shí), 輸入的數(shù)據(jù)之間可以有空格間隔。e. 如果格式控制串中有非格式字符則輸入時(shí)也要輸入該非格式字符。例如:scanf(%d,%d,%d,&a,&b,&c); 其中用非格式符“ , ”作間隔符,故輸入時(shí)應(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ù)與輸出的類型不一致時(shí),雖然編譯能夠通過(guò),但結(jié)果將不正確。void main()int a;printf(input a numbern);scanf(%d,&a);printf(%ld,a);由于輸入數(shù)據(jù)類型為整型, 而輸出語(yǔ)句的格式串中說(shuō)明為長(zhǎng)整型,因此輸出結(jié)果和輸入數(shù)據(jù)不符。如改動(dòng)程序如下: 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ù)改為長(zhǎng)整型后,輸入輸出數(shù)據(jù)相等。鍵盤輸入函數(shù)getchar函數(shù)getchar函數(shù)的功能是從鍵盤上輸入一個(gè)字符。其一般形式為: getchar(); 通常把輸入的字符賦予一個(gè)字符變量,構(gòu)成賦值語(yǔ)句,如:char c;c=getchar();#includevoid main()char c;printf(input a charactern);c=getchar();putchar(c);使用getchar函數(shù)還應(yīng)注意幾個(gè)問(wèn)題:1.getchar函數(shù)只能接受單個(gè)字符,輸入數(shù)字也按字符處理。輸入多于一個(gè)字符時(shí),只接收第一個(gè)字符。 2.使用本函數(shù)前必須包含文件“stdio.h”。 3.在TC屏幕下運(yùn)行含本函數(shù)程序時(shí),將退出TC 屏幕進(jìn)入用戶屏幕等待用戶輸入。輸入完畢再返回TC屏幕。void main()char a,b,c;printf(input character a,b,cn);scanf(%c %c %c,&a,&b,&c);printf(%d,%d,%dn%c,%c,%cn,a,b,c,a-32,b-32,c-32);輸入三個(gè)小寫字母輸出其ASCII碼和對(duì)應(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é)長(zhǎng)度。分支結(jié)構(gòu)程序 關(guān)系運(yùn)算符和表達(dá)式在程序中經(jīng)常需要比較兩個(gè)量的大小關(guān)系, 以決定程序下一步的工作。比較兩個(gè)量的運(yùn)算符稱為關(guān)系運(yùn)算符。 在語(yǔ)言中有以下關(guān)系運(yùn)算符: 小于 大于= 大于或等于= 等于!= 不等于 關(guān)系運(yùn)算符都是雙目運(yùn)算符,其結(jié)合性均為左結(jié)合。 關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符,高于賦值運(yùn)算符。 在六個(gè)關(guān)系運(yùn)算符中,,=的優(yōu)先級(jí)相同,高于=和!=,=和!=的優(yōu)先級(jí)相同。關(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;float x=3e+5,y=0.85;printf(%d,%dn,a+5=k+1);printf(%d,%dn,1j5,x-5.25=x+y);printf(%d,%dn,i+j+k=-2*j,k=j=i+5);char c=k;int i=1,j=2,k=3;float x=3e+5,y=0.85;printf(%d,%dn,a+5=k+1);printf(%d,%dn,1j5,x-5.25b & cd等價(jià)于(ab) & (cd)!b=c|da等價(jià)于(!b)=c)|(dc & x+yc) & (x+y)0 & 42,由于50為真,42也為真,相與的結(jié)果也為真。2.或運(yùn)算|參與運(yùn)算的兩個(gè)量只要有一個(gè)為真,結(jié)果就為真。 兩個(gè)量都為假時(shí),結(jié)果為假。例如:50|58,由于50為真,相或的結(jié)果也就為真3.非運(yùn)算!參與運(yùn)算量為真時(shí),結(jié)果為假;參與運(yùn)算量為假時(shí),結(jié)果為真。例如:!(50)的結(jié)果為假。雖然編譯在給出邏輯運(yùn)算值時(shí),以“1”代表“真”,“0 ”代表“假”。 但反過(guò)來(lái)在判斷一個(gè)量是為“真”還是為“假”時(shí),以“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,!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。對(duì)x| i & j-3式,先計(jì)算j-3的值為非0,再求i & j-3的邏輯值為1,故x|i&j-3的邏輯值為 1。對(duì)ij&xy式,由于ij的值為1,而xy為0故表達(dá)式的值為1,0相與,最后為0,對(duì)i=5&c&(j=8)式,由于i=5為假,即值為0, 該表達(dá)式由兩個(gè)與運(yùn)算組成,所以整個(gè)表達(dá)式的值為0。對(duì)于式x+ y|i+j+k由于x+y的值為非0,故整個(gè)或表達(dá)式的值為1。語(yǔ)句用if語(yǔ)句可以構(gòu)成分支結(jié)構(gòu)。它根據(jù)給定的條件進(jìn)行判斷, 以決定執(zhí)行某個(gè)分支程序段。語(yǔ)言的if語(yǔ)句有三種基本形式。1.第一種形式為基本形式 if(表達(dá)式) 語(yǔ)句; 其語(yǔ)義是:如果表達(dá)式的值為真,則執(zhí)行其后的語(yǔ)句, 否則不執(zhí)行該語(yǔ)句。其過(guò)程可表示為下圖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);輸入兩個(gè)整數(shù),輸出其中的大數(shù)。 scanf(%d%d,&a,&b);max=a;if (maxb)printf(max=%dn,a);elseprintf(max=%dn,b);輸入兩個(gè)整數(shù),輸出其中的大數(shù)。改用if-else語(yǔ)句判別a,b的大小,若a大,則輸出a,否則輸出b。3.第三種形式為if-else-if形式前二種形式的if語(yǔ)句一般都用于兩個(gè)分支的情況。 當(dāng)有多個(gè)分支選擇時(shí),可采用if-else-if語(yǔ)句,其一般形式為: if(表達(dá)式1) 語(yǔ)句1; else if(表達(dá)式2) 語(yǔ)句2; else if(表達(dá)式3) 語(yǔ)句3; else if(表達(dá)式m) 語(yǔ)句m; else 語(yǔ)句n; 其語(yǔ)義是:依次判斷表達(dá)式的值,當(dāng)出現(xiàn)某個(gè)值為真時(shí), 則執(zhí)行其對(duì)應(yīng)的語(yǔ)句。然后跳到整個(gè)if語(yǔ)句之外繼續(xù)執(zhí)行程序。 如果所有的表達(dá)式均為假,則執(zhí)行語(yǔ)句n 。 然后繼續(xù)執(zhí)行后續(xù)程序。 if-else-if語(yǔ)句的執(zhí)行過(guò)程如圖33所示。#includestdio.hvoid main()char c;printf(input a character: );c=getchar();if(c=0&c=A&c=a&cb)a+;b+;elsea=0;b=10;語(yǔ)句的嵌套當(dāng)if語(yǔ)句中的執(zhí)行語(yǔ)句又是if語(yǔ)句時(shí),則構(gòu)成了if 語(yǔ)句嵌套的情形。其一般形式可表示如下: if(表達(dá)式) if語(yǔ)句; 或者為if(表達(dá)式) if語(yǔ)句; else if語(yǔ)句; 在嵌套內(nèi)的if語(yǔ)句可能又是if-else型的,這將會(huì)出現(xiàn)多個(gè)if和多個(gè)else重疊的情況,這時(shí)要特別注意if和else的配對(duì)問(wèn)題。例如:if(表達(dá)式1)if(表達(dá)式2)語(yǔ)句1;else語(yǔ)句2;其中的else究竟是與哪一個(gè)if配對(duì)呢?應(yīng)該理解為:還是應(yīng)理解為: if(表達(dá)式1) if(表達(dá)式1)if(表達(dá)式2) if(表達(dá)式2)語(yǔ)句1; 語(yǔ)句1;else else語(yǔ)句2; 語(yǔ)句2; 為了避免這種二義性,語(yǔ)言規(guī)定,else 總是與它前面最近的if配對(duì),因此對(duì)上述例子應(yīng)按前一種情況理解。比較兩個(gè)數(shù)的大小關(guān)系。void main()int a,b;printf(please input A,B: );scanf(%d%d,&a,&b);if(a!=b)if(ab) printf(ABn);else printf(AB、Ab) printf(ABn);else printf(Ab) max=a;else max=b;可用條件表達(dá)式寫為 max=(ab)?a:b; 執(zhí)行該語(yǔ)句的語(yǔ)義是:如ab為真,則把a(bǔ)賦予max,否則把b 賦予max。使用條件表達(dá)式時(shí),還應(yīng)注意以下幾點(diǎn):1. 條件運(yùn)算符的運(yùn)算優(yōu)先級(jí)低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符,但高于賦值符。因此 max=(ab)?a:b可以去掉括號(hào)而寫為 max=ab?a:b2. 條件運(yùn)算符?和:是一對(duì)運(yùn)算符,不能分開(kāi)單獨(dú)使用。3. 條件運(yùn)算符的結(jié)合方向是自右至左。例如:ab?a:cd?c:d應(yīng)理解為ab?a:(cd?c:d) 這也就是條件表達(dá)式嵌套的情形,即其中的表達(dá)式3又是一個(gè)條件表達(dá)式。void main()int a,b,max;printf(n input two numbers: );scanf(%d%d,&a,&b);printf(max=%d,ab?a:b);用條件表達(dá)式對(duì)上例重新編程,輸出兩個(gè)數(shù)中的大數(shù)。語(yǔ)句語(yǔ)言還提供了另一種用于多分支選擇的switch語(yǔ)句, 其一般形式為: switch(表達(dá)式) case常量表達(dá)式1: 語(yǔ)句1; case常量表達(dá)式2: 語(yǔ)句2; case常量表達(dá)式n: 語(yǔ)句n; default : 語(yǔ)句n+1; 其語(yǔ)義是:計(jì)算表達(dá)式的值。 并逐個(gè)與其后的常量表達(dá)式值相比較,當(dāng)表達(dá)式的值與某個(gè)常量表達(dá)式的值相等時(shí), 即執(zhí)行其后的語(yǔ)句,然后不再進(jìn)行判斷,繼續(xù)執(zhí)行后面所有case后的語(yǔ)句。 如表達(dá)式的值與所有case后的常量表達(dá)式均不相同時(shí),則執(zhí)行default后的語(yǔ)句。void main()int a;printf(input integer number: );scanf(%d,&a);switch (a) case 1:printf(Mondayn);case 2:printf(Tuesdayn);case 3:printf(Wednesdayn);case 4:printf(Thursdayn);case 5:printf(Fridayn);case 6:printf(Saturdayn);case 7:printf(Sundayn);default:printf(errorn);本程序是要求輸入一個(gè)數(shù)字,輸出一個(gè)英文單詞。但是當(dāng)輸入3之后,卻執(zhí)行了case3以及以后的所有語(yǔ)句,輸出了Wednesday 及以后的所有單詞。這當(dāng)然是不希望的。為什么會(huì)出現(xiàn)這種情況呢?這恰恰反應(yīng)了switch語(yǔ)句的一個(gè)特點(diǎn)。在switch語(yǔ)句中,“case 常量表達(dá)式”只相當(dāng)于一個(gè)語(yǔ)句標(biāo)號(hào), 表達(dá)式的值和某標(biāo)號(hào)相等則轉(zhuǎn)向該標(biāo)號(hào)執(zhí)行,但不能在執(zhí)行完該標(biāo)號(hào)的語(yǔ)句后自動(dòng)跳出整個(gè)switch 語(yǔ)句,所以出現(xiàn)了繼續(xù)執(zhí)行所有后面case語(yǔ)句的情況。 這是與前面介紹的if語(yǔ)句完全不同的,應(yīng)特別注意。為了避免上述情況, 語(yǔ)言還提供了一種break語(yǔ)句,專用于跳出switch語(yǔ)句,break 語(yǔ)句只有關(guān)鍵字break,沒(méi)有參數(shù)。在后面還將詳細(xì)介紹。修改例題的程序,在每一case語(yǔ)句之后增加break 語(yǔ)句, 使每一次執(zhí)行之后均可跳出switch語(yǔ)句,從而避免輸出不應(yīng)有的結(jié)果。void main()int a;printf(input integer number: );scanf(%d,&a);switch (a)case 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ǔ)句時(shí)還應(yīng)注意以下幾點(diǎn):1.在case后的各常量表達(dá)式的值不能相同,否則會(huì)出現(xiàn)錯(cuò)誤。2.在case后,允許有多個(gè)語(yǔ)句,可以不用括起來(lái)。3.各case和default子句的先后順序可以變動(dòng),而不會(huì)影響程序執(zhí)行結(jié)果。4.default子句可以省略不用。程序舉例輸入三個(gè)整數(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小于c,則把c賦予max;如果c小于min,則把c賦予min。因此max內(nèi)總是最大數(shù),而min內(nèi)總是最小數(shù)。最后輸出max和min的值即可。 計(jì)算器程序。用戶輸入運(yùn)算數(shù)和四則運(yùn)算符, 輸出計(jì)算結(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 /: printf(%fn,a/b);break;default: printf(input errorn);本例可用于四則運(yùn)算求值。switch語(yǔ)句用于判斷運(yùn)算符, 然后輸出運(yùn)算值。當(dāng)輸入運(yùn)算符不是+,-,*,/時(shí)給出錯(cuò)誤提示。循環(huán)結(jié)構(gòu)程序循環(huán)結(jié)構(gòu)是程序中一種很重要的結(jié)構(gòu)。其特點(diǎn)是, 在給定條件成立時(shí),反復(fù)執(zhí)行某程序段,直到條件不成立為止。 給定的條件稱為循環(huán)條件,反復(fù)執(zhí)行的程序段稱為循環(huán)體。 語(yǔ)言提供了多種循環(huán)語(yǔ)句,可以組成各種不同形式的循環(huán)結(jié)構(gòu)。語(yǔ)句while語(yǔ)句的一般形式為: while(表達(dá)式)語(yǔ)句; 其中表達(dá)式是循環(huán)條件,語(yǔ)句為循環(huán)體。while語(yǔ)句的語(yǔ)義是:計(jì)算表達(dá)式的值,當(dāng)值為真(非0)時(shí), 執(zhí)行循環(huán)體語(yǔ)句。其執(zhí)行過(guò)程可用圖34表示。 統(tǒng)計(jì)從鍵盤輸入一行字符的個(gè)數(shù)。#include void main()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+完成對(duì)輸入字符個(gè)數(shù)計(jì)數(shù)。從而程序?qū)崿F(xiàn)了對(duì)輸入一行字符的字符個(gè)數(shù)計(jì)數(shù)。使用while語(yǔ)句應(yīng)注意以下幾點(diǎn):1.while語(yǔ)句中的表達(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);本例程序?qū)?zhí)行n次循環(huán),每執(zhí)行一次,n值減1。循環(huán)體輸出表達(dá)式a+*2的值。該表達(dá)式等效于(a*2;a+)2.循環(huán)體如包括有一個(gè)以上的語(yǔ)句,則必須用括起來(lái), 組成復(fù)合語(yǔ)句。3.應(yīng)注意循環(huán)條件的選擇以避免死循環(huán)。void main()int a,n=0;while(a=5)printf(%d ,n+);本例中while語(yǔ)句的循環(huán)條件為賦值表達(dá)式a=5, 因此該表達(dá)式的值永遠(yuǎn)為真,而循環(huán)體中又沒(méi)有其它中止循環(huán)的手段, 因此該循環(huán)將無(wú)休止地進(jìn)行下去,形成死循環(huán)。4.允許while語(yǔ)句的循環(huán)體又是while語(yǔ)句,從而形成雙重循環(huán)。語(yǔ)句do-while語(yǔ)句的一般形式為: do語(yǔ)句; while(表達(dá)式); 其中語(yǔ)句是循環(huán)體,表達(dá)式是循環(huán)條件。do-while語(yǔ)句的語(yǔ)義是:先執(zhí)行循環(huán)體語(yǔ)句一次, 再判別表達(dá)式的值,若為真(非0)則繼續(xù)循環(huán),否則終止循環(huán)。do-while語(yǔ)句和while語(yǔ)句的區(qū)別在于do-while是先執(zhí)行后判斷,因此do-

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論