版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章分支結(jié)構(gòu)程序設(shè)計(jì)第3章分支結(jié)構(gòu)程序設(shè)計(jì)學(xué)習(xí)目標(biāo)本章主要要求掌握關(guān)系表達(dá)式與邏輯表達(dá)式、分支結(jié)構(gòu)的設(shè)計(jì)思想、實(shí)現(xiàn)分支結(jié)構(gòu)判斷條件的構(gòu)成、實(shí)現(xiàn)分支結(jié)構(gòu)的語句、分支結(jié)構(gòu)程序設(shè)計(jì)舉例。第3章分支結(jié)構(gòu)程序設(shè)計(jì)3.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式3.2邏輯運(yùn)算符和表達(dá)式3.3if語句3.4switch語句3.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式3.1.1關(guān)系運(yùn)算符及其優(yōu)先次序3.1.2關(guān)系表達(dá)式3.1.1關(guān)系運(yùn)算符及其優(yōu)先次序在C語言程序設(shè)計(jì)中,常常需要比較兩個(gè)量的大小關(guān)系,以決定程序下一步的工作。比較兩個(gè)量的運(yùn)算符稱為關(guān)系運(yùn)算符。在C語言中有以下關(guān)系運(yùn)算符:<小于<=小于或等于>大于>=大于或等于==等于!=不等于關(guān)系運(yùn)算符都是雙目運(yùn)算符,其結(jié)合性均為左結(jié)合。關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符,高于賦值運(yùn)算符。在上述六個(gè)關(guān)系運(yùn)算符中,<、<=、>、>=的優(yōu)先級(jí)相同,高于==和!=,==和!=的優(yōu)先級(jí)相同。3.1.2關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個(gè)數(shù)值或數(shù)值表達(dá)式連接起來的式子稱為關(guān)系表達(dá)式。
一般格式:表達(dá)式關(guān)系運(yùn)算符表達(dá)式3.1.2關(guān)系表達(dá)式例如:a+b>c-dx<=5/35*i==k+1由于表達(dá)式也可以又是關(guān)系表達(dá)式,因此在關(guān)系表達(dá)式中允許出現(xiàn)嵌套的情況。例如:a>(b>c),a!=(c==d)關(guān)系表達(dá)式的值是真”和“假”,用“1”和“0”表示。例如:3>0的值為“真”,即為1。2>7不成立,故其值為假,即為0。例3.1分析下面程序的運(yùn)行結(jié)果。#include<stdio.h>voidmain(){
int
a,b,c;
scanf("%d%d%d",&a,&b,&c);a=b!=c;
//
將關(guān)系表達(dá)式的值賦給a
printf("a=%d,b=%d,c=%d\n",a,b,c);
a==(b=c++*3);
//a與b進(jìn)行相等比較
printf("a=%d,b=%d,c=%d\n",a,b,c);
a=b>c>2;
//
將關(guān)系表達(dá)式的值賦給a
printf("a=%d,b=%d,c=%d\n",a,b,c);}運(yùn)行結(jié)果:234↙a=1,b=3,c=4a=1,b=12,c=5a=0,b=12,c=53.2邏輯運(yùn)算符和表達(dá)式
3.2.1邏輯運(yùn)算符及其優(yōu)先次序3.2.2邏輯表達(dá)式3.2.1邏輯運(yùn)算符及其優(yōu)先次序3種邏輯運(yùn)算符:&&(邏輯與)
||(邏輯或)
!(邏輯非)&&和||是雙目(元)運(yùn)算符!是一目(元)運(yùn)算符邏輯表達(dá)式用邏輯運(yùn)算符將關(guān)系表達(dá)式或其他邏輯量連接起來的式子3.2.1邏輯運(yùn)算符及其優(yōu)先次序與運(yùn)算&&
:參與運(yùn)算的兩個(gè)量都為真時(shí),結(jié)果才為真,否則為假。例如:1>0&&6>2由于1>0為真,6>2也為真,相與的結(jié)果也為真?;蜻\(yùn)算||
:參與運(yùn)算的兩個(gè)量只要有一個(gè)為真,結(jié)果就為真。兩個(gè)量都為假時(shí),結(jié)果為假。例如:3>0||3>8由于3>0為真,相或的結(jié)果也就為真。非運(yùn)算!
:參與運(yùn)算量為真時(shí),結(jié)果為假;參與運(yùn)算量為假時(shí),結(jié)果為真。例如:!(3>0)由于3>0為真,非運(yùn)算的結(jié)果為假。3.2.2邏輯表達(dá)式由邏輯運(yùn)算符將邏輯量連接起來構(gòu)成的式子稱為邏輯表達(dá)式。一般格式:表達(dá)式邏輯運(yùn)算符表達(dá)式其中的表達(dá)式可以又是邏輯表達(dá)式,從而組成了嵌套的情形。3.2.2邏輯表達(dá)式例如:(a&&b)&&c根據(jù)邏輯運(yùn)算符的左結(jié)合性,上式也可寫為:a&&b&&c
邏輯表達(dá)式的值是式中各種邏輯運(yùn)算的最后值,以“1”和“0”分別代表“真”和“假”。例3.2分析下面程序的運(yùn)行結(jié)果。#include<stdio.h>voidmain(){
int
x,y,z,m;
x=y=z=0;
//
給變量x、y、z賦值0
m=++x&&++y||++z;
printf("m=%dx=%dy=%dz=%d",
m,x,y,z);}運(yùn)行結(jié)果:m=1
x=1
y=1
z=0分析:由于“++x&&++y”為1,表達(dá)式“++x&&++y||++z”值已完全確定,所以表達(dá)式中的“++z”被忽略。例3.3若有定義語句:intk1=10,k2=20;,執(zhí)行表達(dá)式(k1=k1>k2)&&(k2=k2>k1)后,k1和k2的值分別為()(2011年9月全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C試題選擇題第17題)A.0和1 B.0和20C.10和1D.10和20分析:在執(zhí)行表達(dá)式k1=k1>k2時(shí),先進(jìn)行關(guān)系比較,k1(10)是小于k2(20)的,所以k1>k2的值為0,再將0賦值給k1,所以此時(shí)k1=0,表達(dá)式值為0。由于是邏輯與(&&)連接,有一個(gè)表達(dá)式為0,邏輯表達(dá)式結(jié)果為0,此時(shí),邏輯與后面的表達(dá)式不用參與運(yùn)算,所以k2值不變,仍然是20。選B。3.3if語句3.3.1不含else子句的if語句3.3.2含else子句的if語句3.3.3嵌套的if語句3.3.4條件表達(dá)式構(gòu)成的選擇結(jié)構(gòu)3.3.1不含else子句的if語句一般形式:
if(表達(dá)式)語句其語義是:如果表達(dá)式的值為真,則執(zhí)行其后的語句,否則不執(zhí)行該語句。其過程可表示為下圖:圖3.1不含else子句的if語句流程圖例3.4輸入兩個(gè)整數(shù),輸出其中的大數(shù)。#include"stdio.h"voidmain(){
int
a,b,max;
printf("\ninputtwonumbers:\n");
scanf("%d%d",&a,&b);
max=a;
if(max<b)max=b;
printf("max=%d",max);}運(yùn)行結(jié)果:inputtwonumbers:35↙max=5例3.5有以下程序(2011年3月全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C試題填空題第7題)#include<stdio.h>main(){intx;scanf("%d",&x);if(x>15)printf("%d",x-5);if(x>10)printf("%d",x);if(x>5)printf("%d\n",x+5);}若程序運(yùn)行時(shí)從鍵盤輸入12<回車>,則輸出結(jié)果為
。分析:本題執(zhí)行過程如下,輸入12后,首先判斷第一個(gè)if條件,12>15為假,所以第一個(gè)if語句不執(zhí)行。接著進(jìn)行第二個(gè)if條件判斷,12>10為真,執(zhí)行后面語句,所以輸出12。然后繼續(xù)執(zhí)行第三個(gè)if條件判斷,12>5為真,if語句繼續(xù)被執(zhí)行,就在輸出12后繼續(xù)輸出x+5,即17。所以完整輸出結(jié)果為1217。3.3.2含else子句的if語句一般形式:if(表達(dá)式)語句1;else語句2;其語義是:如果表達(dá)式的值為真,則執(zhí)行語句1,否則執(zhí)行語句2。其過程可表示為下圖:圖3.2含else子句的if語句流程圖例3.6輸入兩個(gè)整數(shù),輸出其中的大數(shù)。#include"stdio.h"voidmain(){
int
a,b,max;printf("\ninputtwonumbers:\n");scanf("%d%d",&a,&b);if(a>b)printf("max=%d\n",a);elseprintf("max=%d\n",b);} 運(yùn)行結(jié)果:inputtwonumbers:35↙max=53.3.3嵌套的if語句當(dāng)if語句中的執(zhí)行語句又是if語句時(shí),則構(gòu)成了if語句嵌套的情形。一般形式:
if(表達(dá)式)
if語句;
或者:
if(表達(dá)式)
if語句;
else
if語句;例如:
if(表達(dá)式1)
if(表達(dá)式2)
語句1;
else
語句2;其中的else究竟是與哪一個(gè)if配對(duì)呢?C語言規(guī)定,if語句嵌套時(shí),else子句與if的匹配原則:與在它上面、距它最近、且尚未匹配的if配對(duì)。例3.7比較兩個(gè)數(shù)的大小關(guān)系。#include"stdio.h"voidmain(){
int
a,b;printf("pleaseinputa,b:\n");scanf("%d%d",&a,&b);if(a!=b)if(a>b)printf("a>b\n");elseprintf("a<b\n");elseprintf("a=b\n");
}運(yùn)行結(jié)果:Pleaseinputa,b:35↙a<b嵌套的if語句結(jié)構(gòu)中,比較常用到的結(jié)構(gòu)形式是if-else-if結(jié)構(gòu)。使用if-else-if形式,結(jié)構(gòu)更加清晰易懂。一般形式:if(表達(dá)式1)
語句1;
elseif(表達(dá)式2)
語句2;
elseif(表達(dá)式3)
語句3;
…elseif(表達(dá)式m)
語句m;
else
語句n;其語義是:依次判斷表達(dá)式的值,當(dāng)出現(xiàn)某個(gè)值為真時(shí),則執(zhí)行其對(duì)應(yīng)的語句。然后跳到整個(gè)if語句之外繼續(xù)執(zhí)行程序。如果所有的表達(dá)式均為假,則執(zhí)行語句n。然后繼續(xù)執(zhí)行后續(xù)程序。
例3.8判別鍵盤輸入整數(shù)是正整數(shù)、負(fù)整數(shù)或者是零#include"stdio.h"main(){
intc;
printf("inputanumber:\n");
scanf("%d",&c);
if(c<0)
printf("Thisisanegativenumber\n");elseif(c>0)
printf("Thisispositivenumber\n");else
printf("Thisiszero\n");}運(yùn)行結(jié)果:Pleaseinputa,b:30↙Thisisapositivenumber3.3.4條件表達(dá)式構(gòu)成的選擇結(jié)構(gòu)C語言另外還提供了一個(gè)特殊的運(yùn)算符——條件運(yùn)算符,由此構(gòu)成的表達(dá)式也可以形成簡(jiǎn)單的選擇結(jié)構(gòu),這種選擇結(jié)構(gòu)能以表達(dá)式的形式內(nèi)嵌在允許出現(xiàn)表達(dá)式的地方,使得可以根據(jù)不同的條件使用不同的數(shù)據(jù)參與運(yùn)算。條件運(yùn)算符為?和:,它是一個(gè)三目運(yùn)算符,即有三個(gè)參與運(yùn)算的量。由條件運(yùn)算符組成的式子稱為條件表達(dá)式。一般形式:表達(dá)式1?表達(dá)式2:表達(dá)式3其求值規(guī)則為:如果表達(dá)式1的值為真,則以表達(dá)式2的值作為條件表達(dá)式的值,否則以表達(dá)式2的值作為整個(gè)條件表達(dá)式的值。條件表達(dá)式通常用于賦值語句之中。例如條件語句:if(a>b)max=a;
elsemax=b;可用條件表達(dá)式寫為max=(a>b)?a:b;執(zhí)行該語句的語義是:如a>b為真,則把a(bǔ)賦予max,否則把b賦予max。例3.9用條件表達(dá)式重新編程,輸出兩個(gè)數(shù)中的大數(shù)。
#include"stdio.h"voidmain(){
int
a,b,max;printf("\ninputtwonumbers:\n");scanf("%d%d",&a,&b);printf("max=%d\n",a>b?a:b);
}運(yùn)行結(jié)果:inputtwonumbers56↙max=63.4switch語句一般形式:switch(表達(dá)式){case常量表達(dá)式1:語句1;
case常量表達(dá)式2:語句2;
…case常量表達(dá)式n:語句n;
default:語句n+1;
}3.4switch語句其語義是:計(jì)算表達(dá)式的值。并逐個(gè)與其后的常量表達(dá)式值相比較,當(dāng)表達(dá)式的值與某個(gè)常量表達(dá)式的值相等時(shí),即執(zhí)行其后的語句,然后不再進(jìn)行判斷,繼續(xù)執(zhí)行后面所有case后的語句。如表達(dá)式的值與所有case后的常量表達(dá)式均不相同時(shí),則執(zhí)行default后的語句。3.4switch語句例3.10成績(jī)等級(jí)查詢:在進(jìn)行評(píng)定時(shí)通常會(huì)將成績(jī)分為幾個(gè)等級(jí),0~59分為不合格,60~79分為及格,80~89分為良好,90~100為優(yōu)秀。輸入一個(gè)成績(jī),給出對(duì)應(yīng)的等級(jí)。#include"stdio.h"voidmain(){intnum;floatC;
printf("\t成績(jī)等級(jí)查詢\n\n");
printf("請(qǐng)輸入成績(jī):");
scanf("%f",&C);num=(int)(C/10);
switch(num){case10:case9:
printf("等級(jí)為優(yōu)秀!\n");break;case8:
printf("等級(jí)為良好!\n");break;case7:case6:
printf("等級(jí)為合格。\n");break;default:
printf("等級(jí)為不合格。\n");break;}}運(yùn)行結(jié)果:成績(jī)等級(jí)查詢請(qǐng)輸入成績(jī):95↙等級(jí)為優(yōu)秀!3.4switch語句選擇結(jié)構(gòu)應(yīng)用程序舉例:例3.11輸入一個(gè)字符,請(qǐng)判斷是字母、數(shù)字還是特殊字符?#include<stdio.h>voidmain(){charch;printf("請(qǐng)輸入一個(gè)字符:");/*在雙引號(hào)內(nèi)的字符串中,可以出現(xiàn)漢字,不影響程序運(yùn)行*/ch=getchar();if((ch>=’a’&&ch<=’z’)||(ch>=’A’&&ch<=’Z’))printf("\n它是一個(gè)字母!\n");/*注意前后的\n,養(yǎng)成良好的編輯習(xí)慣*/elseif(ch>=’0’&&ch<=’9’)printf("\n它是一個(gè)數(shù)字!\n");elseprintf("\n它是一個(gè)特殊字符!\n");}運(yùn)行結(jié)果:請(qǐng)輸入一個(gè)字符:A↙
它是一個(gè)字母!例3.12閏年判斷程序。#include<stdio.h>voidmain(){intyear;printf("Typeinayear:\n");scanf("%d",&year);if(year%400==0||year%4==0&&year%100!=0)printf("%disaleapyear.\n",year);elseprintf("%disnotaleapyear.\n",year);}運(yùn)行結(jié)果:Typeinayear:2006<回車>2006isaleapyear分析:閏年有兩種情況,設(shè)年份為year,則:⑴當(dāng)year是400的整倍數(shù)時(shí)為閏年,條件表示為:year%400==0⑵當(dāng)year是4的整倍數(shù),但不是100的整倍數(shù)時(shí)為閏年,條件表示為:year%4==0&&year%100!=0綜合上述兩種情況,得到閏年條件的邏輯表達(dá)式:year%400==0||year%4==0&&year%100!=0例3.13
編寫程序,根據(jù)輸入的學(xué)生成績(jī)給出相應(yīng)的等級(jí),大于或等于90分以上的等級(jí)為A,6O分以下的等級(jí)為E,其余每10分為一個(gè)等級(jí)。#include<stdio.h>main(){intg;
printf("Enterg:");scanf("%d",&g);
printf("g=%d:",g);
if(g>=90)printf("A\n");
elseif(g>=80)printf("B\n");
elseif(g>=70)printf("C\n");
elseif(g>=60)printf("D\n");
elseprintf("E\n");}運(yùn)行結(jié)果:Enterg:92↙g=92:A分析:當(dāng)執(zhí)行以上程序時(shí),首先輸入學(xué)生的成績(jī),然后進(jìn)入if語句。if語句中的表達(dá)式將依次對(duì)學(xué)生成績(jī)進(jìn)行判斷,若能使某if后的表達(dá)式值為1,則執(zhí)行與其相應(yīng)的子句,之后便退出整個(gè)if結(jié)構(gòu)。例3.14將上面的例子改成switch語句。#include<stdio.h>main(){intg;
printf("Enterg:");scanf("%d",&g);
printf("g=%d:",g);switch(g/10){case10:
case9:printf("A\n");break;
case8:printf("B\n");break;
case7:printf("C\n");break;
case6:printf("D\n");break;
default:printf("E\n");
}}運(yùn)行結(jié)果:Enterg:56↙g=56:E例3.15求一元二次方程ax2+bx+c=0的解(a≠0)。#include"math.h"#include"stdio.h"main(){floata,b,c,disc,x1,x2,p,q;scanf(“%f,%f,%f”,&a,&b,&c);disc=b*b-4*a*c;if(fabs(disc)<=1e-6) /*fabs():求絕對(duì)值庫(kù)函數(shù)*/printf(“x1=x2=%7.2f\n”,-b/(2*a)); /*輸出兩個(gè)相等的實(shí)根*/else{if(disc>1e-6){x1=(-b+sqrt(disc))/(2*a); /*求出兩個(gè)不相等的實(shí)根*/x2=(-b-sqrt(disc))/(2*a);printf("x1=%7.2f,x2=%7.2f\n",x1,x2);}else{p=-b/(2*a); /*求出兩個(gè)共軛復(fù)根*/q=sqrt(fabs(disc))/(2*a);printf(“x1=%7.2f+%7.2fi\n“,p,q);/*輸出兩個(gè)共軛復(fù)根*/printf(”x2=%7.2f-%7.2fi\n“,p,q);}}}
運(yùn)行結(jié)果:2,6.5,3↙x1=-0.56,x2=-2.69例3.16已知某公司員工的保底薪水為500,某月所接工程的利潤(rùn)profit(整數(shù))與利潤(rùn)提成的關(guān)系如下(計(jì)量單位:元):profit≤1000 沒有提成;1000<profit≤2000 提成10%;2000<profit≤5000 提成15%;5000<profit≤10000 提成20%;10000<profit 提成25%。算法分析:為使用switch語句,必須將利潤(rùn)profit與提成的關(guān)系,轉(zhuǎn)換成某些整數(shù)與提成的關(guān)系。分析本題可知,提成的變化點(diǎn)都是1000的整數(shù)倍(1000、2000、5000、……),如果將利潤(rùn)prof
溫馨提示
- 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年阿里貨運(yùn)從業(yè)資格證考題
- 2025年北海貨運(yùn)上崗證考試多少道題
- 2025年渭南貨運(yùn)資格證考試題答案
- 養(yǎng)殖場(chǎng)科研服務(wù)租賃合同
- 石油開采水暖系統(tǒng)安裝協(xié)議
- 體育場(chǎng)館壓樁施工合同
- 倉(cāng)儲(chǔ)中心清潔保障協(xié)議
- 居民區(qū)域凈水機(jī)租賃合同協(xié)議書
- 風(fēng)電場(chǎng)壓樁施工合同
- 租車業(yè)務(wù)市場(chǎng)營(yíng)銷渠道拓展
- 《風(fēng)險(xiǎn)評(píng)估培訓(xùn)》課件
- 腫瘤科介入治療及護(hù)理
- 心理統(tǒng)計(jì)與SPSS應(yīng)用學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- SVG圖形渲染性能提升
- 華南理工大學(xué)《固體理論II》2023-2024學(xué)年第一學(xué)期期末試卷
- 女性學(xué):女性精神在現(xiàn)代社會(huì)中的挑戰(zhàn)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 《孟子》精讀學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 廣中醫(yī)藥理學(xué)期末重點(diǎn)
- 自貢市重點(diǎn)中學(xué)2025屆高二數(shù)學(xué)第一學(xué)期期末統(tǒng)考試題含解析
- 中班晚安大猩猩文檔
- 大學(xué)美育:認(rèn)識(shí)美欣賞美創(chuàng)造美學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
評(píng)論
0/150
提交評(píng)論