版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
信息工程學院電子信息技術專業項目3選擇結構程序設計條件結構就像一個岔路口,可以向左走,也可以向右走。比如上洗手間,我們知道我們的性別,這時候我們需要根據洗手間提供的條件,左邊男洗手間,右邊女洗手間,或者正好相反,其中性別就是這個條件結構的條件。再比如,現在的分數都流行使用A、B、C來分級,假設考試成績是93分,可以將其設置為等級A,考試成績是87,可以將其設置為等級B,這里分數區間即為條件結構中的條件。任務3.1用if語句實現的選擇結構
任務說明與順序結構一樣,選擇結構(或分支結構)也是程序設計的基本結構之一。所謂選擇結構,就是根據不同的條件作出判斷,進而選擇執行不同的操作。用if語句可以構成選擇結構。在本任務中,將學習if語句的使用方法。任務實施1.任務功能編寫程序,求下面分段函數的值,要求x的值從鍵盤輸入。圖3-1求解函數流程圖2.編程思路
首先,判斷x的值是否小于等于0,當x的值小于等于0時,根據表達式y=0計算函數的值。否則,再判斷x的值是否大于10,當x的值大于10時,根據表達式y=2x+3計算函數的值。否則,根據表達式計算函數的值。求分段函數值的流程如圖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.運行、調試在VC++6.0開發環境下,編輯、編譯和調試源程序Ex3-1.c。程序運行的結果為:請輸入x的值:5<回車>y=2.24任務拓展將源程序Ex3-1.c中用if嵌套語句求分段函數的值改為用if-else-if語句(即多分支選擇結構)來實現,并比較二者有什么不同。相關知識一、關系運算符與關系表達式(1)關系運算符。關系運算符用于判斷兩邊操作數的大小關系。C語言中提供了6種關系運算符,如表3-1所示。其中,前4種關系運算符的優先級相同,后2種關系運算符的優先級相同,且前4種關系運算符的優先級又高于后2種。關系運算符的優先級低于算術運算符,但又高于賦值運算符。關系運算符都是雙目運算符,其結合性均為左結合。表3-1關系運算符注意,在C語言中“==”和“=”是兩種完全不同的運算符,前者為關系運算符中的相等運算符,后者為賦值運算符。運算符說明運算符說明>大于<=小于或等于<小于==等于>=大于或等于!=不等于(2)關系表達式。用關系運算符把兩個C語言表達式連接起來的式子稱為關系表達式。a<b、a+b>c-d、(a=3)<=(b=5)、'a'>='b'、(a>b)==(b>c)都是合法的關系表達式。若關系表達式成立,則結果為“真”,用整數“1”表示;若關系表達式不成立,則結果為“假”用整數“0”表示。例如:a=5,b=4,c=1。則:①關系表達式“a>b”成立,其值為“真”,即表達式的值為1。②關系表達式“(a>b)==c”成立,其值為“真”,即表達式的值為1。因為“a>b”成立,其值為1,等于c的值。③關系表達式“b+c<a”不成立,其值為“假”,即表達式的值為0。二、邏輯運算符與邏輯表達式(1)邏輯運算符。C語言中提供了3種邏輯運算符,如表3-2所示。表3-2邏輯運算符運算符說明&&邏輯與||邏輯或!邏輯非邏輯運算符的運算規則如下:①邏輯與“&&”。當且僅當兩個運算對象都為“真”時,運算結果為“真”,否則為“假”。②邏輯或“||”。當且僅當兩個運算對象都為“假”時,運算結果為“假”,否則為“真”。③邏輯非“!”。當運算對象為“真”時,運算結果為“假”;當運算對象為“假”時,運算結果為“真”。注意,參與邏輯運算的對象,非0即認為“真”,0認為“假”。而運算結果為“真”時,用整數1表示,運算結果為“假”時,用整數0表示。
邏輯運算符的優先級如下:①三者相比較。邏輯非的優先級最高,邏輯與次之,邏輯或最低。!(非)→&&(與)→||(或)。②與其它種類運算符的優先級比較。!→算術運算符→關系運算符→&&→||→賦值運算符→逗號運算符根據運算符的優先級可知,表達式“a>b&&c>d”等價于“(a>b)&&(c>d)”,“a+b>c&&x+y<b
”等價于“((a+b)>c)&&((x+y)<b)”。(2)邏輯表達式。用邏輯運算符將一個或多個表達式連接起來的式子稱為邏輯表達式。例如,a=7,b=9,則邏輯表達式“a&&b”的值為1。因為運算對象a和b均為非0的數,即都為“真”,“a&&b”運算的結果為“真”,即為1。三、條件運算符與條件表達式“?:”為條件運算符,它要求有3個操作對象,故稱為三目運算符。它是C語言中唯一的一個三目運算符。由條件運算符連接的表達式稱為條件表達式。其一般形式為:表達式1?表達式2:表達式3條件運算符的執行順序是,先求解表達式1的值,若為非0(即為“真”)則求解表達式2,表達式2的值就作為整個條件表達式的值。若表達式1的值為0(即為“假”),則求解表達式3,表達式3的值就是整個條件表達式的值。如a=2、b=3、max=(a>b)?a:b,則max的值為3。其執行過程是,先求解表達式“a>b”,由于“a>b”的值為0,故max的值等于b的值3。ABab條件pYN當p為“真”當p為“假”
四、if語句的三種形式
選擇結構程序又稱分支結構程序。程序一般是順序執行的,即按書寫順序一條語句一條語句地執行,但是選擇結構可以改變程序的執行順序。選擇結構還可能造成某些語句不被執行,選擇結構也使計算機具備了邏輯判斷能力。
選擇結構是根據條
件有選擇地執行程序
代碼,如圖3-2所示。圖3-2選擇結構程序執行示意圖如果(用戶輸入的密碼是:123)
輸出:密碼正確!否則
輸出:密碼錯誤!if(判斷式){判斷式成立時所執行的語句}else{判斷式不成立時所執行的語句}程序代碼:#include<stdio.h>main(){inta;printf(“請輸入密碼:”);
scanf(“%d”,&a);/*用戶輸入密碼*/
if(a==123)/*密碼判斷*/{printf(“密碼正確!\n”);
}else{printf(“密碼錯誤!\n”);
}}實例一:根據上網用戶輸入的年齡,決定彈出信息,如年齡小于18,則彈出“你太小了,還不能到網吧上網哦!”,否則彈出“祝你玩得愉快!”程序代碼:#include<stdio.h>voidmain(){inta;printf("請輸入你的年齡:");scanf(“%d”,&a);
if(a>=18){printf(“祝你玩得愉快!\n”);
}
else{printf(“你太小了,還不能到網吧上網哦!\n”);
}}實例二:
if語句有3種形式:if單分支選擇結構,if…else…雙分支選擇結構,if…elseif多分支選擇結構。
1.單分支選擇結構。單分支選擇結構的一般形式為:
if(表達式)語句;
表達式后面的語句可以是一條語句,也可以是復合語句。程序執行的流程是:先計算表達式的值,若值為非0(即為“真”),則執行語句,否則就跳過語句。執行流程如圖3-3所示。例如,如果學生的成績grade大于等于60,在屏幕上顯示“恭喜你,通過了!”。該操作用if語句描述為:
if(grade>=60)printf("恭喜你,通過了!");圖3-3單分支選擇結構流程圖2.雙分支選擇結構。雙分支選擇結構的一般形式為:
if(表達式)
語句1;else
語句2;
語句1和語句2可以是一條語句,也可以是復合語句。程序執行的流程是:先計算表達式的值,若值為非0(即為“真”),則執行語句1,否則執行語句2。執行流程如圖3-4所示。圖3-4雙分支選擇結構流程圖【例3-1】輸入兩個整數,求其中較大的整數。#include<stdio.h>/*包含頭文件*/voidmain(){inta,b,max;/*定義三個整型變量*/
printf("請輸入兩個整數:");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的值*/
}程序運行的結果為:請輸入兩個整數:5,9<回車>max=93.多分支選擇結構。多分支選擇結構的一般形式為:if(表達式1)
語句1;elseif(表達式2)
語句2;elseif(表達式3)
語句3;
……elseif(表達式n-1)
語句n-1;else
語句n;
語句1、語句2、……、語句n可以是一條語句,也可以是復合語句。
程序執行的流程是,若表達式1的值為非0(即為“真”),則執行語句1。否則,去判定elseif后面的表達式2,如果其值為非0,則執行語句2。否則,去判定下一個elseif后面的條件3,如果值為非0,則執行語句3。以此類推。如果條件1、條件2、條件3、……、條件n?1都為0,那么執行else后面的語句n。執行流程如圖3-5所示。
圖3-5多分支選擇結構流程圖23【例3-2】根據輸入的學生的成績打印出對應的等級。#include<stdio.h>/*包含頭文件*/voidmain(){floatscore;/*定義一個實型變量*/
printf("請輸入考試分數:");scanf("%f",&score);/*從鍵盤輸入score的值*/if(score>=90)/*如果score≥90*/
printf("優秀\n");elseif(score>=80)/*否則如果90>score≥80*/printf("良好\n");elseif(score>=60)/*否則如果80>score≥60*/printf("及格\n");else/*否則score<60*/printf("不及格\n");}程序運行的結果為:請輸入考試分數:85.5<回車>良好課堂練習:設計一個程序計算以下函數的結果。
0(x<0)y=x2(0≤x<10)2x+3(x≥10)2.編程思路分析
分段函數的求解,當輸入一個x的值后,先判斷它落在什么區間,然后再決定采用哪一個函數進行計算。設計流程如圖3-6所示。可用以下兩種方法實現。圖3-6函數計算流程圖方法一:#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);}作業P533.編程題(1)思考與練習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(表達式1)
if(表達式2)
語句1; else
語句2;
else
if(表達式3)
語句3; else
語句4;
其執行過程是:如果表達式1的值為非0(即為“真”),則執行第一個if-else語句,如果表達式1的值為假,則執行第二個if-else語句。然后跳到整個if語句之外繼續執行程序。if語句嵌套的執行流程如圖3-7表示。關于if語句嵌套的幾點說明:(1)在嵌套內的if語句可以是單分支選擇if語句也可以是雙分支if-else語句,else總是與位于它之前、離它最近的一個未配對的if配對。(2)為避免錯誤,可用大括號“{}”將內嵌的if-else語句括起來,以此來確定if與else的配對關系屬于內嵌范圍。
圖3-7if語句的嵌套任務3.2用switch語句實現的多分支結構任務說明用if語句可以實現多分支的選擇結構,但程序冗長,可讀性差。switch語句專門用于處理多分支選擇,使程序結構簡潔、清晰。在本任務中,將學習switch語句的基本結構及使用方法。
任務實施1.任務功能編寫簡易計算器程序,完成任意兩個數的“+”、“-”、“*”、“/”運算。2.編程思路可根據輸入的運算符由switch語句來完成相應的算術運算。用戶先輸入兩個運算量x和y,再輸入算術運算符。當用戶輸入的運算符不是“+”、“-”、“*”或“/”時,給出提示后退出程序。程序的執行流程如圖3-8所示。
圖3-8兩個數進行算術運算的流程圖
3.源程序Ex3-2.c#include<stdio.h>/*包含頭文件*/#include<stdlib.h>/*函數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);
//函數exit(0)用于退出程序
}printf("%.2f%c%.2f=%.2f\n",x,opt,y,z);}4.運行、調試在VC++6.0開發環境下,編輯、編譯和調試源程序Ex3-2.c。程序運行的結果為:請輸入兩個運算量:15.3,6<回車>請輸入運算符“+”、“-”、“*”或“/”:<回車>15.30*6.00=91.80任務拓展將源程序Ex3-1.c中用if語句求分段函數的值改為用switch語句實現。提示:定義一個整型變量k,用表達式k=1*(x<=0)+2*(x>0&&x<=10)+3*(x>10)將x的三個值域對應的轉換為三個整數,即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");break;case2:printf("你獲得一聽雪碧\n");break;case3:printf("你獲得一芬達\n");break;case4:printf("你獲得一聽百事可樂\n");break;case5:printf("你獲得一聽非常可樂\n");break;default:printf("非法操作!\n");break;}}運行結果:=============自動飲料機==============1.可口可樂2.雪碧3.芬達4.百事可樂5.非常可樂請按1-5按鈕選擇飲料:3<CR>你獲得一聽芬達程序執行流程如圖3-9所示。圖3-9程序執行流程圖課堂練習:輸入某學生的成績,輸出相應的信息。成績在90-100之間,輸出“Verygood!”,成績在70-89之間,輸出“Good!”,成績在60-69之間,輸出“Pass!”,60分以下輸出“Nopass!”。(switch語句實現)解題思路:流程圖如圖3-10所示。圖3-10程序執行流程圖
程序代碼:#include<stdio.h>voidmain(){intscore,mark;printf("請輸入考試分數:\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(表達式){
case常量表達式1:語句1;break;case常量表達式2:語句2;break;……
case常量表達式n:語句n;break;default:語句n+1;}break語句的功能是終止switch語句的執行。
switch語句的執行過程:首先計算switch后面表達式的值,然后逐個與case后常量表達式的值相比較,當找到值相等的某個常量表達式時,則執行其后的語句。如果沒有break語句,程序將繼續執行后面case后的語句。如果有break語句,則程序不再執行后面case后的語句,而是立即跳出switch語句,去執行switch后面的語句。如表達式的值與所有case后常量表達式的值均不相等,則執行default后的語句。switch語句的執行過程如圖3-11表示。圖3-11switch語句的執行流程(包含break語句)關于switch語句的幾點說明:(1)switch后面表達式的值的類型只能是整型或字符型。(2)常量表達式通常是整型常量或字符型常量。(3)case與常量表達式之間必須用空格分開。(4)當某個case后面包含多條語句時,可以不用大括號“{}”括起來,系統會自動識別并順序執行該case后的所有語句。
【例3-3】對學生的考試成績score(百分制)進行等級評定:score≥90分為優秀,70≤score<90分為良好,60≤score<70分為及格,score<60分為不及格。(用switch語句實現)#include<stdio.h>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026肉類加工行業市場供需分析及產業投資評估規劃研究報告
- 2026Fast芯片組行業政策支持與補貼機制分析報告
- 2026中國新能源電池制造行業發展趨勢研究及投資潛力分析報告
- 2026人工智能電腦行業市場深度調研及智能技術與應用創新發展趨勢研究報告
- 2026中國功能性零食消費場景細分與渠道下沉策略
- 2026中國先進焊接合金材料技術趨勢及產業投資前景報告
- 2026中國葉黃素酯行業品牌競爭與營銷策略研究
- 2026人工智能技術應用領域深度研究及行業發展前景預測報告
- 紫石英歷史知識問答題目及答案
- 2026中國物流行業數字化轉型與創新發展策略研究報告
- 2026寧波高新區機關各部門、事業單位及街道編外招聘30人考試備考題庫及答案詳解
- 《電化學儲能電站建設項目文件收集與檔案管理規范》
- 民政局預算管理制度
- 八年級物理上冊(人教版2024)-新教材解讀培訓課件
- 文化課堂合作協議書
- 合伙企業股權結構協議書
- 中小學課堂教學電子產品使用與管理策略及實施方案
- 水利工程施工監理規范(SL288-2014)用表填表說明及示例
- GB/T 17469-2024汽車制動器襯片摩擦性能評價小樣臺架試驗方法
- 供應商來料質量報告(年度與月度)
- 消防作戰訓練安全總結
評論
0/150
提交評論