




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
項目三選擇結構程序設計項目三選擇結構程序設計第三部分實驗學習
3第一部分任務學習
1第二部分項目學習
2項目三選擇結構程序設計在你的人生中,曾經面對什么選擇?你們現在有沒有思考過畢業之后是工作還是繼續上學呢?學編程還是不學編程呢?當你不知向何處走時,會抬頭看看路牌,當某個方向滿足了要求,則會向那個方向走去。在程序設計中,當某條件成立時執行某段程序;不成立時執行另一段程序,此時,即為選擇結構,可使用if或switch語句完成該功能。本章從實例分析著手,使讀者了解并掌握C語言選擇結構,加深對C語言程序開發設計過程的感性認識,強化培養編程思路,為項目三選擇結構程序設計進一步進行C語言程序設計打下基礎。
【學習目標】(1)掌握關系運算符、邏輯運算符和條件運算符的用法。(2)掌握選擇結構程序設計的方法。(3)能夠畫出選擇結構的流程圖。(4)能夠用選擇結構程序設計解決實際問題。第一部分任務學習
二、單分支選擇語句
一、雙分支選擇語句
三、邏輯運算符
四、多分支選擇語句if…else
五、嵌套if語句
六、switch語句
七、switch語句中多個case語句相同情況
的處理
第一部分任務學習
一、雙分支選擇語句——體重測量儀改進版【問題提出】在日常的生活中經常會碰到兩種不同的情況,需要分兩支處理的問題。例如,如果學生所有考試都及格了,就可以升級,否則就要留級;痞子蔡說,如果我有一雙翅膀,我就會飛過來看你,否則我就不能來看你。在C語言中這類問題需要用選擇結構中的雙分支選擇結構if...else語句來完成。第一部分任務學習
【工作任務】編寫一個體重測量儀:要求從鍵盤輸入身高和體重后,能夠計算出體重指數。體重指數=體重(kg)/(身高)2;要求實現這樣的判斷:如果體重指數<25,屬于正常;否則屬于肥胖。【思路指導】輸入:身高、體重。輸出:體重指數。第一部分任務學習
定義變量:floatweight,height,index。處理:體重指數=體重(kg)/(身高(米))2,即index=weight/(height*height)。判斷條件:index<25。兩執行語句:如果index<25,輸出“Youareright!”。否則輸出“Youarefat!”。選擇結構的流程圖如圖3-1所示。
第一部分任務學習
圖3-1選擇結構流程圖第一部分任務學習
【解決方案】#include<stdio.h>voidmain(){floatweight,height,index;printf("\n請輸入你的體重:");scanf("%f",&weight);printf("\n請輸入你的身高(米):");scanf("%f",&height);index=weight/(height*height);printf("Theindexofyourweightis:%f",index);if(index<25)printf("Youareright!");elseprintf("Youarefat!");}第一部分任務學習
【運行情況】選擇結構程序運行結果如圖3-2所示。【歸納分析】(1)關系運算符和關系表達式。
圖3-2選擇結構程序運行結果第一部分任務學習
index<25是關系表達式,其中<(小于)是關系運算符,關系運算符用于測試兩個操作數或兩個表達式之間的關系,
其中操作數可以是變量、常量或表達式。C語言中一共提供了6中關系運算符:>、>=、<、<=、==、!=,見表3-1。
表3-1關系運算符C的關系運算符數學中的關系符含義優先級>>大于優先級相同,高于==和!=>=
≥大于或等于<<小于<=≤小于或等于===等于優先級相同,優先級較低!=
≠不等于第一部分任務學習
關系表達式的一般形式為:表達式關系運算符表達式。關系表達式成立,則結果為1,即為真值;否則為0,即為假值,見表3-2。
表3-2關系表達式
表達式(num1=10;num2=5;num3=20;num4=10;)結果(真或假、1或0)(num1+num2)>(num3–num4)真(num1+num2)>=(num3+num4)假num=40;num/10!=2;真num1=2;num1==num4;假注:在關系表達式中不要把關系運算符“==”誤寫成“=”。“a=4”是賦值表達式,則不管a的原來值是多少,表達式“a=4”的結果永遠為真”,因為賦值表達式的值是左邊變量得到的值。第一部分任務學習
(2)
if...else語句。1)
if...else語句形式。if(表達式){語句組1}else{語句組2}2)執行過程。判斷表達式的值,如果表達式值為真,則執行花括號括起來的語句組1,然后繼續執行選擇結構下面的語句;如果第一部分任務學習
表達式值為假,則執行花括號括起來的語句組2,然后繼續執行選擇結構下面的語句。3)注意。①無論是單分支選擇語句,還是雙分支選擇語句,如果語句組只有一個語句,可以省略{},否則花括號必須存在。因為,在沒有花括號的情況下,C編譯系統能夠識別的語句序列只有一句。②if后面的表達式一定要有括號。③if和else同屬于一個if語句,else不能作為語句單第一部分任務學習
獨使用,它只是if語句的一部分,與if配對使用,因此程序中不可以沒有if而只有else。④只能執行與if有關的語句或者執行與else有關的語句,而不可能同時執行兩者。⑤if語句的表達式可以是任意類型C語言的合法表達式,但計算結果必須為整型、字符型或浮點型之一。(4)其執行過程如圖3-3所示。
第一部分任務學習
圖3-3if…else語句執行過程第一部分任務學習
【技能訓練】商場為了提高效益,規定一次性購買物品總價超過1
000元,就會對物品總價打7折,一次性購買物品總價低于1
000元,就會對物品總價打9折。為該商場設計一個收費程序。
第一部分任務學習
程序代碼如下:#include<stdio.h>voidmain(){floatx,y;printf("輸入你所買物品總價格:");scanf("%f",&x);if(x>1000)
y=x*0.7;
else
y=x*0.9;
printf("你所要支付的價格%.1f\n",y);}第一部分任務學習
圖3-4收費程序運行結果程序運行結果如圖3-4所示。
第一部分任務學習
二、單分支選擇語句——身高預測【問題提出】在日常生活中還會經常碰到單分支的情況。例如,學校舉辦C語言輔導班,期中考試成績低于60分的同學必須要參加,對其他的同學不提出任何要求。該問題的特點是只有當某條件成立時才需要處理,否則不處理。在C語言中,處理這種問題時使用省略else的if語句。第一部分任務學習
【工作任務】
每個做父母的都關心自己孩子成人后的身高,據有關生理衛生知識與數理統計分析表明,影響小孩成人后身高的因素有遺傳、飲食習慣和體育鍛煉情況等。小孩成人后的身高與其父母的身高和自身的性別密切相關。設faHeight為其父身高,moHeight為其母身高,身高預測公式為:男性成人時身高=(faHeight+moHeight)*0.54(cm)女性成人時身高=(faHeight*0.923+moHeight)/2(cm)此外,如果喜愛體育鍛煉,那么可增加身高2%;如果有第一部分任務學習
良好的衛生飲食習慣,那么可增加身高1.5%。【思路指導】輸入:性別(用字符型變量sex存儲,輸入字符F表示女性,輸入字符M表示男性)、父母身高(用實型變量存儲,faHeight為其父身高,moHeight為其母身高)、是否喜愛體育鍛煉(用字符型變量sports存儲,輸入字符Y表示喜愛,輸入字符N表示不喜愛)、是否有良好的飲食習慣(用字符型變量diet存儲,輸入字符Y表示喜愛,輸入字符N表示不喜愛)。輸出:身高。處理:利用給定公式和身高預測方法對身高進行預測。
第一部分任務學習
判斷條件:性別男還是女、是否喜愛體育鍛煉、是否有良好的飲食習慣。第一部分任務學習
【解決方案】#include<stdio.h>voidmain(){charsex; /*孩子性別*/charsports; /*是否喜歡體育運動*/chardiet; /*是否有良好的飲食習慣*/floatmyHeight; /*孩子身高*/floatfaHeight; /*父親身高*/floatmoHeight; /*母親身高*/printf("你是男孩(M)還是女孩(F)?");scanf("%1s",&sex);printf("你輸入你爸爸的身高(cm):");
第一部分任務學習
scanf("%f",&faHeight);printf("你輸入你媽媽的身高(cm):");scanf("%f",&moHeight);printf("你是否喜歡體育鍛煉(Y/N)?");scanf("%1s",&sports);printf("是否有良好的飲食習慣等條件(Y/N)?");scanf("%1s",&diet);if(sex=='M')myHeight=(faHeight+moHeight)*0.54;elsemyHeight=(faHeight*0.923+moHeight)/2.0;if(sports=='Y')myHeight=myHeight*(1+0.02);
第一部分任務學習
if(diet=='Y')myHeight=myHeight*(1+0.015);printf("Yourfutureheightwillbe%f(cm)\n",myHeight);}第一部分任務學習
【運行情況】身高預測程序運行結果如圖3-5所示。圖3-5身高預測程序運行結果第一部分任務學習
【歸納分析】(1)
if語句形式:if(表達式){語句組}(2)執行過程:如果表達式的值為真,則執行其后的語句組,否則不執行該語句組。(3)其執行過程如圖3-6所示。
第一部分任務學習
圖3-6單分支選擇語句執行過程第一部分任務學習
【技能訓練】在奧運會體操決賽中最后有3個優勝者,現在編程把這3個優勝者的成績由低到高進行排序。
第一部分任務學習
程序代碼如下:#include<stdio.h>voidmain(){floata,b,c;floatt;printf("請輸入三個運動員的成績");scanf("%f%f%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("\n分數由低到高分別是:%5.2f,%5.2f,%5.2f\n",a,b,c);}第一部分任務學習
圖3-7成績排序程序運行結果程序運行結果如圖3-7所示。
第一部分任務學習
三、邏輯運算符——電梯控制程序【問題提出】在處理問題的時候經常需要同時判斷多個條件。例如,警察在檔案庫中搜索符合條件(如身高1.80m以上,年齡45歲以下的男性)的犯人檔案時,需要使用邏輯運算符。第一部分任務學習
【工作任務】電梯廠商為了提高電梯的利用率,需要一個控制程序,實現如下功能:輸入樓層數,如果樓層是1~5,顯示提示“請走樓梯!”;如果樓層是6~15,顯示提示“請進電梯!”;如果輸入的是1~15之外的數據,顯示提示“本樓只有1~15層,輸入數據錯誤,請重新輸入!”。第一部分任務學習
【思路指導】(1)輸入樓層數x。(2)
if(x)在1~15之外,顯示提示“本樓只有1—15層,輸入數據錯誤,請重新輸入!”;if(x)在1~5之間,顯示提示“請走樓梯!”;if(x)在6~15之間,顯示提示“請進電梯!”。第一部分任務學習
【解決方案】#include<stdio.h>voidmain(){intx;
printf("請輸入你所到的樓層數");scanf("%d",&x);if(x<1&&x>15)printf("本樓只有1~15層,輸入數據錯誤,請重新輸入!\n");if(x>=1&&x<=5)printf("請走樓梯!\n");if(x>=6&&x<=15)printf("請進電梯!\n");}
第一部分任務學習
【運行情況】電梯控制程序運行結果如圖3-8所示。圖3-8電梯控制程序運行結果第一部分任務學習
【歸納分析】(1)邏輯運算符用于連接一個或多個條件,判斷這些條件是否成立,C語言中提供了3種邏輯運算符。與運算符“&&”和或運算符“||”均為雙目運算符,具有左結合性。非運算符“!”為單目運算符,具有右結合性。邏輯運算符的優先級見表3-3。第一部分任務學習
(2)各種運算符的結合性見表3-4。(3)邏輯運算的值。邏輯運算的值為“真”和“假”兩種,用“1”和“0”來表示。表3-3邏輯運算符優先級邏輯運算符含義優先級結合性!邏輯非高自右至左&&邏輯與中自左至右||邏輯或低自左至右第一部分任務學習
表3-4運算符的結合性
高運算符描述結合性優先級()圓括號自左向右低++、--、!自增、自減、邏輯非自右至左*、/、%乘法、除法、取余自左向右+、-加法、減法自左向右>、>=、<、<=大于、大于等于、小于、小于等于自左向右!=、==不等于、等于自左向右&&邏輯與自左向右||邏輯或自左向右=、+=、-=、/=、%=賦值運算符,復合賦值運算符自右至左,逗號運算符自左向右第一部分任務學習
1)與運算“&&”。參與運算的兩個量都為真時,結果才為真,否則為假。二級C語言考試的時候,只有筆試和機試都考過去的時候,你的這次考試才算成功,可以用一個表格來表示這之間的關系,見表3-5。
表3-5二級C過關情況筆試機試二級C過關情況表達式1與表達式2結果不及格不及格失敗0&&00不及格及格失敗0&&10及格不及格失敗1&&00及格及格成功1&&11第一部分任務學習
2)或運算“||”。參與運算的兩個量只要有一個為真,結果就為真;兩個量都為假時,結果為假。現在買東西支付的方式有很多種,你只要用任何一種方式支付就可以,可以用一個表格來表示這之間的關系,見表3-6。
表3-6支付情況錢信用卡支付情況表達式1或表達式2結果沒有沒有失敗0||00有沒有成功1||01沒有有成功0||11有有成功1||11第一部分任務學習
3)非運算“!”。參與運算量為真時,結果為假;參與運算量為假時,結果為真。(4)邏輯表達式。1)邏輯表達式是用邏輯運算符將兩個表達式連接起來的式子。2)邏輯表達式也只有兩個值,分別是0和1。邏輯表達式結果非0,非0為真,真為1;邏輯表達式結果為0,0為假,假為0。閱讀下面這個程序,分析程序結果。第一部分任務學習
#include<stdio.h>voidmain(){inta=-5,i,j,k,l,m;floatb=0.01;i=!a;j=a&&b;k=a||b;l=(5>3&&2||8<4-!0);m='a'<'b'&&'5'>'9';printf("i=%d,j=%d,k=%d,l=%d,m=%d\n",i,j,k,l,m);}運行結果:i=0,j=1,k=1,l=1,m=0
第一部分任務學習
3)短路特性。邏輯表達式求解時,并非所有的邏輯運算符都被執行,只是在必須執行下一個邏輯運算符才能求出表達式的解時,才執行該運算符。①邏輯與運算符“&&”。如邏輯表達式a&&b&&c,執行過程是:當a為0時,b和c不需要再判斷,邏輯與運算符將不再執行,結果為0,否則還要繼續后邊的運算。②邏輯或運算符“||”。如邏輯表達式a||b||c,執行過程是:當a為非0時,b和第一部分任務學習
c不需要再判斷,邏輯或運算符將不再執行,其結果為1,否則繼續執行后面的運算。閱讀下面這個程序,分析程序結果。#include<stdio.h>voidmain(){inta,b=0,c=0,d=0;scanf("%d",&a);d=a&&(b=5)&&(c=3);printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);}運行結果:第一部分任務學習
輸入:1輸出:a=1,b=5,c=3,d=1輸入:0輸出:a=0,b=0,c=0,d=04)熟練的將現實生活中的條件轉換為C條件表達式,是編寫選擇程序的基礎。體會下列常用的C語言條件表達式。①關系式1≤x≤5:x>=1&&x<=5。②x是3或5的倍數:x%3==0||x%5==0。③a、b同號:a>0&&b>0||a<0&&b<0或者a*b>0。④a、b同時為零:a==0&&b==0,或者a*a+b*b==0。⑤x是字母:(x>='a'&&x<='z')||(x>='A'&&x<='Z')。
第一部分任務學習
⑥ch是否為小寫英文字母:(ch>='a')&&(ch<='z')或ch>='a'&&ch<='z'。⑦ch是空格或者回車:ch==''||ch=='\n'。⑧number是偶數:number%2==0。⑨year是閏年:(year%4==0&&year%100!=0)||(year%400==0)。【技能訓練】輸入三角形三邊長,求三角形面積。程序代碼如下:第一部分任務學習
#include<stdio.h>#include<math.h>voidmain(){floata,b,c,l,s;printf("請輸入三邊長a,b,c的值:");scanf("%f,%f,%f",&a,&b,&c);if(a>0&&b>0&&c>0&&a+b>c&&b+c>a&&a+c>b){l=(a+b+c)/2;s=sqrt(l*(l-a)*(l-b)*(l-c));printf("s=%.2f\n",s);}
elseprintf("你所輸入的數據有問題!\n");}第一部分任務學習
程序運行結果如圖3-9所示。
圖3-9求三角形面程序運行結果第一部分任務學習
四、多分支選擇語句if…else——體重測量儀改進版【問題提出】一個人站在交叉路口正在思考:這么多條路讓我選擇我到底應該選擇哪條路呢?他通過看路牌,然后選擇了一條能夠到達自己目的地的路。例如,評分等級為A、B、C、D,如果分數大于等于85,則為A級,否則(分數小于85)繼續判斷;如果分數大于等于75,則為B級,否則(分數小于75)繼第一部分任務學習
續判斷;如果分數大于等于60,則為C級,否則(分數小于60)為D級。這個問題不是一個或者兩個的選擇,而是多分支的選擇,在C語言中可以選用多分支選擇語句if-else來解決這類問題。第一部分任務學習
【工作任務】編寫一個體重測量儀:要求從鍵盤輸入身高和體重后,能夠計算出體重指數。體重指數=體重(kg)/(身高)2。要求實現如下的判斷。偏瘦:體重指數<18。
正常:18<=體重指數<25。微胖:25<=體重指數<30。較胖:30<=體重指數<35。肥胖:35<=體重指數<40。很胖:體重指數>=40。第一部分任務學習
【思路指導】輸入:身高、體重。輸出:體重指數。定義變量:floatweight,height,index;。
處理:體重指數=體重(kg)/(身高)2;。判斷條件:如果體重指數小于18,偏瘦否則如果體重指數小于25,標準否則如果體重指數小于30,微胖否則如果體重指數小于35,較胖否則如果體重指數小于40,肥胖否則很胖
第一部分任務學習
【解決方案】#include<stdio.h>voidmain(){floatweight,height,index;printf("\n請輸入你的體重:");scanf("%f",&weight);printf("\n請輸入你的身高(米):");scanf("%f",&height);index=weight/(height*height);printf("Theindexofyourweightis:%f",index);if(index<18)printf("偏瘦!\n");elseif(index<25)printf("標準!\n");
elseif(index<30)printf("微胖!\n");elseif(index<35)printf("較胖!\n");elseif(index<40)printf("肥胖!\n");elseprintf("很胖!\n");}
第一部分任務學習
【運行情況】程序運行結果如圖3-10所示。
圖3-10多分支選擇語句程序運行結果第一部分任務學習
【歸納分析】(1)要處理多重條件判斷的情況,需要使用多分支選擇結構,如圖3-11所示。圖3-11多分支選擇結構第一部分任務學習
(2)多分支if…else語句。1)一般形式為:if(表達式1){語句組1}elseif(表達式2){語句組2}elseif(表達式3){語句組3}…elseif(表達式n){語句組n}else{語句組n+1}2)執行過程。如果表達式1為真,執行花括號括起來的語句組1,然后第一部分任務學習
自動退出多分支語句結構,繼續執行選擇結構下面的語句。如果表達式1為假,不執行花括號括起來的語句組1,再來判斷表達式2是否為真。如果表達式2為真,執行花括號括起來的語句組2,然后自動退出多分支語句結構,繼續執行選擇結構下面的語句。如果表達式2為假,不執行花括號括起來的語句組2,再來判斷表達式3是否為真。依此類推……如果所有的條件都不成立,則執行最后一個else下的語句組n+1,然后繼續執行選擇結構下面的語句。
第一部分任務學習
3)多分支if…else語句的執行過程如圖3-12所示。
圖3-12多分支if…else語句的執行過程第一部分任務學習
【技能訓練】從鍵盤輸入一個學生的分數,要求實現這樣的判斷功能:如果分數大于100,輸出“Inputerror!”;如果分數介于100到90之間,輸出“VeryGood!”;如果分數介于80到90之間,輸出“Good!”;如果分數介于70到80之間,輸出“Middle!”;如果分數介于60到70之間,輸出“Pass!”;如果分數小于60,輸出“NoPass!”。程序代碼如下:第一部分任務學習
#include<stdio.h>voidmain(){floatscore;printf("pleaseinputanumber:\n");scanf("%f",&score);if(score>100)printf("Inputerror!");elseif(score>=90)printf("verygood!");elseif(score>=80)printf("good!");elseif(score>=70)printf("middle!");elseif(score>=60)printf("pass!");elseprintf("nopass!");}第一部分任務學習
圖3-13考試通過情況判斷程序進行結果程序運行結果如圖3-13所示。
第一部分任務學習
五、嵌套if語句——求解分段函數【問題提出】在日常生活中,經常遇到兩個分支的問題,也經常遇到其中一個分支或兩分支中又包含另外分支的問題。例如,在一個交叉路口選擇一條路線,過了該交叉口,又遇到另一個交叉路口。程序設計中也經常會遇到同類問題,例如,根據學生性別判斷該學生是否男生,對于男生,再判斷是否大于20歲。此類問題需要在if語句中包含另一個if語句。第一部分任務學習
【工作任務】編寫程序,輸入x值,求下面分段函數的值。
第一部分任務學習
【思路指導】在嵌套if語句中要注意條件的組織順序。【解決方案】#include<stdio.h>voidmain(){floatx=0,y=0;printf("請輸入x的值:\n");scanf("%f",&x);if(x<0)y=0;elseif(x<5)y=2*x+4;elseif(x<10)y=x*x;
elsey=8;
printf("x=%f,y=%f\n",x,y);}第一部分任務學習
【運行情況】嵌套if語句程序運行結果如圖3-14所示。
圖3-14嵌套if語句程序運行結果第一部分任務學習
【歸納分析】(1)在一個if語句中又包含另一個if語句,從而構成了if語句的嵌套使用。內嵌的if語句既可以嵌套在if子句中,也可以嵌套在else子句中。1)if嵌套if…else。if()if()語句1 /*內層的if…else語句*/else語句22)if…else嵌套if…else。if()
第一部分任務學習
if()語句1 /*內層的if…else語句*/else語句2elseif()語句1 /*內層的if…else語句*/else語句23)if…else嵌套if。if()if()語句/*內層的if語句*/elseif()語句/*內層的if語句*/第一部分任務學習
(2)
if語句的嵌套形式不是刻意去追求的,而是在解決問題過程中隨著解決問題的需要而采用的。if與else的配對規則,if語句出現嵌套形式時,C語言規定,else子句總是和前面最近的不帶else子句的if語句配對,與書寫格式無關。注意書寫格式要有層次感(好的程序員應該養成這一習慣,以便他人理解你的程序和自己將來的修改)。如果if的數目和else的數目相同,從內層到外層一一對應,不易出錯。如果if與else的數目不一致,為實現編程者的意圖,必要的時候必須加“{}”,來強制確定配對關系。否則,就不能實現編程者的真正意圖。
第一部分任務學習
(3)大家可以嘗試其他的解法來解決這一題。注意嵌套的層數不要太多,否則容易出現問題。【技能訓練】輸入學生平時成績和期末成績,計算總評成績。總評成績由平時成績的40%和期末成績的60%相加產生。如果學生在該門課的競賽中獲獎,則對于平時成績高于90分的學生,平時成績按100分處理,否則附加10分;對于期末成績高于85分的學生,期末成績按100分處理,否則附加15分。第一部分任務學習
程序代碼如下:#include<stdio.h>voidmain(){floata,b;charc;doubletotal;printf("請輸入平時成績、期末成績和是否獲獎(Y/y):");scanf("%f,%f,%c",&a,&b,&c);if(c=='Y'||c=='y'){if(a>90)a=100;
第一部分任務學習
elsea=a+10;if(b>85)b=100;elseb=b+15;}total=a*0.4+b*0.6;printf("a=%.1f,b=%.1f,total=%.1f\n",a,b,total);}
第一部分任務學習
圖3-15運行結果程序運行結果如圖3-15所示。
第一部分任務學習
六、switch語句——模擬自動飲料機【問題提出】在日常生活經常會遇到命令操作。例如,乘電梯時,按8則到第8層,按12則到第12層,按20則到第20層;再如,按自動售貨機上不同的按鈕會落下相應的商品等。在C語言中也經常要處理相同情況的問題,處理鍵盤命令操作,一般使用switch語句。當處理多分支問題時,雖然使用嵌套的if語句也能解決,但因嵌套層次多,編程時容易出錯,所以常使用switch語句。第一部分任務學習
【工作任務】模擬自動飲料機,按屏幕所示功能,輸入所選擇的合法數字,輸出可獲得的相應飲料名稱。【思路指導】(1)如何組織屏幕顯示。(2)對各種選擇如何響應。(3)如何選擇不在規定范圍內怎么辦。第一部分任務學習
【解決方案】#include"stdio.h"voidmain(){intbutton;printf("==========自動飲料機==========\n");
printf("1.可口可樂\n");printf("2.雪碧\n");printf("3.芬達\n");printf("4.百事可樂\n");printf("5.非常可樂\n");printf("請按1--5鍵選擇飲料:\n");scanf("%d",&button);switch(button){case1:printf("\n你獲得一聽可口可樂\n");break;
第一部分任務學習
case2:printf("\n你獲得一聽雪碧\n");break;case3:printf("\n你獲得一聽芬達\n");break;case4:printf("\n你獲得一聽百事可樂\n");break;case5:printf("\n你獲得一聽非常可樂\n");break;
default:printf("\n非法操作!\n");break;}}第一部分任務學習
【運行情況】程序運行結果如圖3-16所示。
圖3-16自動飲料機程序運行結果第一部分任務學習
【歸納分析】(1)switch語句。1)switch語句的一般形式。switch(表達式){case 常量表達式1:語句組1;case 常量表達式2:語句組2;case 常量表達式3:語句組3;……case 常量表達式n:語句組n;default:語句組n+1;}第一部分任務學習
2)
switch語句的執行過程。先拿switch后的表達式與第一個case后面的常量表達式1的值相比,如果相同,就執行語句組1(語句組1后如果有break語句,就退出switch語句,繼續執行switch語句后的語句;語句組1后如果沒有break語句,繼續執行下一個case后的語句組2;依此類推……);如果不同,再拿switch后的表達式與第二個case后面的常量表達式2的值相比,如果相同,就執行語句組2(同上面括號內),依此類推;如果找不到匹配的case值則執行default語句,如果找不到匹配的第一部分任務學習
case值且不存在默認語句(default),則跳過switch語句體,什么也不做。3)注意。①switch后面的“表達式”,可以是int、char和枚舉型中的一種。②每個case后面“常量表達式”的值,必須各不相同,否則會出現相互矛盾的現象(對表達式的同一值,有兩種或兩種以上的執行方案)。③case后面的常量表達式僅起語句標號作用,并不進第一部分任務學習
行條件判斷。系統一旦找到入口標號,就從此標號開始執行,不再進行標號判斷,所以必須加上break語句,以便結束switch語句。④各case及default子句的先后次序,不能影響程序執行結果。⑤多個case子句,可共用同一語句(組)。⑥用switch語句實現的多分支結構程序,完全可以用if語句或if語句的嵌套來實現。(2)本程序的執行過程。第一部分任務學習
1)case1、case2、case3、case4、case5、default是6個分支位置,通過switch(button)中的button的值決定要執行的分支。2)當button的值為“1”、“2”、“3”、“4”、“5”時,分別執行case1、case2、case3、case4、case5后的語句,遇到break語句,立即退出switch語句;當button的值為其他字符時,執行default后面的語句,遇到break語句,也立即退出switch語句。3)使用switch語句處理分支結構時,不能隨意丟掉第一部分任務學習
break語句,否則無法實現分支效果。假設程序做出如下修改,當從鍵盤輸入2時候,則輸出“你獲得一聽雪碧”,然后又輸出“你獲得一聽芬達”和“你獲得一聽百事可樂”。由于當你輸入2時,則執行case2后的語句,但是由于沒有break語句,程序不能退出switch語句,繼續向下執行,并且不再判斷button的值和常量表達式是否一樣,而是無條件的直接執行后面的語句直到遇到break語句后才退出switch語句。程序代碼如下:第一部分任務學習
#include"stdio.h"voidmain(){intbutton;printf("==========自動飲料機==========\n");printf("1.可口可樂\n");printf("2.雪碧\n");printf("3.芬達\n");printf("4.百事可樂\n");printf("5.非常可樂\n");printf("請按1--5鍵選擇飲料:\n");scanf("%d",&button);switch(button)
{case1:printf("\n你獲得一聽可口可樂\n");case2:printf("\n你獲得一聽雪碧\n");case3:printf("\n你獲得一聽芬達\n");
第一部分任務學習
case4:printf("\n你獲得一聽百事可樂\n");break;case5:printf("\n你獲得一聽非常可樂\n");}}程序運行結果如圖3-17所示。
圖3-17無break語句的Switch語句運行結果第一部分任務學習
【技能訓練】設計簡單的菜單。修改在順序程序章節編寫的菜單程序,設計如圖2-1所示的菜單。程序代碼如下:#include<stdio.h>voidmain(){intk;printf("********************************\n");printf("||--------請輸入(0-5)---------||\n");printf("||1--------信息錄入||\n");printf("||2--------成績計算||\n");printf("||3--------成績排序||\n");
第一部分任務學習
printf("||4--------查詢成績||\n");printf("||5--------修改成績||\n");printf("||0--------退出||\n");printf("********************************\n");printf("請輸入你的選擇\n");scanf("%d",&k);switch(k){case1:printf("\n1--------信息錄入\n");break;case2:printf("\n2--------成績計算\n");break;
case3:printf("\n3--------成績排序\n");break;case4:printf("\n4--------查詢成績\n");break;case5:printf("\n5--------修改成績\n");break;case0:printf("\n0--------退出\n");break;default:printf("\n非法操作!\n");break;}}第一部分任務學習
程序運行結果如圖3-18所示。
圖3-18學生信息系統程序運行結果第一部分任務學習
七、switch語句中多個case語句相同情況的處理【問題提出】有時在多個不同分支中需要處理的操作相同,例如在鍵盤上按大寫字母“A”或小寫字母“a”時都顯示“again”,按大寫字母“E”或小寫字母“e”時都顯示“end”,這時可以簡化switch語句。第一部分任務學習
【工作任務】假設要處理的年份是2008年,編寫程序,輸入該年的某月份,輸出該月的天數。【思路指導】在2008年,一月、三月、五月、七月、八月、十月、十二月的天數是31,二月的天數是29,四月、六月、九月、十一月的天數是30,要輸出某月的天數,需要處理13個分支(一月、二月、……、十二月和非法數據)。第一部分任務學習
【解決方案】#include<stdio.h>voidmain(){intmonth=0,day=0;printf("請輸入月份:\n");scanf("%d",&month);switch(month){case1:case3:case5:case7:case8:case10:
第一部分任務學習
case12:day=31;break;case2:day=29;break;case4:case6:case9:case11:day=30;break;default:printf("非法數據!\n");}printf("day=%d\n",day);}第一部分任務學習
【運行情況】日歷程序運行結果如圖3-19所示。
圖3-19日歷程序運行結果第一部分任務學習
【技能訓練】要求用switch語句編程設計一個簡單的計算器程序。程序代碼如下:#include<stdio.h>#include<math.h>voidmain(){floatdata1,data2; /*定義兩個操作符*/charop; /*定義運算符*/printf("Pleaseentertheexpression:\n");scanf("%f%1s%f",&data1,&op,&data2); /*輸入運算表達式*/switch(op)/*根據輸入的運算符確定要執行的運算*/{第一部分任務學習
case'+':printf("%f+%f=%f\n",data1,data2,data1+data2);break;
case'-':printf("%f-%f=%f\n",data1,data2,data1-data2);break;case'*':printf("%f*%f=%f\n",data1,data2,data1*data2);break;case'/':if(fabs(data2)<=1e-7) /*與實數0比較*/printf("Divisionbyzero!\n");
elseprintf("%f/%f=%f\n",data1,data2,data1/data2);break;default:printf("Unknownoperator!\n");}}第一部分任務學習
程序運行結果如圖3-20所示。
圖3-20計算器程序運行結果第二部分項目學習
項目學習五菜單設計
第二部分項目學習
項目學習五菜單設計【工作任務】本節只實現顯示功能,即顯示成績管理系統的進入界面,用戶可以通過界面進行菜單選擇,選擇所要進入的模塊。程序開始運行時出現如圖2-18所示的菜單選擇界面。【思路指導】菜單設計的知識涉及的知識是順序結構,如果想實現菜單選擇要使用多分支的選擇語句。
第二部分項目學習
【解決方案】#include<stdio.h>voidmain(){intkprintf("\n\n\t||=========================||");printf("\n\n\t||------------------歡迎使用成績管理系統--------------||");printf("\n\n\t||----------------------welcome-------------------||");printf("\n\n\t||--------------------謝謝使用本系統----------------||");printf("\n\n\t||-----------------徐州工業職業技術學院---------------||");
第二部分項目學習
printf("\n\n\t||=========================||");printf("\n\n\t||---------------------請選擇(1-6)-----------------||");printf("\n\n\t||------------------------------------------------||");printf("\n\n\t||1.輸出信息||");printf("\n\n\t||2.計算結果||");printf("\n\n\t||3.排序信息||");printf("\n\n\t||4.查找信息||");printf("\n\n\t||5.修改信息||");printf("\n\n\t||6.退出系統||");printf("\n\n\t||------------------------------------------------||");do
第二部分項目學習
{printf("\n密碼:1(輸入)&2(計算)&3(排序)&4(查找)&5(修改)&6(完成):");scanf("%d",&k);switch(k){case1:(input());break;case2:(aver_stu());break;case3:(sort());break;case4:(cha());break;case5:(xiu());break;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國馬達保護開關行業發展研究報告
- 2025至2030年中國高級工藝畫框行業發展研究報告
- 2025至2030年中國食品級黃原膠行業發展研究報告
- 2025至2030年中國陽離子烷基多糖苷行業發展研究報告
- 酒店管理團隊能力建設培訓體系
- 2025至2030年中國鋼木架桌行業發展研究報告
- 2025至2030年中國遙控器接收器行業發展研究報告
- 2025至2030年中國足球臺行業發展研究報告
- 2025至2030年中國蝶式雙辨消聲止回閥行業發展研究報告
- 2025至2030年中國舞臺喇叭行業發展研究報告
- 2024屆新高考語文高中古詩文必背72篇 【原文+注音+翻譯】
- 2024年世界職業院校技能大賽中職組“嬰幼兒保育組”賽項考試題庫-下(多選、判斷題)
- 安檢服務課件教學課件
- 起重鋼絲繩自動計算
- 中華人民共和國學前教育法
- 2025年全國普通話水平測試全真試題庫(含答案)
- 建材銷售訂單合同模板
- 人教版英語八年級下冊 期末讀寫綜合專項訓練練習
- 足浴技師與店內禁止黃賭毒協議書范文
- IATF16949質量管理手冊
- 金融調解中心建設方案
評論
0/150
提交評論