版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第四章
選擇結(jié)構(gòu)程序設(shè)計(jì)內(nèi)容提要:一,關(guān)系表達(dá)式與邏輯表達(dá)式二,選擇結(jié)構(gòu)控制語句(if語句,switch語句)數(shù)據(jù)結(jié)構(gòu)+算法=程序描述數(shù)據(jù)地類型,組織形式描述對(duì)數(shù)據(jù)地操作步驟一,算法:計(jì)算機(jī)求解某一問題而采用地具體方法,步驟二,兩大類計(jì)算機(jī)算法:數(shù)值運(yùn)算算法,非數(shù)值運(yùn)算算法(求數(shù)值解,成熟)(事務(wù)管理,廣泛)三,算法地特:有窮,確定,輸入,輸出等四,算法描述:描述算法地方法有多種歸納為二大類:①文字②圖形(符號(hào))四.一算法地概念四.二算法地描述方法常用地算法描述方法:(一)帶序號(hào)地自然語言描述易懂卻不直觀,不嚴(yán)格(二)流程圖:靈活,自由,形象,直觀,可表示任何算法輸入/輸出處理判斷起止連接點(diǎn)流程線(三)N-S圖(盒圖):完全去掉了帶箭頭地流程線,算法地所有處理步驟都寫在一個(gè)大矩形框(表示簡單,符合結(jié)構(gòu)化思想)(四)偽代碼:用介于自然語言與計(jì)算機(jī)語言之間地文字及符號(hào)來描述算法(方便,易懂,便于向計(jì)算機(jī)語言過渡)例一:計(jì)算S=,寫出其算法。自然語言描述:流程圖描述:N-S圖描述:偽代碼描述:引例:計(jì)算函數(shù)值:需考慮:一)輸入x二)判斷x地值三)根據(jù)x地值計(jì)算y地值四)輸出y地值顯然二)三)順序結(jié)構(gòu)程序不能實(shí)現(xiàn),須引入選擇結(jié)構(gòu)程序。#include<stdio.h>#include<math.h>voidmain(){floatx,y;printf("Enterx:");scanf("%f",&x);if(x!=零.零)y=sin(x)/x;elsey=一;printf("\nx=%五.二f\ty=%七.四f\n",x,y);}Enterx:二x=二.零零y=零.四五四六四.一條件判斷---關(guān)系表達(dá)式關(guān)系運(yùn)算:是對(duì)兩個(gè)量行"比較運(yùn)算"關(guān)系運(yùn)算符:<,<=,>,>=,==,!=優(yōu)先級(jí)別算術(shù)運(yùn)算符,關(guān)系運(yùn)算符,賦值運(yùn)算符高低如:c>a+bc>(a+b)a==b<ca==(b<c)a=b<ca=(b<c)注意:"="與"=="不同高低關(guān)系表達(dá)式:用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式(算術(shù),字符表達(dá)式)連接起來地有意義地式子。如:x!=零‘a(chǎn)’==‘A’a*a+b*b<Y*Y注意:數(shù)值量比較---數(shù)字地大小字符量比較---ASCII地大小關(guān)系表達(dá)式地值:真(一)假(零)c>a+bc>(a+b)a==b<ca==(b<c)a=b<ca=(b<c)問:a=一,b=-五,c=‘a(chǎn)’時(shí)上面表達(dá)式地值結(jié)合規(guī)則:左結(jié)合四.一條件判斷---邏輯表達(dá)式邏輯運(yùn)算符:&&(與),||(或),!(非)優(yōu)先級(jí)別:!&&||高低!(非)算術(shù)運(yùn)算符關(guān)系運(yùn)算符&&||賦值運(yùn)算符高
低例:a>b&&b>c(a>b)&&(b>c)a!=b&&c!=零(a!=b)&&(c!=零)!a||a>b(!a)||(a>b)五>三&&二||!八<四-二((五>三)&&二)||((!八)<(四-二))邏輯量:當(dāng)一個(gè)量(可以是基本類型地常量或變量)用作判斷時(shí),C編譯系統(tǒng)認(rèn)為:非零-----真,零-----假邏輯表達(dá)式:用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來地有意義地式子(單個(gè)邏輯量,關(guān)系表達(dá)式是邏輯表達(dá)式地特例)邏輯表達(dá)式地值:真(一),假(零)如:若a=四則!aa&&-五四||零零一一例一:a=三,b=二,c=一a>b&&b>c (a>b)&&(b>c)a!=b&&c!=零 (a!=b)&&(c!=零)!a||a>b (!a)||(a>b)五>三&&二||!八<四-二例二:判斷某年year是否閏年?(閏年:能被四整除,但不能被一零零整除;或能被四零零整除)year%四==零&&year%一零零!=零||year%四零零==零練:寫出C語言地表達(dá)式(一)|x|>二(二)x≤一+a并y≤b(三)地定義域abs(x)>二或x>二||x<-二x<=一+a&&y<=b(x>=二||x<=一)&&x!=零或(x-一)*(x-二)>=零&&x!=零寫出表達(dá)式地值:(a=二,b=零,c=-二.五)a*b||c!b&&c零||a一&&!a/c一一一零說明(一)運(yùn)算對(duì)象地?cái)?shù)據(jù)類型:除整型外,也可以是實(shí)型,字符型等其它類型數(shù)據(jù)。(二)子表達(dá)式計(jì)算:只有在需要計(jì)算下一個(gè)子表達(dá)式才能求解時(shí),才計(jì)算;否則,不再計(jì)算。①對(duì)于邏輯與運(yùn)算,如果第一個(gè)對(duì)象被判定為"邏輯假",系統(tǒng)不再計(jì)算第二個(gè)對(duì)象(因?yàn)闊o論真假,都不影響整個(gè)表達(dá)式地結(jié)果)。②對(duì)于邏輯或運(yùn)算,如果第一個(gè)對(duì)象被判定為"邏輯真",系統(tǒng)不再計(jì)算第二個(gè)對(duì)象。思考:假設(shè)n一=一,n二=二,n三=三,n四=四,x=一,y=一,求解表達(dá)式(x=n一>n二)&&(y=n三>n四)后,x,y地值?答案:x=零,y=一四.二if語句一,if語句地三種形式一)條件執(zhí)行if(e)A-----A可為簡單或復(fù)合語句如:if(a>零)printf("aispositive.\n");if(x>y){t=y;y=x;x=t;}二)分支選擇if(e)AelseB當(dāng)e為真值(非零)時(shí)執(zhí)行A,否則執(zhí)行B或后續(xù)語句。if(a>零)printf("Aispositive.\n");elseprintf("Aisnotpositive.\n");A或B都可以是單一語句,也可以是復(fù)合語句;else部分不能獨(dú)立存在,即else前一定有一個(gè)";",它必定是if語句地一部分。注意:在C語言,表達(dá)式e地值為非零時(shí),系統(tǒng)均按"真值"處理。如:if(‘a(chǎn)’)printf("O.K.");x=-五;if(x)printf("O.K.");y=零;if(y==零)printf("O.K.");y=零;if(y)printf("O.K.");讀程序,寫出它所完成地功能。#include<stdio.h>voidmain(){floatx,y;printf("Enterx:");scanf("%f",&x);if(x==零)y=一;elsey=(x*五+一)/x;printf("\nx=%四.一f\ty=%四.一f\n",x,y);}y=一;if(x!=零)y=(x*五+一)/x;問:若將y=一與if語句調(diào)換位置,程序結(jié)果會(huì)相同嗎?例:任給a,b,c三個(gè)數(shù),按從大到小地順序輸出。分析:一)對(duì)于任意兩個(gè)數(shù)a,b:若a>b,則輸出a,b;否則輸出b,a。二)對(duì)于三個(gè)數(shù),有六種可能:a>b>ca>c>bb>a>cb>c>ac>a>bc>b>a三)使用判斷---換法若a<b,則換a與b若a<c,則換a與c,結(jié)果a最大若b<c,則換b與c,結(jié)果a>b>cabc五六七若a<b,則換a與babc六五七若a<c,則換a與c,結(jié)果a最大abc七五六若b<c,則換b與c,結(jié)果a>b>cabc七六五#include<stdio.h>voidmain(){inta,b,c,t;printf("inputa,b,c:");scanf("%d,%d,%d",&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("%d,%d,%d",a,b,c);}三)elseif形式if(P一)S一elseif(P二)S二…..elseif(Pn-一)Sn-一elseSn系統(tǒng)從上到下地逐個(gè)判斷條件P,一旦發(fā)現(xiàn)某條件Pi滿足時(shí),則執(zhí)行與它有關(guān)地語句Si,并跳過其它剩余地階梯。若所有條件均不滿足,執(zhí)行最后一個(gè)else語句或后續(xù)語句。下一語句P一S一真假P二S二真假Pn-一Sn-一真假Sn…………注意:else與最近地if相匹配。例根據(jù)成績打印出等級(jí)。(零-五九:E六零-六九:D七零-七九:C八零-八九:B九零-一零零:A)算法分析:設(shè)成績?yōu)閟core,假設(shè)取值在零-一零零之間,沒有錯(cuò)誤地輸入。六零>score≥零E七零>score≥六零D八零>score≥七零C九零>score≥八零B一零零≥score≥九零A#include"stdio.h"voidmain(){intscore;printf("score=");scanf("%d",&score);if(score>=零&&score<六零)printf("gradeisE");if(score>=六零&&score<七零)printf("gradeisD");if(score>=七零&&score<八零)printf("gradeisC");if(score>=八零&&score<九零)printf("gradeisB");if(score>=九零)printf("gradeisA");}#include"stdio.h"voidmain(){intscore;printf("score=");scanf("%d",&score);if(score>=零&&score<六零)printf("gradeisE");elseif(score<=六九)printf("gradeisD");elseif(score<=七九)printf("gradeisC");elseif(score<=八九)printf("gradeisB");elseprintf("gradeisA");}注意條件地表示形式與順序一#include"stdio.h"二voidmain()三{/*E:零-五九D:六零-六九C:七零-七九B:八零-八九A:九零-一零零*/四intscore;五printf("score=");六scanf("%d",&score);七if(score>=九零&&score<=一零零)八printf("gradeisA");九elseif(score>=八零)一零printf("gradeisB");一一elseif(score>=七零)一二printf("gradeisC");一三elseif(score>=六零)一四printf("gradeisD");一五e(cuò)lse一六printf("gradeisE");}四.二if語句二,if語句地嵌套if(P一)if(P二)AelseBelseif(P三)CelseD#include<stdio.h>#include<math.h>voidmain(){floatx,y;printf("inputx:");scanf("%f",&x);if(x<-三.零)y=x-一.零;elseif(x>=-三.零&&x<=三.零)y=sqrt(九.零-x*x);elsey=log一零(x);printf("x=%零.一f\ty=%零.一f\n",x,y);}例:計(jì)算函數(shù)if(x<=三.零)……if(x<-三.零)y=x-一.零;if(x>=-三.零&&x<=三.零)y=sqrt(九.零-x*x);if(x>三)y=log一零(x);……例:計(jì)算函數(shù)二,if語句地嵌套比較:if(x)if(y)printf("一");elseprintf("二");if(x){if(y)printf("一");}elseprintf("二");由此看出:通過加"{}"可改變else地層位,從而改變程序地執(zhí)行流程。二,if語句地嵌套if(x)if(y)printf("一");elseprintf("二");練一假定所有變量均已正確說明,下列程序段運(yùn)行后x地值是。 a=b=c=零; x=三五; if(!a)x=-一; elseif(b); if(c)x=三; elsex=四;A)三四B)四C)三五D)三練二當(dāng)a=一,b=三,c=五,d=四時(shí),執(zhí)行完下面程序段后x地值為。 if(a<b) if(c<d)x=一; else if(a<c)if(b<d)x=二;elsex=三;elsex=六; elsex=七;A)一B)二C)三D)六例:判斷某年是否閏年。閏年:年份year能被四整除,但不能被一零零整除;或能被四零零整除if((year%四==零&&year%一零零!=零)||(year%四零零==零))leap=一;elseleap=零;四.二if語句三,條件運(yùn)算符與條件表達(dá)式一.條件運(yùn)算符:?與:/*唯一地三目運(yùn)算符*/二.條件表達(dá)式:e一?e二:e三如:a>b?a:bx==零?一:sin(x)/x三.執(zhí)行過程:一)計(jì)算e一二)e一值為非零(真),計(jì)算并返回e二地值否則計(jì)算并返回e三地值四.二if語句三,條件運(yùn)算符與條件表達(dá)式四.運(yùn)算順序:高于賦值運(yùn)算,低于算術(shù),關(guān)系,邏輯運(yùn)算如:y=x==零?一:sin(x)/x;五.條件運(yùn)算符地結(jié)合方向是"右結(jié)合"如:a>b?a:c>d?c:d等價(jià)于:a>b?a:(c>d?c:d)例:讀程序,寫出程序完成地功能。#include<stdio.h>voidmain(){inta,b,max;printf("inputdatatoaandb:");scanf("%d,%d",&a,&b);max=a>b?a:b;printf("Themaxis%d\n",max);}printf("Themaxis%d\n",max=a>b?a:b);printf("Themaxis%d\n",a>b?a:b);找出a,b兩個(gè)數(shù)地大數(shù)。例:任意輸入一個(gè)字符,若是大寫字母,將其轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換。分析:判斷一個(gè)字符ch是否為大寫字母地方法ch>=‘A’&&ch<=‘Z’ch>=六五&&ch<=九零大寫字母轉(zhuǎn)換為小寫字母地方法:ch+三二由前面地例子可以看出,對(duì)于二分支,并對(duì)同一變量賦值時(shí)用條件表達(dá)式最方便。ch=(ch>=‘A’&&ch<=‘Z’)?(ch+三二):ch;四.三開關(guān)語句開關(guān)語句又稱為多分支選擇語句,它比用嵌套地if語句實(shí)現(xiàn)多分支問題,程序結(jié)構(gòu)清晰,易讀。一,格式switch(e){casec一:語句一casec二:語句二……case:語句n[default:語句n+一]}其:表達(dá)式e可以是整型,字符型常量表達(dá)式ci需要與表達(dá)式e類型一致(整型與字符型通用)二,執(zhí)行過程一.計(jì)算表達(dá)式e地值二.若與常量表達(dá)式ci值一致,則從語句i開始執(zhí)行;直到遇到break語句或switch語句地"}"。三.若與任何常量表達(dá)式值均不一致時(shí),則執(zhí)行default語句或執(zhí)行后續(xù)語句。注意:一)常量表達(dá)式ci僅起語句標(biāo)號(hào)作用,不作求值判斷;二)常量表達(dá)式地值需要是唯一地,沒有先后次序;三)多個(gè)case語句可用一組執(zhí)行語句。如:switch(x){case一:printf("statement一");break;case二:printf("statement二");break;default:printf("default");}如果case一,case二沒有break;結(jié)果是什么?例:用switch語句評(píng)價(jià)學(xué)生地成績
score>=九零優(yōu)秀score>=八零良好score>=七零score>=六零及格score<六零不及格#include<stdio.h>voidmain(){intscore;printf("inputascore:");scanf("%d",&score);switch(score/一零){case一零:case九:printf("優(yōu)秀\n");break;case八:printf("良好\n");break;case七:printf("\n");break;case六:printf("及格\n");break;default:printf("不及格\n");}}關(guān)鍵:如何表示表達(dá)式與常量,常量地取值與表達(dá)式有關(guān)。例運(yùn)輸公司對(duì)用戶計(jì)算運(yùn)費(fèi)。路程(s)越遠(yuǎn),每公里運(yùn)費(fèi)越低。標(biāo)準(zhǔn)如下:s<二五零km沒有折扣二五零≤s<五零零2%折扣五零零≤s<一零零零5%折扣一零零零≤s<二零零零8%折扣二零零零≤s<三零零零一零%折扣三零零零≤s一五%折扣設(shè)每公里每噸貨物地基本運(yùn)費(fèi)為p,貨物重為w,距離為s,折扣為d,則總運(yùn)費(fèi)f地計(jì)算公式為:f=p*w*s*(1-d)int(s/二五零)零:d=零一:d=二二,三:d=五四~七:d=八八~一一:d=一零其它:d=一五#include<stdio.h>
voidmain()
{intc;
floatp,w,d,f,s;
scanf("%f,%f,%f",&p,&w,&s);
c=s/二五零;
switch(c){
case零:d=零;break;
case一:d=二;break;
case二:case三:d=五;break;
case四:case五:case六:case七:d=八;break;
case八:case九:case一零:
case一一:d=一零;break;
default:d=一五;}
f=p*w*s*(一-d/一零零.零);
printf("freight=%一五.四f\n",f);}上機(jī)一:編程實(shí)現(xiàn):一,鍵盤輸入一個(gè)整數(shù)a,判斷它是偶數(shù)還是奇數(shù)并輸出。二,P九五第五題#include<stdio.h>voidmain(){inta;printf("請(qǐng)輸入一個(gè)整數(shù):");scanf("%d",&a);if(a%二==零)printf("%d為偶數(shù)\n",a);elseprintf("%d為奇數(shù)\n",a);}#include<stdio.h>voidmain(){intx,y;printf("請(qǐng)輸入x:");scanf("%d",&x);if(x<一)y=x;if(x>=一&&x<一零)y=二*x-一;if(x>=一零)y=三*x-一一;printf("y=%d\n",y);}上機(jī)二:一,請(qǐng)編程:根據(jù)右圖函數(shù)關(guān)系,對(duì)輸入地每個(gè)x值,計(jì)算相應(yīng)地y值。xyx<零零零<x<=一零x一零<x<=二零一零二零<x<四零-零.五x+二零二,編程實(shí)現(xiàn):設(shè)計(jì)一個(gè)簡單地計(jì)算器,完成兩個(gè)數(shù)地加減乘除。#include<stdio.h>voidmain(){ floatx,y; printf("請(qǐng)輸入x地值:"); scanf("%f",&x); if(x<零)y=零; if(x>零&&x<=一零)y=x; if(x>一零&&x<=二零)y=一零; if(x>二零&&x<四零)y=-零.五*x+二零; printf("y=%f",y);}xyx<零零零<x<=一零x一零<x<=二零一零二零<x<四零-零.五x+二零上機(jī)二:編程實(shí)現(xiàn):一,用switch語句設(shè)計(jì)一個(gè)簡單地計(jì)算器,完成兩個(gè)數(shù)地加減乘除。二,設(shè)面上一點(diǎn)M,其坐標(biāo)為(x,y),M可能落在圓心為坐標(biāo)原點(diǎn)半徑為r地圓上,圓內(nèi)或圓外,請(qǐng)輸出該點(diǎn)地位置。#include<stdio.h>voidmain(){floatx,y,z,r=二;printf("請(qǐng)輸入點(diǎn)地坐標(biāo):");scanf("(%f,%f)",&x,&y);z=x*x+y*y;if(z<r*r)printf("點(diǎn)在圓內(nèi)\n");if(z==r*r)printf("點(diǎn)在圓上\n");if(z>r*r)printf("點(diǎn)在圓外\n");}#include<stdio.h>voidmain(){floatx,y,z;charop; printf("請(qǐng)輸入需要計(jì)算地式子,如一+二:\n"); scanf("%f%c%f",&x,&op,&y); switch(op) { case'+':z=x+y;printf("%f+%f=%f\n",x,y,z);break;case'-':z=x-y;printf("%f-%f=%f\n",x,y,z);break;case'*':z=x*y;printf("%f*%f=%f\n",x,y,z);break; case'/':if(y!=零){z=x/y;printf("%f/%f=%f\n",x,y,z);} elseprintf("妳輸入地除數(shù)為零,非法!\n"); break; default:printf("妳輸入地式子有誤!\n"); }}一.若從鍵盤上輸入五,則程序地輸出結(jié)果是。#include<stdio.h>voidmain(){intx;scanf("%d",&x);if(x++>五)printf("%d\n",x);elseprintf("%d\n",x--);}A.七 B.六 C.五 D.四二.下列程序地輸出結(jié)果是。#include"stdio.h"voidmain(){intx=一,a=零,b=零;switch(x){case零:b++;case一:a++;case二:a++;b++;}printf("a=%d,b=%d\n",a,b);}A)a=二,b=一B)a=一,b=一C)a=一,b=零D)a=二,b=二三.若從
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GA/T 1280-2024銀行自助設(shè)備安全性規(guī)范
- 工作總結(jié)之互聯(lián)網(wǎng)銷售實(shí)習(xí)總結(jié)
- 2024年煤及礦產(chǎn)品批發(fā)服務(wù)項(xiàng)目資金需求報(bào)告
- 2023年未硫化復(fù)合橡膠及其制品資金需求報(bào)告
- 銀行員工獎(jiǎng)懲管理制度
- 酒店餐飲服務(wù)質(zhì)量管理制度
- 有關(guān)投資入股協(xié)議書范本(33篇)
- 語文繼續(xù)教育培訓(xùn)總結(jié)1000字范文(30篇)
- 《銀行慶典方案》課件
- 教師培訓(xùn)課件:如何評(píng)
- 燃?xì)饧t外線輻射采暖技術(shù)交底
- 工會(huì)工作政協(xié)提案范文
- 液壓系統(tǒng)課件(完整)課件
- 調(diào)節(jié)池及反應(yīng)池施工方案與技術(shù)措施
- 氣象醫(yī)療——日干支斷病劉玉山
- 一級(jí)公路畢業(yè)設(shè)計(jì)
- 確定如何10kV架空線路檔距
- 親子鑒定書(共3頁)
- 宜家家居 客戶關(guān)系管理分析示例ppt課件
- 國際象棋啟蒙教育PPT課件
- 基坑工程專項(xiàng)施工方案
評(píng)論
0/150
提交評(píng)論