版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
信息工程學(xué)院電子信息技術(shù)專業(yè)項目3選擇結(jié)構(gòu)程序設(shè)計條件結(jié)構(gòu)就像一個岔路口,可以向左走,也可以向右走。比如上洗手間,我們知道我們的性別,這時候我們需要根據(jù)洗手間提供的條件,左邊男洗手間,右邊女洗手間,或者正好相反,其中性別就是這個條件結(jié)構(gòu)的條件。再比如,現(xiàn)在的分?jǐn)?shù)都流行使用A、B、C來分級,假設(shè)考試成績是93分,可以將其設(shè)置為等級A,考試成績是87,可以將其設(shè)置為等級B,這里分?jǐn)?shù)區(qū)間即為條件結(jié)構(gòu)中的條件。任務(wù)3.1用if語句實現(xiàn)的選擇結(jié)構(gòu)
任務(wù)說明與順序結(jié)構(gòu)一樣,選擇結(jié)構(gòu)(或分支結(jié)構(gòu))也是程序設(shè)計的基本結(jié)構(gòu)之一。所謂選擇結(jié)構(gòu),就是根據(jù)不同的條件作出判斷,進(jìn)而選擇執(zhí)行不同的操作。用if語句可以構(gòu)成選擇結(jié)構(gòu)。在本任務(wù)中,將學(xué)習(xí)if語句的使用方法。任務(wù)實施1.任務(wù)功能編寫程序,求下面分段函數(shù)的值,要求x的值從鍵盤輸入。圖3-1求解函數(shù)流程圖2.編程思路
首先,判斷x的值是否小于等于0,當(dāng)x的值小于等于0時,根據(jù)表達(dá)式y(tǒng)=0計算函數(shù)的值。否則,再判斷x的值是否大于10,當(dāng)x的值大于10時,根據(jù)表達(dá)式y(tǒng)=2x+3計算函數(shù)的值。否則,根據(jù)表達(dá)式計算函數(shù)的值。求分段函數(shù)值的流程如圖3-1所示。3.編寫程序Ex3-1.c#include<stdio.h>/*包含頭文件*/#include<math.h>/*包含頭文件*/voidmain(){floatx,y;/*定義兩個實型變量*/printf("請輸入x的值:\n");scanf("%f",&x);/*從鍵盤輸入x的值*/if(x<=0)/*如果x≤0*/y=0;else{ if(x>10)/*如果x>10*/ y=2*x+3;/*計算y的值*/
else/*隱含0<x≤10*/
y=sqrt(x);/*計算y的值*/
}printf("y=%.2f\n",y);/*輸出y的值*/
}
4.運行、調(diào)試在VC++6.0開發(fā)環(huán)境下,編輯、編譯和調(diào)試源程序Ex3-1.c。程序運行的結(jié)果為:請輸入x的值:5<回車>y=2.24任務(wù)拓展將源程序Ex3-1.c中用if嵌套語句求分段函數(shù)的值改為用if-else-if語句(即多分支選擇結(jié)構(gòu))來實現(xiàn),并比較二者有什么不同。相關(guān)知識一、關(guān)系運算符與關(guān)系表達(dá)式(1)關(guān)系運算符。關(guān)系運算符用于判斷兩邊操作數(shù)的大小關(guān)系。C語言中提供了6種關(guān)系運算符,如表3-1所示。其中,前4種關(guān)系運算符的優(yōu)先級相同,后2種關(guān)系運算符的優(yōu)先級相同,且前4種關(guān)系運算符的優(yōu)先級又高于后2種。關(guān)系運算符的優(yōu)先級低于算術(shù)運算符,但又高于賦值運算符。關(guān)系運算符都是雙目運算符,其結(jié)合性均為左結(jié)合。表3-1關(guān)系運算符注意,在C語言中“==”和“=”是兩種完全不同的運算符,前者為關(guān)系運算符中的相等運算符,后者為賦值運算符。運算符說明運算符說明>大于<=小于或等于<小于==等于>=大于或等于!=不等于(2)關(guān)系表達(dá)式。用關(guān)系運算符把兩個C語言表達(dá)式連接起來的式子稱為關(guān)系表達(dá)式。a<b、a+b>c-d、(a=3)<=(b=5)、'a'>='b'、(a>b)==(b>c)都是合法的關(guān)系表達(dá)式。若關(guān)系表達(dá)式成立,則結(jié)果為“真”,用整數(shù)“1”表示;若關(guān)系表達(dá)式不成立,則結(jié)果為“假”用整數(shù)“0”表示。例如:a=5,b=4,c=1。則:①關(guān)系表達(dá)式“a>b”成立,其值為“真”,即表達(dá)式的值為1。②關(guān)系表達(dá)式“(a>b)==c”成立,其值為“真”,即表達(dá)式的值為1。因為“a>b”成立,其值為1,等于c的值。③關(guān)系表達(dá)式“b+c<a”不成立,其值為“假”,即表達(dá)式的值為0。二、邏輯運算符與邏輯表達(dá)式(1)邏輯運算符。C語言中提供了3種邏輯運算符,如表3-2所示。表3-2邏輯運算符運算符說明&&邏輯與||邏輯或!邏輯非邏輯運算符的運算規(guī)則如下:①邏輯與“&&”。當(dāng)且僅當(dāng)兩個運算對象都為“真”時,運算結(jié)果為“真”,否則為“假”。②邏輯或“||”。當(dāng)且僅當(dāng)兩個運算對象都為“假”時,運算結(jié)果為“假”,否則為“真”。③邏輯非“!”。當(dāng)運算對象為“真”時,運算結(jié)果為“假”;當(dāng)運算對象為“假”時,運算結(jié)果為“真”。注意,參與邏輯運算的對象,非0即認(rèn)為“真”,0認(rèn)為“假”。而運算結(jié)果為“真”時,用整數(shù)1表示,運算結(jié)果為“假”時,用整數(shù)0表示。
邏輯運算符的優(yōu)先級如下:①三者相比較。邏輯非的優(yōu)先級最高,邏輯與次之,邏輯或最低。!(非)→&&(與)→||(或)。②與其它種類運算符的優(yōu)先級比較。!→算術(shù)運算符→關(guān)系運算符→&&→||→賦值運算符→逗號運算符根據(jù)運算符的優(yōu)先級可知,表達(dá)式“a>b&&c>d”等價于“(a>b)&&(c>d)”,“a+b>c&&x+y<b
”等價于“((a+b)>c)&&((x+y)<b)”。(2)邏輯表達(dá)式。用邏輯運算符將一個或多個表達(dá)式連接起來的式子稱為邏輯表達(dá)式。例如,a=7,b=9,則邏輯表達(dá)式“a&&b”的值為1。因為運算對象a和b均為非0的數(shù),即都為“真”,“a&&b”運算的結(jié)果為“真”,即為1。三、條件運算符與條件表達(dá)式“?:”為條件運算符,它要求有3個操作對象,故稱為三目運算符。它是C語言中唯一的一個三目運算符。由條件運算符連接的表達(dá)式稱為條件表達(dá)式。其一般形式為:表達(dá)式1?表達(dá)式2:表達(dá)式3條件運算符的執(zhí)行順序是,先求解表達(dá)式1的值,若為非0(即為“真”)則求解表達(dá)式2,表達(dá)式2的值就作為整個條件表達(dá)式的值。若表達(dá)式1的值為0(即為“假”),則求解表達(dá)式3,表達(dá)式3的值就是整個條件表達(dá)式的值。如a=2、b=3、max=(a>b)?a:b,則max的值為3。其執(zhí)行過程是,先求解表達(dá)式“a>b”,由于“a>b”的值為0,故max的值等于b的值3。ABab條件pYN當(dāng)p為“真”當(dāng)p為“假”
四、if語句的三種形式
選擇結(jié)構(gòu)程序又稱分支結(jié)構(gòu)程序。程序一般是順序執(zhí)行的,即按書寫順序一條語句一條語句地執(zhí)行,但是選擇結(jié)構(gòu)可以改變程序的執(zhí)行順序。選擇結(jié)構(gòu)還可能造成某些語句不被執(zhí)行,選擇結(jié)構(gòu)也使計算機具備了邏輯判斷能力。
選擇結(jié)構(gòu)是根據(jù)條
件有選擇地執(zhí)行程序
代碼,如圖3-2所示。圖3-2選擇結(jié)構(gòu)程序執(zhí)行示意圖如果(用戶輸入的密碼是:123)
輸出:密碼正確!否則
輸出:密碼錯誤!if(判斷式){判斷式成立時所執(zhí)行的語句}else{判斷式不成立時所執(zhí)行的語句}程序代碼:#include<stdio.h>main(){inta;printf(“請輸入密碼:”);
scanf(“%d”,&a);/*用戶輸入密碼*/
if(a==123)/*密碼判斷*/{printf(“密碼正確!\n”);
}else{printf(“密碼錯誤!\n”);
}}實例一:根據(jù)上網(wǎng)用戶輸入的年齡,決定彈出信息,如年齡小于18,則彈出“你太小了,還不能到網(wǎng)吧上網(wǎng)哦!”,否則彈出“祝你玩得愉快!”程序代碼:#include<stdio.h>voidmain(){inta;printf("請輸入你的年齡:");scanf(“%d”,&a);
if(a>=18){printf(“祝你玩得愉快!\n”);
}
else{printf(“你太小了,還不能到網(wǎng)吧上網(wǎng)哦!\n”);
}}實例二:
if語句有3種形式:if單分支選擇結(jié)構(gòu),if…else…雙分支選擇結(jié)構(gòu),if…elseif多分支選擇結(jié)構(gòu)。
1.單分支選擇結(jié)構(gòu)。單分支選擇結(jié)構(gòu)的一般形式為:
if(表達(dá)式)語句;
表達(dá)式后面的語句可以是一條語句,也可以是復(fù)合語句。程序執(zhí)行的流程是:先計算表達(dá)式的值,若值為非0(即為“真”),則執(zhí)行語句,否則就跳過語句。執(zhí)行流程如圖3-3所示。例如,如果學(xué)生的成績grade大于等于60,在屏幕上顯示“恭喜你,通過了!”。該操作用if語句描述為:
if(grade>=60)printf("恭喜你,通過了!");圖3-3單分支選擇結(jié)構(gòu)流程圖2.雙分支選擇結(jié)構(gòu)。雙分支選擇結(jié)構(gòu)的一般形式為:
if(表達(dá)式)
語句1;else
語句2;
語句1和語句2可以是一條語句,也可以是復(fù)合語句。程序執(zhí)行的流程是:先計算表達(dá)式的值,若值為非0(即為“真”),則執(zhí)行語句1,否則執(zhí)行語句2。執(zhí)行流程如圖3-4所示。圖3-4雙分支選擇結(jié)構(gòu)流程圖【例3-1】輸入兩個整數(shù),求其中較大的整數(shù)。#include<stdio.h>/*包含頭文件*/voidmain(){inta,b,max;/*定義三個整型變量*/
printf("請輸入兩個整數(shù):");scanf("%d,%d",&a,&b);/*從鍵盤輸入變量的值*/if(a>b)
/*如果a大于b*/
max=a;
/*變量a的值賦給max*/else
/*否則*/
max=b;
/*變量b的值賦給max*/printf("max=%d\n",max);/*輸出max的值*/
}程序運行的結(jié)果為:請輸入兩個整數(shù):5,9<回車>max=93.多分支選擇結(jié)構(gòu)。多分支選擇結(jié)構(gòu)的一般形式為:if(表達(dá)式1)
語句1;elseif(表達(dá)式2)
語句2;elseif(表達(dá)式3)
語句3;
……elseif(表達(dá)式n-1)
語句n-1;else
語句n;
語句1、語句2、……、語句n可以是一條語句,也可以是復(fù)合語句。
程序執(zhí)行的流程是,若表達(dá)式1的值為非0(即為“真”),則執(zhí)行語句1。否則,去判定elseif后面的表達(dá)式2,如果其值為非0,則執(zhí)行語句2。否則,去判定下一個elseif后面的條件3,如果值為非0,則執(zhí)行語句3。以此類推。如果條件1、條件2、條件3、……、條件n?1都為0,那么執(zhí)行else后面的語句n。執(zhí)行流程如圖3-5所示。
圖3-5多分支選擇結(jié)構(gòu)流程圖23【例3-2】根據(jù)輸入的學(xué)生的成績打印出對應(yīng)的等級。#include<stdio.h>/*包含頭文件*/voidmain(){floatscore;/*定義一個實型變量*/
printf("請輸入考試分?jǐn)?shù):");scanf("%f",&score);/*從鍵盤輸入score的值*/if(score>=90)/*如果score≥90*/
printf("優(yōu)秀\n");elseif(score>=80)/*否則如果90>score≥80*/printf("良好\n");elseif(score>=60)/*否則如果80>score≥60*/printf("及格\n");else/*否則score<60*/printf("不及格\n");}程序運行的結(jié)果為:請輸入考試分?jǐn)?shù):85.5<回車>良好課堂練習(xí):設(shè)計一個程序計算以下函數(shù)的結(jié)果。
0(x<0)y=x2(0≤x<10)2x+3(x≥10)2.編程思路分析
分段函數(shù)的求解,當(dāng)輸入一個x的值后,先判斷它落在什么區(qū)間,然后再決定采用哪一個函數(shù)進(jìn)行計算。設(shè)計流程如圖3-6所示??捎靡韵聝煞N方法實現(xiàn)。圖3-6函數(shù)計算流程圖方法一:#include<stdio.h>voidmain(){floatx,y;printf("inputx:\n");scanf("%f",&x);
if
(x>=10)
y=2*x+3;
else
if(x>=0)y=x*x;
else
y=0;printf("y=%f\n",y);}作業(yè)P533.編程題(1)思考與練習(xí)P521.填空題2.選擇題方法二:#include<stdio.h>voidmain(){floatx,y,k;printf("inputx:\n");scanf("%f",&x);
k=1*(x<0)+2*(x>=0&&x<=10)+3*(x>10);switch(k){case1:y=0;break;case2:y=x*x;break;case3:y=2*x+3;break;}}
5.if語句的嵌套在一個if語句中可以包含另外一個或多個if語句的形式稱為if語句的嵌套。
if語句嵌套的一般形式為:
if(表達(dá)式1)
if(表達(dá)式2)
語句1; else
語句2;
else
if(表達(dá)式3)
語句3; else
語句4;
其執(zhí)行過程是:如果表達(dá)式1的值為非0(即為“真”),則執(zhí)行第一個if-else語句,如果表達(dá)式1的值為假,則執(zhí)行第二個if-else語句。然后跳到整個if語句之外繼續(xù)執(zhí)行程序。if語句嵌套的執(zhí)行流程如圖3-7表示。關(guān)于if語句嵌套的幾點說明:(1)在嵌套內(nèi)的if語句可以是單分支選擇if語句也可以是雙分支if-else語句,else總是與位于它之前、離它最近的一個未配對的if配對。(2)為避免錯誤,可用大括號“{}”將內(nèi)嵌的if-else語句括起來,以此來確定if與else的配對關(guān)系屬于內(nèi)嵌范圍。
圖3-7if語句的嵌套任務(wù)3.2用switch語句實現(xiàn)的多分支結(jié)構(gòu)任務(wù)說明用if語句可以實現(xiàn)多分支的選擇結(jié)構(gòu),但程序冗長,可讀性差。switch語句專門用于處理多分支選擇,使程序結(jié)構(gòu)簡潔、清晰。在本任務(wù)中,將學(xué)習(xí)switch語句的基本結(jié)構(gòu)及使用方法。
任務(wù)實施1.任務(wù)功能編寫簡易計算器程序,完成任意兩個數(shù)的“+”、“-”、“*”、“/”運算。2.編程思路可根據(jù)輸入的運算符由switch語句來完成相應(yīng)的算術(shù)運算。用戶先輸入兩個運算量x和y,再輸入算術(shù)運算符。當(dāng)用戶輸入的運算符不是“+”、“-”、“*”或“/”時,給出提示后退出程序。程序的執(zhí)行流程如圖3-8所示。
圖3-8兩個數(shù)進(jìn)行算術(shù)運算的流程圖
3.源程序Ex3-2.c#include<stdio.h>/*包含頭文件*/#include<stdlib.h>/*函數(shù)exit()包含于頭文件stdlib.h*/voidmain(){floatx,y,z;/*定義三個實型變量*/charopt;/*定義一個字符型變量*/printf("請輸入兩個運算量:");scanf("%f,%f",&x,&y);/*從鍵盤上輸入x、y的值*/getchar();//用來抵消回車符,以便opt能正確取值printf("請輸入運算符+、-、*或/:");opt=getchar();/*從鍵盤上輸入一個運算符*/switch(opt){case'+':z=x+y;break;case'-':z=x-y;break;case'*':z=x*y;break;
case'/':z=x/y;break;default:printf("%c不是運算符。\n",opt);exit(0);
//函數(shù)exit(0)用于退出程序
}printf("%.2f%c%.2f=%.2f\n",x,opt,y,z);}4.運行、調(diào)試在VC++6.0開發(fā)環(huán)境下,編輯、編譯和調(diào)試源程序Ex3-2.c。程序運行的結(jié)果為:請輸入兩個運算量:15.3,6<回車>請輸入運算符“+”、“-”、“*”或“/”:<回車>15.30*6.00=91.80任務(wù)拓展將源程序Ex3-1.c中用if語句求分段函數(shù)的值改為用switch語句實現(xiàn)。提示:定義一個整型變量k,用表達(dá)式k=1*(x<=0)+2*(x>0&&x<=10)+3*(x>10)將x的三個值域?qū)?yīng)的轉(zhuǎn)換為三個整數(shù),即1、2、3。相關(guān)知識實例一:模擬自動飲料機。按屏幕所示功能,輸入所選擇的合法數(shù)字,輸出可獲得的相應(yīng)飲料名稱。程序如下:#include"stdio.h"voidmain(){
intbutton;printf("=======自動飲料機========\n");printf("1.可口可樂\n");printf("2.雪碧\n");printf("3.芬達(dá)\n");printf("4.百事可樂\n");printf("5.非??蓸穃n");
printf("請按1--5鍵選擇飲料:\n");scanf("%d",&button);
switch(button){
case1:printf("你獲得一聽可口可樂\n");break;case2:printf("你獲得一聽雪碧\n");break;case3:printf("你獲得一芬達(dá)\n");break;case4:printf("你獲得一聽百事可樂\n");break;case5:printf("你獲得一聽非常可樂\n");break;default:printf("非法操作!\n");break;}}運行結(jié)果:=============自動飲料機==============1.可口可樂2.雪碧3.芬達(dá)4.百事可樂5.非常可樂請按1-5按鈕選擇飲料:3<CR>你獲得一聽芬達(dá)程序執(zhí)行流程如圖3-9所示。圖3-9程序執(zhí)行流程圖課堂練習(xí):輸入某學(xué)生的成績,輸出相應(yīng)的信息。成績在90-100之間,輸出“Verygood!”,成績在70-89之間,輸出“Good!”,成績在60-69之間,輸出“Pass!”,60分以下輸出“Nopass!”。(switch語句實現(xiàn))解題思路:流程圖如圖3-10所示。圖3-10程序執(zhí)行流程圖
程序代碼:#include<stdio.h>voidmain(){intscore,mark;printf("請輸入考試分?jǐn)?shù):\n");scanf("%d",&score);mark=score/10;switch(mark){ case10:printf("Verygood!\n");break; case9:printf("Verygood!\n");break;case8:printf("Good!\n");break; case7:printf("Good!\n");break;case6:printf("Pass!\n");break;default:printf("Nopass!\n");}}
switch語句的一般形式為:
switch(表達(dá)式){
case常量表達(dá)式1:語句1;break;case常量表達(dá)式2:語句2;break;……
case常量表達(dá)式n:語句n;break;default:語句n+1;}break語句的功能是終止switch語句的執(zhí)行。
switch語句的執(zhí)行過程:首先計算switch后面表達(dá)式的值,然后逐個與case后常量表達(dá)式的值相比較,當(dāng)找到值相等的某個常量表達(dá)式時,則執(zhí)行其后的語句。如果沒有break語句,程序?qū)⒗^續(xù)執(zhí)行后面case后的語句。如果有break語句,則程序不再執(zhí)行后面case后的語句,而是立即跳出switch語句,去執(zhí)行switch后面的語句。如表達(dá)式的值與所有case后常量表達(dá)式的值均不相等,則執(zhí)行default后的語句。switch語句的執(zhí)行過程如圖3-11表示。圖3-11switch語句的執(zhí)行流程(包含break語句)關(guān)于switch語句的幾點說明:(1)switch后面表達(dá)式的值的類型只能是整型或字符型。(2)常量表達(dá)式通常是整型常量或字符型常量。(3)case與常量表達(dá)式之間必須用空格分開。(4)當(dāng)某個case后面包含多條語句時,可以不用大括號“{}”括起來,系統(tǒng)會自動識別并順序執(zhí)行該case后的所有語句。
【例3-3】對學(xué)生的考試成績score(百分制)進(jìn)行等級評定:score≥90分為優(yōu)秀,70≤score<90分為良好,60≤score<70分為及格,score<60分為不及格。(用switch語句實現(xiàn))#include<stdio.h>
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年特殊崗位人員返聘勞動合同2篇
- 政府購買服務(wù)崗位人員勞務(wù)合同(2篇)
- 打機井協(xié)議書(2篇)
- 2024年文藝晚會演出委托制作與執(zhí)行協(xié)議3篇
- 2025年重慶模擬考貨運從業(yè)資格
- 2025年南寧貨運從業(yè)資格證考試題及答案解析
- 2025年阿壩貨運從業(yè)資格證怎么考
- 七年級下冊語文第2課 說和做
- 2024年樓宇自動化監(jiān)控設(shè)備供應(yīng)合同
- 《春季食療養(yǎng)生》課件
- 2023《科學(xué)家精神進(jìn)校園》團課學(xué)習(xí)PPT
- 2023屆高考英語復(fù)習(xí)完形填空講評課課件
- 社群營銷與運營PPT完整全套教學(xué)課件
- 關(guān)于成立物業(yè)管理公司的方案及架構(gòu)
- 甘肅銀行2023年招聘250名工作人員歷年試題(??键c甄選)含答案帶詳解-1
- 電子汽車衡-課件
- 修理廠突發(fā)事件應(yīng)急預(yù)案范文
- 輸電線路常用禁止標(biāo)識及設(shè)置規(guī)范
- 工程數(shù)學(xué)第5次作業(yè)(工程數(shù)學(xué)(本)形成性考核作業(yè)5)-國開輔導(dǎo)資料
- 《大數(shù)據(jù)財務(wù)分析-基于Python》課后習(xí)題答案
- 個人資料表(美國-DS-160新表格)
評論
0/150
提交評論