第4章-選擇結(jié)構(gòu)程序設(shè)計-2-_第1頁
第4章-選擇結(jié)構(gòu)程序設(shè)計-2-_第2頁
第4章-選擇結(jié)構(gòu)程序設(shè)計-2-_第3頁
第4章-選擇結(jié)構(gòu)程序設(shè)計-2-_第4頁
第4章-選擇結(jié)構(gòu)程序設(shè)計-2-_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第四章(2)本章要點

關(guān)系表達式邏輯表達式選擇結(jié)構(gòu)程序設(shè)計主要內(nèi)容4.1選擇結(jié)構(gòu)和條件判斷4.2用if語句實現(xiàn)選擇結(jié)構(gòu)4.3關(guān)系運算符和關(guān)系表達式4.4邏輯運算符和邏輯表達式4.5條件運算符和條件表達式4.6選擇結(jié)構(gòu)的嵌套4.7用switch語句實現(xiàn)多分支選擇結(jié)構(gòu)4.8選擇結(jié)構(gòu)程序綜合舉例4.5條件運算符和條件表達式有一種if語句,當(dāng)被判別的表達式的值為“真”或“假”時,都執(zhí)行一個賦值語句且向同一個變量賦值如:if(a>b)max=a;elsemax=b;max=(a>b)?a

:b;條件運算符有一種if語句,當(dāng)被判別的表達式的值為“真”或“假”時,都執(zhí)行一個賦值語句且向同一個變量賦值如:if(a>b)max=a;elsemax=b;max=(a>b)?a

:b;條件表達式條件表達式的一般形式為表達式1?表達式2:

表達式3條件運算符的執(zhí)行順序:求解表達式1若為非0(真)則求解表達式2,此時表達式2的值就作為整個條件表達式的值若表達式1的值為0(假),則求解表達式3,表達式3的值就是整個條件表達式的值條件運算符優(yōu)先于賦值運算符條件運算符的結(jié)合方向為“自右至左”以下為合法的使用方法:a>b?(max=a):(max=b);a>b?printf(“%d”,a):printf(“%d”,b);

例4.4輸入一個字符,判別它是否大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。解題思路:用條件表達式來處理,當(dāng)字母是大寫時,轉(zhuǎn)換成小寫字母,否則不轉(zhuǎn)換#include<stdio.h>intmain(){charch;

scanf("%c",&ch);

ch=(ch>='A'&&ch<='Z‘)?(ch+32):ch;

printf("%c\n",ch);return0;}4.6選擇結(jié)構(gòu)的嵌套在if語句中又包含一個或多個if語句稱為if語句的嵌套一般形式:if()if()語句1else語句2elseif()語句3else語句4內(nèi)嵌ifelse總是與它上面最近的未配對的if配對在if語句中又包含一個或多個if語句稱為if語句的嵌套if(){

if()語句1}

else語句2內(nèi)嵌if{}限定了內(nèi)嵌if范圍

例4.5有一函數(shù):

編一程序,輸入一個x值,要求輸出相應(yīng)的y值。解題思路:用if語句檢查x的值,根據(jù)x的值決定賦予y的值由于y的可能值不是兩個而是三個,因此不可能只用一個簡單的(無內(nèi)嵌if)的if語句來實現(xiàn)解題思路:方法1(1)先后用3個獨立的if語句處理:輸入x若x<0,則y=-1若x=0,則y=0若x>0,則y=1輸出x和yscanf("%d",&x);if(x<0)y=-1;if(x==0)y=0;if(x>0)y=1;printf("x=%d,y=%d\n",x,y);解題思路:方法2(2)用一個嵌套的if語句處理:輸入x若x<0,則y=-1否則

若x=0,則y=0

否則y=1輸出x和yscanf("%d",&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf("x=%d,y=%d\n",x,y);解題思路:方法2(2)用一個嵌套的if語句處理:輸入x若x<0,則y=-1否則

若x=0,則y=0

否則y=1輸出x和yscanf("%d",&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf("x=%d,y=%d\n",x,y);scanf("%d",&x);if(x>=0)if(x>0)y=1;elsey=0;elsey=-1;printf("x=%d,y=%d\n",x,y);提倡內(nèi)嵌if放在else中4.7用switch語句實現(xiàn)多分支選擇結(jié)構(gòu)switch語句用來實現(xiàn)多分支選擇結(jié)構(gòu)學(xué)生成績分類85分以上為’A’等70~84分為’B’等60~69分為’C’等……人口統(tǒng)計分類

按年齡分為老、中、青、少、兒童

例4.6要求按照考試成績的等級輸出百分制分?jǐn)?shù)段,A等為85分以上,B等為70~84分,C等為60~69分,D等為60分以下。成績的等級由鍵盤輸入。解題思路:判斷出這是一個多分支選擇問題根據(jù)百分制分?jǐn)?shù)將學(xué)生成績分為4個等級如果用if語句,至少要用3層嵌套的if,進行3次檢查判斷用switch語句進行一次檢查即可得到結(jié)果#include<stdio.h>intmain(){chargrade;

scanf("%c",&grade);

printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}值為A#include<stdio.h>intmain(){chargrade;

scanf("%c",&grade);

printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}不能少#include<stdio.h>intmain(){chargrade;

scanf("%c",&grade);

printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}值為C#include<stdio.h>intmain(){chargrade;

scanf("%c",&grade);

printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}值為Fswitch語句的作用是根據(jù)表達式的值,使流程跳轉(zhuǎn)到不同的語句switch語句的一般形式:switch(表達式){case常量1:語句1case常量2:語句2

┇case常量n:語句ndefault:語句n+1}整數(shù)類型(包括字符型)switch(表達式){case常量1:語句1case常量2:語句2

┇case常量n:語句ndefault:語句n+1}不能相同scanf("%c",&grade);

printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}scanf("%c",&grade);

printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}scanf("%c",&grade);

printf("Yourscore:");switch(grade){case'A‘:case'B‘:case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}

例4.7編寫程序,用switch語句處理菜單命令。解題思路:在許多應(yīng)用程序中,用菜單對流程進行控制,例如從鍵盤輸入一個’A’或’a’字符,就會執(zhí)行A操作,輸入一個’B’或’b’字符,就會執(zhí)行B操作,等等。#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;

ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break;

case'b':case‘B’:action2(a,b);break;

default:putchar(‘\a’);}return0;}輸入a或A調(diào)用action1函數(shù),執(zhí)行A操作voidaction1(intx,inty){

printf("x+y=%d\n",x+y);}#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;

ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break;

case'b':case‘B’:action2(a,b);break;

default:putchar(‘\a’);}return0;}輸入b或B調(diào)用action2函數(shù),執(zhí)行B操作voidaction2(intx,inty){

printf("x*y=%d\n",x*y);}#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;

ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break;

case'b':case‘B’:action2(a,b);break;

default:putchar(‘\a’);}return0;}輸入其他字符發(fā)出警告這是一個非常簡單的示意程序?qū)嶋H應(yīng)用中,所指定的操作可能比較復(fù)雜:A:輸入全班學(xué)生各門課的成績B:計算并輸出每個學(xué)生各門課的平均成績C:計算并輸出各門課的全班平均成績D:對全班學(xué)生的平均成績由高到低排序并輸出可以按以上思路編寫程序,把各action函數(shù)設(shè)計成不同的功能以實現(xiàn)各要求4.8選擇結(jié)構(gòu)程序綜合舉例例4.8寫一程序,判斷某一年是否閏年。解題思路:在前面已介紹過判別閏年的方法本例用不同的方法編寫程序用變量leap代表是否閏年的信息。若閏年,令leap=1;非閏年,leap=0。最后判斷l(xiāng)eap是否為1(真),若是,則輸出“閏年”信息參見教材圖4.13#include<stdio.h>intmain() {intyear,leap;

printf("enteryear:");scanf("%d",&year);if(year%4==0)if(year%100==0) if(year%400==0)leap=1;elseleap=0; elseleap=1;elseleap=0;if(leap)printf("%dis",year);elseprintf("%disnot",year);

printf("aleapyear.\n");return0;}標(biāo)志變量與if(leap!=0)含義相同#include<stdio.h>intmain() {intyear,leap;

printf("enteryear:");scanf("%d",&year);if(year%4==0)if(year%100==0) if(year%400==0)leap=1;elseleap=0; elseleap=1;elseleap=0;if(leap)printf("%dis",year);elseprintf("%disnot",year);

printf("aleapyear.\n");return0;}采取鋸齒形式#include<stdio.h>intmain() {intyear,leap;

printf("enteryear:");scanf("%d",&year);if(year%4==0)if(year%100==0) if(year%400==0)leap=1;elseleap=0; elseleap=1;elseleap=0;if(leap)printf("%dis",year);elseprintf("%disnot",year);

printf("aleapyear.\n");return0;}if(year%4!=0)leap=0;elseif(year%100!=0)leap=1;elseif(year%400!=0)leap=0;else

leap=1;#include<stdio.h>intmain() {intyear,leap;

printf("enteryear:");scanf("%d",&year);if(year%4==0)if(year%100==0) if(year%400==0)leap=1;elseleap=0; elseleap=1;elseleap=0;if(leap)printf("%dis",year);elseprintf("%disnot",year);

printf("aleapyear.\n");return0;}if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0;

例4.9求

方程的解。解題思路:處理以下各情況①

a=0,不是二次方程②

,有兩個相等實根

,有兩個不等實根。

,有兩個共軛復(fù)根。

應(yīng)當(dāng)以p+qi和p-qi的形式輸出復(fù)根

其中,p=-b/2a,q=()/2a參見教材圖4.14#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,realpart,

imagpart;

scanf("%lf,%lf,%lf",&a,&b,&c);

printf("Theequation");if(fabs(a)<=1e-6)

printf("isnotaquadratic\n");實型不能用if(a==0)else{disc=b*b-4*a*c;if(fabs(disc)<=1e-6)

printf("hastwoequalroots:%8.4f\n",-b/(2*a));else先算disc,以減少重復(fù)計算不能用if(disc==0)if(disc>1e-6) {x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);

printf("hasdistinctrealroots:%8.4fand%8.4f\n",x1,x2); }else{realpart=-b/(2*a);

imagpart=sqrt(-disc)/(2*a);

printf("hascomplexroots:\n");

printf("%8.4f+%8.4fi\n“,realpart,imagpart);

printf("%8.4f-%8.4fi\n",

realpart,imagpart); }}return0;}{realpart=-b/(2*a);

imagpart=sqrt(-disc)/(2*a);

printf("hascomplexroots:\n");

printf("%8.4f+%8.4fi\n“,realpart,imagpart);

printf("%8.4f-%8.4fi\n",

realpart,imagpart); }}return0;}{realpart=-b/(2*a);

imagpart=sqrt(-disc)/(2*a);

printf("hascomplexroots:\n");

printf("%8.4f+%8.4fi\n“,realpart,imagpart);

printf("%8.4f-%8.4fi\n",

realpart,imagpart); }}return0;}

例4.10運輸公司對用戶計算運輸費用。路程(skm)越遠,每噸·千米運費越低。標(biāo)準(zhǔn)如下:s<250沒有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣解題思路:設(shè)每噸每千米貨物的基本運費為p,貨物重為w,距離為s,折扣為d總運費f的計算公式為f=p×w×s×(1-d)折扣的變化規(guī)律(參見教材圖4.15):折扣的“變化點”都是250的倍數(shù)在橫軸上加一種坐標(biāo)c,c的值為s/250c代表250的倍數(shù)當(dāng)c<1時,表示s<250,無折扣1≤c<2時,表示250≤s<500,折扣d=2%2≤c<4時,d=5%;4≤c<8時,d=8

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論