版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3章〓分支結構3.1〓知識要點回顧順序結構的程序雖然能解決計算、輸出等問題,但不能進行判斷再選擇。對于要先進行判斷再選擇的問題就要使用分支結構。本章主要掌握的知識要點:(1)if語句的三種形式。(2)if語句的嵌套。(3)switch語句。3.1.1〓if語句的三種形式用if語句可以構成分支結構。它根據(jù)給定的條件進行判斷,以決定執(zhí)行某個分支程序段。C語言的if語句有三種基本形式。1.If…else語句if(表達式) {〓復合語句1}else{〓復合語句2}其語義是:如果表達式的值為真,則執(zhí)行復合語句1,否則執(zhí)行復合語句2。其執(zhí)行過程如圖3-1所示。圖3-1〓程序執(zhí)行過程說明:(1)if和else是C語言的關鍵字。if后面的括號是必不可少的,但else后面不能加表達式,else(表達式)這種寫法是錯誤的。(2)if(表達式)中的表達式通常是邏輯表達式或關系表達式,也可以是其他表達式,如賦值表達式等,甚至也可以是一個變量。例如,if(a=5)和if(b)都是允許的。if(a=5)中表達式的值(5)永遠非0,所以其后的語句總是執(zhí)行的。當然這種情況在程序中不一定會出現(xiàn),但在語法上是合法的。if(b)等價于if(b!=0)表示只有當b的值不是零時,才能執(zhí)行后面的語句。注意區(qū)別if(x==0)和if(x=0)。if(x==0)中表達式是進行比較,其值要么是1(x是0),要么是0(x不是0)。if(x=0)中表達式是進行賦值,其值為0。(3)else不是一條獨立的語句,它只是語句的一部分。在程序中else必須與if配對,共同組成一條if…else語句。(4)復合語句中如是有多個語句花括號不能省,要注意的是在}之后不能加分號;若只有一條語句可省略花括號。2.省略else的if語句if(表達式){〓復合語句}其語義是:如果表達式的值為真,則執(zhí)行其后的語句,否則不執(zhí)行該語句。其過程如圖3-2所示。圖3-2〓程序流程當條件較多時,可以用多個省略了else的if語句,格式如下:if(表達式1){〓復合語句1}if(表達式2){〓復合語句2}……if(表達式n){〓復合語句n}此處不管if表達式是真還是假,都會判斷下一個if表達式。如果是真就執(zhí)行復合語句,然后判斷下一個if表達式;如果是假,直接判斷下一個if表達式。n個if語句要判斷n次。3.增加elseif語句前兩種形式的if語句一般都用于兩個分支的情況。當有多個分支選擇時,可采用if-else-if語句,其一般形式為:if(表達式1){復合語句1}elseif(表達式2){復合語句2}……elseif(表達式m){復合語句m}else{復合語句n}其語義是:依次判斷表達式的值,當出現(xiàn)某個值為真時,則執(zhí)行其對應的語句,然后跳到整個if語句之外繼續(xù)執(zhí)行程序;如果所有的表達式均為假,則執(zhí)行語句n,然后繼續(xù)執(zhí)行后續(xù)程序。即只要找到一個表達式的值為非0,就結束判斷。3.1.2〓if語句的嵌套當if語句中的執(zhí)行語句又是if語句時,即構成了if語句嵌套的情形。其一般形式可表示如下:1.在if子句中嵌套if(表達式1)〓if(表達式2)〓〓{復合語句1}〓else〓〓{復合語句2}else〓{復合語句3}2.在else子句中嵌套if(表達式1)〓{復合語句1}else〓if(表達式2)〓〓{復合語句2}〓else〓〓{復合語句3}說明:在嵌套內的if語句可能又是if-else型的,這將會出現(xiàn)多個if和多個else重疊的情況,這時要特別注意if和else的配對問題。為了避免這種二義性,C語言規(guī)定,else總是與它前面最近的if配對。3.1.3〓switch語句switch語句實際上是if-else語句的變形。在某些情況下,使用switch語句要比if語句更簡潔、易讀。switch語句的一般形式為:switch(表達式){〓case常量表達式1:語句1;break;〓case常量表達式2:語句2;break;〓……〓case常量表達式n:語句n;break;〓default:語句n+1;break;}其語義是:計算switch(表達式) 中表達式的值。并逐個與其后的常量表達式值相比較,當表達式的值與某個常量表達式的值相等時,即執(zhí)行其后的語句,然后不再進行判斷,繼續(xù)執(zhí)行后面所有case后的語句。如果表達式的值與所有case后的常量表達式均不相同時,則執(zhí)行default后的語句。要注意的是,如果程序執(zhí)行的過程中遇見break語句,則跳出整個switch語句。說明:(1)switch(表達式) 中表達式的值一般為整型、字符型、枚舉型。(2)關鍵字case與常量表達式之間一定要有空格。(3)每個case后的常量表達式的值不能相同,否則會出現(xiàn)錯誤。(4)在case后允許有多個語句,可以不用{}括起來。(5)各個case和default的出現(xiàn)的次序無關,default可以出現(xiàn)在任何位置。(6)必要時case語句標號后的語句可以省略不寫。default子句也可以省略。(7)使用break語句跳出switch語句體。3.1.4〓常見錯誤舉例1.在關系表達式中誤用=表示==C語言中用兩個連續(xù)的賦值符表示“相等”關系運算符。如果將=當作==,通常不會有語法錯誤,但卻隱含著不易發(fā)現(xiàn)的邏輯錯誤。正確錯誤if(a==b)printf("a和b相等");if(a=b)printf("a和b相等");2.if語句后多了分號(;)仔細比較下面兩個程序段,左邊的程序段只有一條語句,而右邊的程序段卻包含兩條C語句,一條是if語句,另一條是賦值語句,并且if語句中的程序段是條空語句。正確錯誤if(a>b)〓max=a;……if(a>b);//分號代表空語句〓max=a;//獨立于語句的賦值語句……3.case子句后面的程序段中漏掉了break仔細比較下面兩段程序,左邊的程序正常,右邊的程序異常,因為case子句的后面漏掉了break。正確錯誤ch=getchar();switch(ch){〓case'Y':printf("Yes\n");break;〓case'N':printf("No\n");break;……}ch=getchar();switch(ch){〓case'Y':printf("Yes\n");//漏掉了break〓case'N':printf("No\n");//漏掉了break……}4.復合語句漏掉了{}將下面左邊的程序寫成右邊的形式,將犯邏輯錯誤。正確錯誤if(a>b){〓t=a;〓a=b;〓b=t;}//交換a和b兩個數(shù)if(a>b)〓t=a;//是if的子句〓a=b;//獨立于if語句的賦值語句〓b=t;5.表達式中()不配對,復合語句中的{}不配對下面的程序段中,左邊是正確的,右邊的有語法錯誤。正確錯誤if(a<c||(a>b&&b>c))if(a<c||(a>b&&b>c)//少了一個“)”對于程序員來說,養(yǎng)成一些必要的編程習慣對避免上述錯誤是有幫助的:當遇到判斷兩個數(shù)是否相等的關系表達式時,將常量或表達式寫在==的左邊是一個好習慣。如下面的程序中,左邊的程序要比右邊的程序更不易范邏輯錯誤。因為像左邊那樣寫的程序,如果將==誤輸入為=了,編譯器會報錯。if(3==a)〓a=0;else〓a++;if(a==3)〓a=0;else〓a++;if(b+3==a)〓a=b;else〓a++;if(a==b+3)〓a=b;else〓a++;在書寫if語句以及下一章介紹的while語句、do-while語句和for語句時,即使程序段中只有一條語句,也要將這條語句用{}括起來。這樣做不但程序閱讀起來邏輯鮮明,而且當需要向程序段增加語句時,也不用擔心漏掉{}而造成程序出現(xiàn)錯誤。要輸入符號對,在使用if語句、while語句、do-while語句和for語句時,需要輸入大量的()、{}符號對,先輸入符號對,再在其中插入內容,將會有效避免()、{}不配對的問題。從書寫清晰,便于閱讀、理解、維護的角度出發(fā),在書寫程序時應遵循以下規(guī)則:①一個說明或一個語句占一行。②用{}括起來的部分,通常表示了程序的某一層次結構。{}一般與該結構語句的第一個字母對齊,并單獨占一行。③低一層次的語句或說明可比高一層次的語句或說明縮進若干格后書寫。以便看起來更加清晰,增加程序的可讀性。
3.2〓實訓內容實驗一〓驗證性實驗一、實驗目的(1)驗證教材中典型例題。(2)理解和掌握分支結構程序設計的方法。(3)理解和掌握if語句的三種基本形式執(zhí)行的流程。(4)掌握switch語句的使用方法。(5)掌握if語句嵌套。二、實驗設備和儀器(1)IBMPC或兼容計算機。(2)Windows9x/2000/XP操作系統(tǒng)。(3)VisualC++6.0。三、實驗內容(一)調試程序11.實驗要求用戶輸入一個小寫字母,如輸入a,則顯示b,輸入b則顯c,以此類推,輸入z則顯示a。2.程序代碼prog1.c#include<stdio.h>main(){〓charch;〓scanf("%c",&ch);〓if(ch>='a'&&ch<='y')〓〓ch=ch+1;〓else〓〓ch='a';〓printf("%c\n",ch);}3.實驗步驟步驟一:在D盤的根目錄中創(chuàng)建一個以你的學號命名的文件夾,如D:\200710003。步驟二:打開“MicrosoftVisualC++”軟件,新建prog1.c文件,并輸入程序代碼,如圖3-3所示。圖3-3〓新建文件并輸入程序代碼步驟三:選擇“編譯”菜單命令對程序進行編譯,如圖3-4所示。圖3-4〓編譯程序步驟四:若有錯誤需要重新檢查;若編譯沒有錯誤,可以執(zhí)行程序。此時,輸入字符a,輸出結果如圖3-5所示。圖3-5〓程序運行結果1按任意鍵關閉當前窗口。再次輸入字符z,輸出結果如圖3-6所示。圖3-6〓程序運行結果2按任意鍵關閉當前窗口,保存后關閉prog1.c文件。(二)調試程序21.實驗要求從鍵盤輸入x的值,根據(jù)下面表達式,計算并輸出y的值。x2(x<0)y=0(x=0)2x(x>0)2.程序代碼prog2.c(注意:源代碼中//后面的內容是注釋,學生不需要寫)#include<stdio.h>main(){〓floatx,y;〓scanf("%f",&x);〓if(x<0)〓〓y=x*x;〓elseif(x==0)//注意表達式x==0,而不是x=0〓〓y=0;〓else〓〓y=2*x;//注意是2*x,而不是2x〓printf("y=%f",y);}3.實驗步驟步驟一:打開“MicrosoftVisualC++”軟件,新建prog2.c文件,并輸入程序代碼,如圖3-7所示。圖3-7〓新建文件并輸入程序代碼步驟二:選擇“編譯”菜單命令對程序進行編譯,如圖3-8所示。圖3-8〓編譯程序步驟三:若編譯有錯誤需要重新檢查;若編譯沒有錯誤,可以執(zhí)行程序。此時,輸入實數(shù)-2.5,輸出結果如圖3-9所示。圖3-9〓程序運行結果1步驟四:按任意鍵關閉當前窗口。再次輸入0,輸出結果如圖3-10所示。圖3-10〓程序運行結果2步驟五:按任意鍵關閉當前窗口。再次輸入3,輸出結果如圖3-11所示。圖3-11〓程序運行結果3按任意鍵關閉當前窗口,保存后關閉prog2.c文件。(三)調試程序31.實驗要求用switch語句實現(xiàn)按考試成績的等級,輸出百分制成績。等級與百分制之間的關系如表3-1所示。表3-1〓等級與百分制的關系等級百分制A90-100B80-89C60-79D<602.程序代prog3.c#include<stdio.h>main(){〓chargrade;〓scanf("%c",&ch);〓switch(grade)〓{ 〓〓case'A':printf("85~100");break;//case和'A'之間應鍵入一個空格〓〓case'B':printf("70~84");break;〓〓case'C':printf("60~69");break;〓〓case'D':printf("<60");break;〓〓default:printf("error");〓}}3.實驗步驟步驟一:打開“MicrosoftVisualC++”軟件,新建prog3.c文件,并輸入程序代碼,如圖3-12所示。圖3-12〓新建文件并輸入程序代碼步驟二:選擇“編譯”菜單命令對程序進行編譯,如圖3-13所示。圖3-13〓編譯程序步驟三:若編譯有錯誤需要重新檢查;若編譯沒有錯誤,可以執(zhí)行程序。此時,輸入大寫字母A,輸出結果如圖3-14所示。圖3-14〓程序運行結果1步驟四:按任意鍵關閉當前窗口。再次輸入大寫字母E,輸出結果如圖3-15所示。圖3-15〓程序運行結果2按任意鍵關閉當前窗口,保存后關閉pro3.c文件。四、實驗報告要求(1)寫出程序一的實驗原理與考查知識點。(2)寫出程序二的實驗原理與考查知識點。(3)寫出程序三的實驗原理與考查知識點。
實驗二〓啟發(fā)性實驗一、實驗目的(1)掌握程序設計與調試的方法。(2)掌握分支結構程序填空的方法。(3)掌握分支結構程序改錯技巧。(4)掌握分支結構程序編程能力。二、實驗設備和儀器(1)IBMPC或兼容計算機。(2)Windows9x/2000/XP操作系統(tǒng)。(3)VisualC++6.0。三、實驗內容1.填空題從鍵盤輸入一個數(shù),判別它是否能被3整除。若能被3整除,打印YES;不能被3整除,則打印NO。運行結果如下:inputn:9<CR>(從鍵盤輸入9,<CR>代表Enter鍵)n=9,YES!或者:inputn:8<CR>(從鍵盤輸入8,<CR>代表Enter鍵)n=8,NO!請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結果。注意:程序中//是對問題的提示。不得增行或刪行,也不得更改程序的結構!程序如下:#include<stdio.h>main(){〓intn;〓printf("inputn:\n");〓scanf("%d",_1_);//為變量賦值.〓if(_2_)//判斷n能否被3整除〓〓printf("n=%d,YES
!\n",n);〓_3_//其他情況〓printf("n=%d,NO
!\n",n);}2.改錯題從鍵盤上輸入一個字符,判斷輸入的字符是數(shù)字、字母,還是其他。運行結果如下:pleaseinput:(printf輸出提示信息)8<CR>(從鍵盤輸入8,<CR>代表Enter鍵)8isanumber或者:pleaseinput:(printf輸出提示信息)A<CR>(從鍵盤輸入A,<CR>代表Enter鍵)Aisacapital或者:pleaseinput:(printf輸出提示信息)#<CR>(從鍵盤輸入#,<CR>代表Enter鍵)#isother請改正程序中的錯誤,使程序能輸出正確的結果。注意:程序中//是對問題的提示。不得增行或刪行,也不得更改程序的結構!程序如下:#include<stdio.h>main(){〓charc;〓printf("pleaseinput:\n");〓scanf("%c",&c);〓if(c>=0&&c<=9)//判斷c是否為數(shù)字字符〓〓printf("\n%cisanumber\n",c);〓if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))//判斷c是否為字母字符〓〓printf("\n%cisacapital\n",c);〓else〓〓printf("\n%cisother\n",c);}3.編程題輸入三個數(shù)作為三角形的邊長(a,b,c),判斷是否能構成一個三角形(兩邊之和大于第三邊,兩邊之差小與第三邊),若能構成三角形輸出YES,若不能構成三角形則輸出NO。程序如下:#include<stdio.h>main(){〓inta,b,c;〓printf("pleaseinputa,b,c:\n");〓scanf("%d,%d,%d",&a,&b,&c);〓/*將下面的代碼補充完整*/}
實驗三〓啟發(fā)性實驗一、實驗目的(1)進一步掌握C程序的編輯、編譯、連接和運行的過程。(2)熟悉分支結構的程序設計方法。(3)熟練使用switch語句的使用。二、實驗設備和儀器(1)IBMPC或兼容計算機。(2)Windows9x/2000/XP操作系統(tǒng)。(3)VisualC++6.0。三、實驗內容1.填空題以下程序計算某年某月有幾天。其中判別閏年的條件是:能被4整除但不能被100整除的年是閏年,能被400整除的年也是閏年。運行結果如下:year,month:(printf輸出提示信息)200912<CR>(從鍵盤輸入2009空格12,<CR>代表Enter鍵)thelengthof2009.12is31或者:year,month:(printf輸出提示信息)20082<CR>(從鍵盤輸入2008空格2,<CR>代表Enter鍵)thelengthof2008.2is29請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結果。注意:程序中//是對問題的提示。不得增行或刪行,也不得更改程序的結構!程序如下: #include<stdio.h>main(){〓intyy,mm,len;〓printf("year,month:\n");〓scanf("%d%d",&yy,&mm);〓switch(mm)〓{〓〓case1:〓〓case3:〓〓case5:〓〓case7:〓〓case8:〓〓case10:〓〓case12:_1_;break;//1,3,5,7,8,10月份的天數(shù)〓〓case4:〓〓case6:〓〓case9:〓〓case11:len=30;break;〓〓case2:〓〓〓if(yy%4==0&&yy%100!=0||yy%400==0)〓〓〓〓_2_;//閏年2月份的天數(shù)〓〓〓else〓〓〓〓_3_;//不是閏年2月份的天數(shù)〓〓〓break;〓〓default:printf("inputerror");break;〓}〓printf("thelengthof%d.%dis%d\n",yy,mm,len);}2.改錯題從鍵盤輸入一字符,如果為Y打印“Yes”,為N打印“No”,其他字符,打印“Error”。運行結果如下:請輸入字符:(printf輸出提示信息)Y<CR>(從鍵盤輸入Y,<CR>代表Enter鍵)Yes或者:請輸入字符:(printf輸出提示信息)N<CR>(從鍵盤輸入N,<CR>代表Enter鍵)No或者:請輸入字符:(printf輸出提示信息)W<CR>(從鍵盤輸入W,<CR>代表Enter鍵)Error請改正程序中的四處錯誤,使程序能輸出正確的結果。注意:程序中//是對問題的提示。不得增行或刪行,也不得更改程序的結構!程序如下:#include<stdio.h>main(){〓charch;〓printf("請輸入字符:\n");〓ch=getchar();〓switch(ch)〓{〓〓caseY:printf("Yes\n");//如果輸入的是字符Y,打印“Yes”〓〓caseN:printf("No\n");//如果輸入的是字符N,打印“No”〓〓default:printf("Error\n");〓}}3.編程題已知銀行整存整取不同期限的年息利率分別為:1.98%期限一年2.15%期限二年年息利率 2.25%期限三年2.45%期限五年2.65%期限八年編程輸入存錢的本金和期限,求到期時從銀行到的利息與本金合計。部分源代碼已經(jīng)給出。程序如下:#include<stdio.h>#include<math.h>main(){〓intn;//n為存款期限〓doublem,d,t;//m為本金,d為利率,t為利息與本金的合計〓printf("請輸入本金和存款期限:\n");〓scanf("%f%d",&m,&n);〓/*將下面的代碼補充完整*/〓printf("本息合計為=%f\n",t);}
實驗四〓設計性實驗一、實驗目的(1)進一步掌握C程序的編輯、編譯、連接和運行的過程。(2)熟練使用C的各種表達式。(3)熟悉分支結構的程序設計
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度房屋建筑漏水鑒定與賠償責任協(xié)議3篇
- 2025年度智能溫室大棚租賃合作協(xié)議模板
- 二零二五年度手車買賣及改裝服務協(xié)議3篇
- 調查保密協(xié)議2025年
- 廣東體育職業(yè)技術學院《醫(yī)用化學實驗》2023-2024學年第一學期期末試卷
- 廣東司法警官職業(yè)學院《語言數(shù)據(jù)分析》2023-2024學年第一學期期末試卷
- 廣東省外語藝術職業(yè)學院《有機化學理論》2023-2024學年第一學期期末試卷
- 廣東輕工職業(yè)技術學院《英語寫作Ⅰ》2023-2024學年第一學期期末試卷
- 七年級上冊《1.2.5有理數(shù)的大小比較》課件與作業(yè)
- 廣東茂名幼兒師范??茖W?!冻鞘兴こ探ㄔO監(jiān)理》2023-2024學年第一學期期末試卷
- (完整版)光伏施工質量控制重點
- 微積分試卷及規(guī)范標準答案6套
- 藍色國家科學基金16.9杰青優(yōu)青人才科學基金答辯模板
- JGJ142-2012 輻射供暖供冷技術規(guī)程
- 物業(yè)管理流程:高端寫字樓服務
- 銷售儲備培養(yǎng)方案
- 《南亞》優(yōu)教課件(第1課時)
- 【電動汽車兩擋變速器結構設計10000字(論文)】
- 非固化橡膠瀝青防水涂料技術交底
- 高二期末考試動員主題班會
- 海員常見疾病的保健與預防
評論
0/150
提交評論