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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論