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

下載本文檔

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

文檔簡介

C語言程序設(shè)計(第3版)張磊編著清華大學(xué)出版社C語言程序設(shè)計第3章分支結(jié)構(gòu)程序設(shè)計《C語言程序設(shè)計》(第3版)張磊編著

21世紀高等學(xué)校規(guī)劃教材清華大學(xué)出版社C語言程序設(shè)計(第3版)張磊編著清華大學(xué)出版社分支結(jié)構(gòu)的引入例3-1輸入一個學(xué)生的兩門課的成績,若平均成績不低于90分,則顯示“優(yōu)等生”,否則顯示“要加油啊!”。1.程序/*programe3-1.c*/#include<stdio.h>voidmain(){inta1,a2,ave;printf("輸入兩門課的成績:");scanf("%d,%d",&a1,&a2);ave=(a1+a2)/2;

if(ave>=90)/*分支控制*/printf("優(yōu)等生!\n");

elseprintf("要加油啊!\n");}2.程序解析程序中的if-else命令用于實現(xiàn)分支控制,分支處理的條件是“ave>=90”。當ave>=90成立時,執(zhí)行語句“printf(”優(yōu)等生!\n“);”,輸出字符串“優(yōu)等生!”;否則,執(zhí)行語句“printf(”要加油啊!\n“);”,輸出字符串“要加油啊!”。第一次執(zhí)行結(jié)果輸入兩門課的成績:88,96優(yōu)等生!第二次執(zhí)行結(jié)果輸入兩門課的成績:77,85要加油啊!C語言程序設(shè)計(第3版)張磊編著清華大學(xué)出版社第3章分支結(jié)構(gòu)程序設(shè)計一、關(guān)系運算符和關(guān)系表達式二、邏輯運算符和邏輯表達式三、實現(xiàn)選擇結(jié)構(gòu)的控制語句四、選擇結(jié)構(gòu)程序舉例關(guān)系運算符<<=>>===!=(6種)優(yōu)先級賦值<關(guān)系(后2<前4)<算術(shù)關(guān)系表達式用關(guān)系運算符將兩個表達式連接起來的式子.算術(shù)、關(guān)系、邏輯、賦值、常量。值真(1)假(0)舉例已知:(a=3b=2c=1d=0)0a==b>cd==a>b+c1d=a>b+c?一、關(guān)系運算符和關(guān)系表達式0<a<201關(guān)系運算符含義實例>大于ave>90>=大于等于ave>=90<小于ave<90<=小于等于ave<=90==等于ave==90!=不等于ave!=90邏輯運算符

!(邏輯非)&&(邏輯與)||(邏輯或)運算規(guī)則優(yōu)先次序賦值<||<&&<關(guān)系<算術(shù)<!(1)!:取邏輯值的相反值。(2)&&:參加運算的兩個邏輯值都為真時,結(jié)果為真(1)。(3)||:參加運算的兩個邏輯值都為假時,結(jié)果為假(0)。邏輯表達式用邏輯運算符將關(guān)系表達式和邏輯量連接起來的式子。舉例已知:(a=1b=0)1a||b&&0!a&&(5>3)||b0雙目單目二、邏輯運算符和邏輯表達式值邏輯量“真”、“假”。C語言編譯系統(tǒng)中以數(shù)值1表示“真”,數(shù)值0表示“假”舉例5>3&&8<4-!00(5>3)&&(8<(4-!0))4&&5>3||21邏輯運算符兩側(cè)的運算對象不但可以是0和1,也可以是0或非0的整數(shù),也可是任何類型的數(shù)據(jù)。系統(tǒng)判定標準:0為假;非0為真。二、邏輯運算符和邏輯表達式‘c’&&‘d’1三、實現(xiàn)選擇結(jié)構(gòu)的控制語句選擇結(jié)構(gòu)單分支雙分支if(表達式)語句多分支if(表達式)語句1else語句2if(表達式1)語句1elseif(表達式2)語句2……else語句nif語句的嵌套switch語句條件表達式語句格式舉例if(x>y)printf(“%d”,x);if(表達式)語句#include<stdio.h>voidmain(){floata,b,t=0;scanf(“%f,%f”,&a,&b);if(a>b){t=a;a=b;b=t;}printf(“%5.2f,%5.2f\n”,a,b);}3,43.00,4.00……if(a>b)t=a;a=b;b=t;…………if(a>b)t=a;a=b;b=t;……3,44.00,0.00當某些語句作為一個整體出現(xiàn)的時候,必須是復(fù)合語句的形式。(一)、單分支注意:表達式可以是邏輯表達式、關(guān)系表達式、任意數(shù)值類型練習(xí)P89

3格式if(x>y)printf(“%d”,x);elseprintf(“%d”,y);#include<stdio.h>#include<math.h>voidmain(){floata,b,c,p,s;scanf(“%f,%f,%f”,&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a)

{

p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf(“s=%7.2f\n”,s);

}elseprintf(“Notatriangle!\n”);}if(表達式)語句1else語句2例:輸入三角形的三邊,求三角形的面積。輸入a,b,c是三角形嗎?YNp(a+b+c)/2ssqrt(p*(p-a)*(p-b)*(p-c))輸出s輸出“非三角形!”3,4,5s=6.003,4,8Notatriangle!(二)、雙分支C語言程序設(shè)計(第3版)張磊編著清華大學(xué)出版社例3-20

設(shè)計求解一元二次方程(a≠0)的通用程序問題分析與算法設(shè)計⑴若有實根,則計算并輸出實根⑵程序的輸入量為方程的系數(shù)a、b、c。。⑶程序中要使用數(shù)學(xué)函數(shù)sqrt(),要注意打開math.h文件。#include<stdio.h>#include<math.h>voidmain(){floata,b,c;floatx1,x2,d;printf("Inputa,b,c:");scanf("%f,%f,%f",&a,&b,&c);d=b*b-4*a*c;

if(d>=0){x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);printf("x1=%f,x2=%f\n",x1,x2);}

elseprintf("norealroot.\n");}(二)、雙分支條件運算符條件表達式舉例if(a>b)max=a;elsemax=b;表達式1?表達式2:表達式3max=(a>b)?a:b;注意使用條件若if語句中,在表達式為“真”和“假”時,都只執(zhí)行一個賦值語句給同一個變量賦值,則可以用簡單的條件運算符來處理。取值表達式1為真,則取值為表達式2的值;表達式1為假,則取值為表達式3的值。(二)、雙分支條件運算符?:結(jié)合性:自右向左表達式2和3可以是數(shù)值表達式、賦值表達式、函數(shù)表達式。舉例輸入一個字符,判別它是否大寫字母,如果是,將它轉(zhuǎn)換成小寫;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。(二)、雙分支#include<stdio.h>voidmain(){charch;scanf(“%c”,&ch);ch=(ch>=‘A’&&ch<=‘Z’)?(ch+32):ch;printf(“%c\n”,ch);}格式舉例if(cost>3000)cash=500;elseif(cost>2000)cash=300;elseif(cost>1500)cash=200;elseif(cost>1000)cash=100;elsecash=0;if(表達式1)語句1elseif(表達式2)語句2……else語句n語句本身含分號(三)、多分支(一)C語言程序設(shè)計(第3版)張磊編著清華大學(xué)出版社例3-7

計算分段函數(shù)值#include<stdio.h>voidmain(){floatx,y;printf("Input:");scanf("%f",&x);

if(x>0)y=5*x+8;

elseif(x==0)y=36;

elsey=1.5*x-26;printf("y=%f\n",y);}(三)、多分支(一)C語言程序設(shè)計(第3版)張磊編著清華大學(xué)出版社練習(xí):以下程序的輸出結(jié)果是()main(){inta=5,b=4,c=3,d=2;if(a>b>c)printf("%d\n",d);elseif((c-1>=d)==1)printf("%d\n",d+1);elseprintf("%d\n",d+2);}A.2B.3C.4D.編譯時有錯,無結(jié)果if語句的嵌套在if語句中又包含一個或多個if語句。被嵌套的條件語句和嵌套進去的條件語句既可是單分支,也可是雙分支。if(表達式1)

if(表達式2)語句1

[else語句2][else

if(表達式3)語句3

[else語句4]]注意if與else的配對原則:else總是與它上面的最近的未配對的if配對。(三)、多分支(二)舉例已知a=3b=4c=5d=0,d=?if(a>b)

d=a;else

if(c>b)d=c;elsed=b;if(a>b)

if(c>b)d=c;elsed=b;if(a>b)

{if(c>b)d=c;}elsed=b;if(a>b)

if(c>b)d=c;elsed=b;elsed=a;d=5d=3d=0d=4(三)、多分支(二)練習(xí)P88

1、2開關(guān)語句switch(表達式){case常量表達式1:語句1case常量表達式2:語句2case常量表達式3:語句3……case常量表達式n:語句ndefault:語句n+1}當分支較多時,使用嵌套的if語句層數(shù)多,程序冗長而且可讀性降低。此時可以考慮使用switch語句(開關(guān)語句)來處理多分支。(三)、多分支(三)舉例#include<stdio.h>voidmain(){chargrade;printf(“請輸入考試等級A~D:”);scanf(“%c”,&grade);switch(grade){case‘A’:printf(“80~100\n”);case‘B’:printf(“70~79\n”);case‘C’:printf(“60~69\n”);case‘D’:printf(“<60\n”);default:printf(“error\n”);}}B70~7960~69<60Error根據(jù)輸入的考試成績等級打印出百分制分數(shù)段。A:80~100B:70~79C:60~69D:<60說明:應(yīng)在每一個printf后加break語句(三)、多分支(三)舉例#include<stdio.h>voidmain(){chargrade;printf(“請輸入考試等級A~D:”);scanf(“%c”,&grade)switch(grade){case‘A’:printf(“80~100\n”);break;case‘B’:printf(“70~79\n”);break;case‘C’:printf(“60~69\n”);break;case‘D’:printf(“<60\n”);break;default:printf(“error\n”);}}B70~79根據(jù)輸入的考試成績等級打印出百分制分數(shù)段。A:80~100B:70~79C:60~69D:<60最后一行的break可以省略。(三)、多分支(三)思考#include<stdio.h>voidmain(){floatscore;printf(“請輸入考試成績0~100:”);scanf(“%f”,&score);if(score>100)printf(“請輸入0~100之間的數(shù)\n”);elseif(score>=80)printf(“A\n”);elseif(score>=70)printf(“B\n”);elseif(score>=60)printf(“C\n”);elseprintf(“D\n”);}根據(jù)輸入的考試成績(百分制整數(shù))打印出等級水平。(使用if~else語句實現(xiàn))A:80~100B:70~79C:60~69D:<60思考:使用switch語句如何實現(xiàn)?程序(三)、多分支(三)思考#include<stdio.h>voidmain(){floatscore;printf(“請輸入考試成績0~100:”);scanf(“%f”,&score);switch(score){case80~100:printf(“A\n”);break;case70~79:printf(“B\n”);break;case60~69:printf(“C\n”);break;case<60:printf(“D\n”);break;default:printf(“請輸入0~100之間的整數(shù)\n”);}}根據(jù)輸入的考試成績(百分制整數(shù))打印出等級水平。(使用switch語句實現(xiàn))A:80~100B:70~79C:60~69D:<60思考:本程序有問題么?程序(三)、多分支(三)#include<stdio.h>voidmain(){floatscore;intp;printf(“請輸入考試成績0~100:”);scanf(“%f”,&score);p=(int)score/10;switch(p){case0:printf(“D\n”);break;case1:printf(“D\n”);break;case2:printf(“D\n”);break;case3:printf(“D\n”);break;case4:printf(“D\n”);break;case5:printf(“D\n”);break;case6:printf(“C\n”);break;case7:printf(“B\n”);break;case8:printf(“A\n”);break;case9:printf(“A\n”);break;case10:printf(“A\n”);break;default:printf(“請輸入0~100之間的整數(shù)\n”);}}改進程序111種情況思考:不同case值時執(zhí)行相同的操作,是否可以合并?#include<stdio.h>voidmain(){intscore,p;printf(“請輸入考試成績0~100:”);scanf(“%c”,&score);p=score/10;switch(

溫馨提示

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

最新文檔

評論

0/150

提交評論