第5章選擇分支結(jié)構(gòu)-C語(yǔ)言程序設(shè)計(jì)(譚浩強(qiáng)第三版)_第1頁(yè)
第5章選擇分支結(jié)構(gòu)-C語(yǔ)言程序設(shè)計(jì)(譚浩強(qiáng)第三版)_第2頁(yè)
第5章選擇分支結(jié)構(gòu)-C語(yǔ)言程序設(shè)計(jì)(譚浩強(qiáng)第三版)_第3頁(yè)
第5章選擇分支結(jié)構(gòu)-C語(yǔ)言程序設(shè)計(jì)(譚浩強(qiáng)第三版)_第4頁(yè)
第5章選擇分支結(jié)構(gòu)-C語(yǔ)言程序設(shè)計(jì)(譚浩強(qiáng)第三版)_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第5章選擇結(jié)構(gòu)程序設(shè)計(jì)

關(guān)系運(yùn)算符和關(guān)系表達(dá)式邏輯運(yùn)算符和邏輯表達(dá)式

if語(yǔ)句

switch語(yǔ)句程序舉例引例:1/x當(dāng)x≠0時(shí)

10000當(dāng)x=0時(shí)y=

選擇結(jié)構(gòu)是3種基本結(jié)構(gòu)之一,經(jīng)常牽涉到:根據(jù)所指定的條件是否相同,從兩組(或多組)操作中選擇其一。

要考慮兩個(gè)方面的問(wèn)題:1、C語(yǔ)言中如何表示條件?一般用關(guān)系表達(dá)式或邏輯表達(dá)式2、C語(yǔ)言中實(shí)現(xiàn)選擇結(jié)構(gòu)用什么語(yǔ)句?用if語(yǔ)句或switch語(yǔ)句。if(x!=0)y=1/x;elsey=10000;此處:用if語(yǔ)句來(lái)表示選擇結(jié)構(gòu)用一個(gè)關(guān)系表達(dá)式x!=0來(lái)表示條件5.1關(guān)系運(yùn)算符和表達(dá)式1、關(guān)系運(yùn)算:實(shí)質(zhì)是兩個(gè)量“比較運(yùn)算”。2、關(guān)系運(yùn)算符:種類(lèi):6種<<===>=>!=結(jié)合方向:自左向右優(yōu)先級(jí)別:前4種優(yōu)先級(jí)相同,高于后2種由高到低:算術(shù)運(yùn)算-關(guān)系運(yùn)算-賦值運(yùn)算<<=>>===!=優(yōu)先級(jí)6(高)優(yōu)先級(jí)7(低)例c>a+bc>(a+b)a>b!=c(a>b)!=ca==b<ca==(b<c)a=b>ca=(b>c)算術(shù)運(yùn)算符賦值運(yùn)算符關(guān)系運(yùn)算符高低//表達(dá)式值1//表達(dá)式值1//表達(dá)式值0//a>b值為1,所以d=1//a>b為1,a>b>c為0,所以f=0例inta=3,b=2,c=1,d,f;

a>b(a>b)==cb+c<ad=a>bf=a>b>c3、關(guān)系表達(dá)式:用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來(lái)式子。4、關(guān)系表達(dá)式的值:是邏輯值“真”或“假”,用1和0表示1

––

結(jié)果為真

(關(guān)系成立)0

––

結(jié)果為假

(關(guān)系不成立)注意:其中“==”表示相等,而“=”表示賦值(1)關(guān)系運(yùn)算符左右兩邊類(lèi)型不一致,自動(dòng)進(jìn)行類(lèi)型轉(zhuǎn)換,轉(zhuǎn)換成兩邊的類(lèi)型相同,然后進(jìn)行比較。

例如:若a=0,b=0.5,轉(zhuǎn)換成a=0.0,則a<=b的值為1

(2)應(yīng)避免對(duì)實(shí)數(shù)作相等或不等的判斷,而只能使用“<”和“>”,原因在于舍入誤差可能造成兩個(gè)邏輯上應(yīng)該相等的數(shù)不相等。

例如:如果x、y均為實(shí)數(shù),要避免使用x==y

應(yīng)使用fabs(x-y)<1e-6(3)關(guān)系運(yùn)算符“>=、<=、==、!=”在書(shū)寫(xiě)時(shí),不要用空格將其分開(kāi),否則會(huì)產(chǎn)生語(yǔ)法錯(cuò)誤。5、關(guān)系運(yùn)算注意的問(wèn)題5.2邏輯運(yùn)算符和邏輯表達(dá)式有時(shí),只用一個(gè)簡(jiǎn)單的關(guān)系表達(dá)式不能完整地表達(dá)一個(gè)條件,如:

y=其中的條件需要用邏輯表達(dá)式來(lái)表達(dá):

x!=0&&a!=0&&就是一種邏輯運(yùn)算符。1/x+1/a當(dāng)x≠0,a≠0時(shí)

10000其它

1、邏輯運(yùn)算符(1)種類(lèi):三種邏輯運(yùn)算符

&&邏輯與(相當(dāng)日常生活中:而且,并且,只在兩

條件同時(shí)成立時(shí)為“真”)

||邏輯或(相當(dāng)日常生活中:或,兩個(gè)條件只要有

一個(gè)成立時(shí)即為“真”)

!邏輯非(條件為真,運(yùn)算后為假,條件為假,運(yùn)

算后為真)

“&&”,“||”是雙目運(yùn)算符,“!”是單目運(yùn)算符。

例:a&&b若a,b為真,則a&&b為真。

a||b若a,b之一為真,則a||b為真。

!a若a為真,則!a為假。5.2邏輯運(yùn)算符和邏輯表達(dá)式C語(yǔ)言中,運(yùn)算量:0表示“假”,非0表示“真”,

運(yùn)算結(jié)果:0表示“假”,1表示“真”,ab!a!ba&&ba||b真假真假假假真真真假假假假假真真假假真真真假真真(2)邏輯運(yùn)算真值表!(2)&&(11)||(12)高低(3)優(yōu)先級(jí):(4)結(jié)合方向:!:從右向左&&:從左向右||:從左向右!(非)算術(shù)運(yùn)算符關(guān)系運(yùn)算符&&||賦值運(yùn)算符=高低如:x=!a>b&&b>c+3x=(((!a)>b)&&(b>(c+3)))2、邏輯表達(dá)式和邏輯表達(dá)式的值(1)邏輯表達(dá)式:用邏輯運(yùn)算符將關(guān)系表達(dá)式、邏輯量連接起來(lái)的式子。

例如:

!a&&b||x>y&&c(2)邏輯表達(dá)式的值:1或0,表示邏輯值“真”或“假”例a=4;b=5;!aa&&ba||b!a||b4&&0||25>3&&8<4-!0‘c’&&‘d’值為1值為0值為1

值為1值為1值為1(5>3)&&(8<(4-(!0)))值為0在邏輯運(yùn)算中,非0值參加邏輯運(yùn)算時(shí)被看成1處理.(3)短路現(xiàn)象:一個(gè)邏輯表達(dá)式中的邏輯運(yùn)算符并不一定全部執(zhí)行.例如:a=1,b=2,c=3,d=4,m=1,n=1(m=a>b)&&(n=c>d)

判斷m,n的值:結(jié)果m=0,n=1,表達(dá)式為0例如:a&&b&&c當(dāng)a=0(假)時(shí),

b,c不需判斷。

當(dāng)a=1,b=0,c不需判斷。例如:a||b||c當(dāng)a=1時(shí),b,c均不必判別。1&&0邏輯值為08<3邏輯值為04-1值為3!0邏輯值為15>3邏輯值為1(5>3)&&(8<(4-(!0)))值為0滿(mǎn)足下列2個(gè)條件中之一的為閏年:

年號(hào)能被4整除,但不能被100整除。

年號(hào)能被400整除。例寫(xiě)出判斷年號(hào)是否為閏年的邏輯表達(dá)式用變量year表示年號(hào),則邏輯表達(dá)式:(year%4==0&&year%100!=0)||year%400==0

值為1,則year為閏年;否則為非閏年。!((year%4==0&&year%100!=0)||(year%400==0))執(zhí)行過(guò)程:當(dāng)表達(dá)式值非0時(shí),執(zhí)行語(yǔ)句,

否則,不執(zhí)行語(yǔ)句。例如:

if(x>y)printf("%d",x);形式1:

if(表達(dá)式)

語(yǔ)句5.3if語(yǔ)句(三種形式)表達(dá)式語(yǔ)句非0=01.if語(yǔ)句的三種基本形式表達(dá)式的值:1

––

結(jié)果為真

(條件成立)0

––

結(jié)果為假

(條件不成立)例2輸入兩個(gè)實(shí)數(shù),按其值由小到大次序輸出這兩個(gè)數(shù)。表達(dá)式語(yǔ)句非0=0

main(){floata,b,t;scanf("%f,%f",&a,&b);if(a>b){t=a;a=b;b=t;}printf("%5.2f,%5.2f",a,b);}形式1:

if(表達(dá)式)

語(yǔ)句1.if語(yǔ)句的三種基本形式例3輸入三個(gè)數(shù),按從小到大的順序輸出。表達(dá)式語(yǔ)句非0=0main()

{floata,b,c,t;

scanf(“%f,%f,%f”,&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("%5.2f,%5.2f,%5.2f",a,b,c);

}形式1:

if(表達(dá)式)

語(yǔ)句1.if語(yǔ)句的三種基本形式例如:

if(x>y) printf("%d",x); elseprintf("%d",y);表達(dá)式語(yǔ)句1語(yǔ)句2非0=0執(zhí)行過(guò)程:

當(dāng)表達(dá)式值為非0,

執(zhí)行語(yǔ)句1;當(dāng)表達(dá)式值為0,

執(zhí)行語(yǔ)句2。形式2:

if(表達(dá)式)

語(yǔ)句1else語(yǔ)句21.if語(yǔ)句的三種基本形式表達(dá)式語(yǔ)句1語(yǔ)句2非0=0例4輸入一個(gè)數(shù),判斷它是否能被3整除。若能,則打印“YES”,否則,打印“NO”。形式2:

if(表達(dá)式)

語(yǔ)句1else語(yǔ)句2

main(){intn;printf(“inputn:”);scanf(“%d”,&n);

if(n%3==0)printf(“YES\n”);elseprintf(“NO\n”);}1.if語(yǔ)句的三種基本形式執(zhí)行過(guò)程:從上向下逐一對(duì)if后面的表達(dá)式進(jìn)行檢測(cè)。當(dāng)某一個(gè)表達(dá)式的值為非0時(shí),就執(zhí)行與此有關(guān)的子句中的語(yǔ)句,其余部分就被越過(guò)去。如果所有表達(dá)式的值都是0,則執(zhí)行最后的else子句;如果沒(méi)有最后的那個(gè)else子句,那么,將不進(jìn)行任何操作。形式3:if(表達(dá)式1)

語(yǔ)句1elseif(表達(dá)式2)

語(yǔ)句2elseif(表達(dá)式3)

語(yǔ)句3

……elseif(表達(dá)式n)語(yǔ)句nelse語(yǔ)句n+11.if語(yǔ)句的三種基本形式0表達(dá)式1

表達(dá)式2

表達(dá)式n語(yǔ)句n+100語(yǔ)句n

語(yǔ)句2

語(yǔ)句1

非0

非0

非0…

形式3:if(表達(dá)式1)

語(yǔ)句1elseif(表達(dá)式2)

語(yǔ)句2elseif(表達(dá)式3)

語(yǔ)句3

……elseif(表達(dá)式n)語(yǔ)句nelse語(yǔ)句n+1例如:if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;0表達(dá)式1

表達(dá)式2

表達(dá)式n語(yǔ)句n+100語(yǔ)句n

語(yǔ)句2

語(yǔ)句1

非0

非0

非0…

1.if語(yǔ)句的三種基本形式形式3:if(表達(dá)式1)

語(yǔ)句1elseif(表達(dá)式2)

語(yǔ)句2elseif(表達(dá)式3)

語(yǔ)句3

……elseif(表達(dá)式n)語(yǔ)句nelse語(yǔ)句n+1例5:輸入一個(gè)學(xué)生成績(jī),當(dāng)成績(jī)≥90時(shí),輸出

verygood,當(dāng)80≤成績(jī)<90時(shí),輸出

good,當(dāng)60≤成績(jī)<80時(shí),輸出pass,當(dāng)成績(jī)<60時(shí),輸出fail。main(){intscore;printf("Inputscore:");scanf("%d",&score);if(score>=90)printf(“verygood");elseif(score>=80)printf(“good");elseif(score>=60)printf(“pass");elseprintf(“fail");}1.if語(yǔ)句的三種基本形式0表達(dá)式1

表達(dá)式2

表達(dá)式n語(yǔ)句n+100語(yǔ)句n

語(yǔ)句2

語(yǔ)句1

非0

非0

非0…

例6:輸入一個(gè)字符,請(qǐng)判斷是字母、數(shù)字還是特殊字符。#include<stdio.h>main(){charch;

printf("Pleaseinputacharacter:\n");

ch=getchar();

if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))printf("\n%cisaletter\n",ch);

elseif(ch>='0'&&ch<='9')printf("\n%cisanumber!\n",ch);

elseprintf("\n%cisaspecialcharacter!\n",ch);

}形式3:if(表達(dá)式1)

語(yǔ)句1elseif(表達(dá)式2)

語(yǔ)句2elseif(表達(dá)式3)

語(yǔ)句3

……elseif(表達(dá)式n)語(yǔ)句nelse語(yǔ)句n+1例如:if(a&&b)prinf("o.k");if(a>b)…if(3)…if('a‘+88)…

1.表達(dá)式可以是邏輯表達(dá)式、關(guān)系表達(dá)式、算術(shù)表達(dá)式。

2.語(yǔ)句必須以分號(hào)結(jié)束。

3.若語(yǔ)句不止一條,則必須用{}括起來(lái)。在{}外不加分號(hào)。注意的問(wèn)題5.3if語(yǔ)句2、if語(yǔ)句的嵌套:

在if語(yǔ)句中,又包含一個(gè)或多個(gè)if語(yǔ)句。if(表達(dá)式1)if(表達(dá)式2)語(yǔ)句1else語(yǔ)句2elseif(表達(dá)式3)語(yǔ)句3else語(yǔ)句4內(nèi)嵌if內(nèi)嵌ifif(表達(dá)式1)if(表達(dá)式2)

語(yǔ)句1else

語(yǔ)句2內(nèi)嵌ifif(表達(dá)式1)

{if(表達(dá)式2)

語(yǔ)句1}else

語(yǔ)句3

內(nèi)嵌ifif(表達(dá)式1)

語(yǔ)句1elseif(表達(dá)式3)

語(yǔ)句3else

語(yǔ)句4內(nèi)嵌if5.3if語(yǔ)句(三種形式)2、if語(yǔ)句的嵌套if(表達(dá)式1)

{if(表達(dá)式2)

語(yǔ)句1}else

語(yǔ)句3

內(nèi)嵌ifif~else配對(duì)原則:缺省{}時(shí),else總是和它上面離它最近的未配對(duì)的if配對(duì)。if(……)if(……)if(……)else…...else…...else…...if(表達(dá)式1)if(表達(dá)式2)

語(yǔ)句1else

語(yǔ)句3

內(nèi)嵌if如果沒(méi)有{}時(shí)的配對(duì)2、if語(yǔ)句的嵌套if~else配對(duì)原則修改:

if(a==b){if(b==c)printf(“a==b==c”);}elseprintf(“a!=b”);實(shí)現(xiàn)if~else正確配對(duì)方法:必要時(shí),加{}例:if(a==b)if(b==c)printf(“a==b==c”);elseprintf(“a!=b”);例7有一函數(shù):y=–1(x<0)0(x=0)1(x>0)編一程序,輸入一個(gè)x值,輸出y值。有以下幾種寫(xiě)法,請(qǐng)判斷哪些是正確的?2、if語(yǔ)句的嵌套程序2:將程序1的if語(yǔ)句改為:

main()

{intx,y;

scanf("%d",&x);

if(x>=0)

if(x>0)

y=1;

else

y=0;

else

y=-1;

printf("x=%d,y=%d\n",x,y);

}程序1:

main()

{intx,y;

scanf("%d",&x);

if(x<0)

y=–1;

elseif(x==0)

y=0;

else

y=1;

printf("x=%d,y=%d\n",x,y);

}2、if語(yǔ)句的嵌套程序4:將程序1的if語(yǔ)句改為main(){intx,y;scanf("%d",&x);

y=0;if(x>=0)if(x>0)y=1;elsey=-1;printf("x=%d,y=%d\n",x,y);}

程序3:將程序1的if語(yǔ)句改為main(){intx,y;scanf("%d",&x);

y=-1;if(x!=0)if(x>0)y=1;elsey=0;printf("x=%d,y=%d\n",x,y);}2、if語(yǔ)句的嵌套y=0(x<0)–1(x=0)1(x>0)1.

程序1和程序2是正確的。

它們代表的函數(shù)為:2.

程序3和程序4是錯(cuò)誤的。

它們代表的函數(shù)為:y=0(x<0)–1(x=0)1(x>0)y=–1(x<0)0(x=0)1(x>0)結(jié)論:5.3if語(yǔ)句

C語(yǔ)言提供了一個(gè)簡(jiǎn)單的條件賦值語(yǔ)句或條件表達(dá)式。問(wèn)題:

當(dāng)判斷條件不論是“真”是“假”,均給同一變量賦值時(shí)簡(jiǎn)化條件語(yǔ)句

運(yùn)算符書(shū)寫(xiě)方式:?:

屬三目運(yùn)算符。3、條件運(yùn)算符5.3if語(yǔ)句執(zhí)行過(guò)程:

先求解表達(dá)式1,若非0(真),則值為表達(dá)式2的值,否則,為表達(dá)式3的值。一般形式:表達(dá)式1

?

表達(dá)式2

:表達(dá)式3例如:max=a>b?a:b;當(dāng)a>b,maxa;

否則,maxb3、條件運(yùn)算符表達(dá)式1取表達(dá)式2值取表達(dá)式3值非0=05.3if語(yǔ)句注意:條件運(yùn)算符優(yōu)先于賦值運(yùn)算符。

例如:max=(a>b?a:b)可去掉()條件運(yùn)算符低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符。

例如:max=a>b?a:b+1max=a>b?a:(b+1)

而不是

max=(a>b?a:b)+1條件運(yùn)算符結(jié)合性為從右至左。

例如:a>b?a:c>d?c:d

相當(dāng)于

a>b?a:(c>d?c:d)條件表達(dá)式不能取代一般的if語(yǔ)句,只有當(dāng)if的兩個(gè)分支為給同一變量賦值時(shí)才可替代if.

例如:求y=a+|b|

printf(“y=%d\n”,b>0?a+b:a-b);表達(dá)式1、表達(dá)式2、表達(dá)式3的類(lèi)型可以不同。

例如:x>y?1:1.53、條件運(yùn)算符5.3if語(yǔ)句3、條件運(yùn)算符例8輸入一個(gè)字符,判別它是否大寫(xiě)字母。

如果是,將它轉(zhuǎn)換成小寫(xiě)字母;

如果不是,不轉(zhuǎn)換。

然后輸出最后得到的字符。main()

{charch;

scanf("%c",&ch);

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

printf("%c",ch)

}5.3if語(yǔ)句switch語(yǔ)句是多分支選擇語(yǔ)句,也叫開(kāi)關(guān)語(yǔ)句一般形式:

switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句1[break;]case常量表達(dá)式2:語(yǔ)句2[break;]…case常量表達(dá)式n:語(yǔ)句n[break;]default:語(yǔ)句n+1}

5.4switch語(yǔ)句switch表達(dá)式語(yǔ)句1語(yǔ)句2語(yǔ)句n語(yǔ)句n+1…式1式2式ndefaultcase

執(zhí)行過(guò)程:當(dāng)表達(dá)式的值與某一個(gè)case后面的常量表達(dá)式的值相等時(shí),就執(zhí)行此case后面的語(yǔ)句。若所有的case中的常量表達(dá)式的值都沒(méi)有與表達(dá)式的值匹配,則執(zhí)行default后面的語(yǔ)句。

例9根據(jù)成績(jī)等級(jí),打印出成績(jī)范圍。5.4switch語(yǔ)句main(){chargrade;printf("Enteryourgrade\n");scanf("%c",&grade);

switch(grade){case'A':printf(“90~100\n");break;case'B':printf(“80~89\n");break;case'C':printf(“70~79\n");break;case'D':printf("60~69\n");break;case‘E':printf("<60\n");break;default:printf("error\n");}}沒(méi)有break將是錯(cuò)誤的。例如輸入B,打印出:80~8970~7960~69<60error注意:case常量表達(dá)式只起語(yǔ)句標(biāo)號(hào)作用;必須用break語(yǔ)句終止多個(gè)case連續(xù)執(zhí)行,否則只要有一個(gè)case滿(mǎn)足后,以下的語(yǔ)句全部無(wú)條件執(zhí)行。除非遇到“}”或break語(yǔ)句來(lái)終止switch語(yǔ)句的執(zhí)行。

例10根據(jù)成績(jī)范圍,打印出成績(jī)等級(jí)。5.4switch語(yǔ)句main(){intscore,num;chargrade;scanf("%d",&score);num=score/10;

switch(num)

{case10:case9:grade='A';break;case8:grade='B‘;break;case7:grade='C';break;case6:grade='D';break;default:grade='E';}

printf("%d%c",score,grade);}鑒于上述原因,2個(gè)或多個(gè)case可以共用一組執(zhí)行語(yǔ)句1.表達(dá)式的類(lèi)型和常量表達(dá)式的類(lèi)型必須一致;switch后面的表達(dá)式一般情況下是整型或字符型。2.每一個(gè)case的常量表達(dá)式的值必須互不相同。3.多個(gè)case和default的出現(xiàn)次序不影響執(zhí)行結(jié)果。4.case常量表達(dá)式只起語(yǔ)句標(biāo)號(hào)作用;

必須用break語(yǔ)句終止多個(gè)case連續(xù)執(zhí)行,

否則只要有一個(gè)case滿(mǎn)足后,以下的語(yǔ)句全部無(wú)條件執(zhí)行。

說(shuō)明:5.4switch語(yǔ)句

main(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;

case1:b++;break;

}case2:a++;b++;break;

case3:a++;b++;

}printf("\na=%d,b=%d",a,b);

}

switch的嵌套5.4switch語(yǔ)句①能夠被4整除,但不能被100整除的年份;②能夠被400整除的年份。

5.5程序舉例例寫(xiě)程序,判斷某一年是否閏年。閏年的算法。用一個(gè)標(biāo)志leap代表閏年與否。leap=1,代表閏年,leap=0,代表非閏年。#include<stdio.h>

voidmain()

{

intyear,leap;

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("%disaleapyear.\n",year);

elseprintf("%disnotaleapyear.\n",year);

}if(year%4!=0)leap=0;elseif(year%100!=0)leap=1;elseif(year%400?。剑埃欤澹幔穑剑埃唬澹欤螅澹欤澹幔穑剑?;

運(yùn)行情況:1989↙1989isnotaleapyear.2000↙2000isaleapyear.

if((year%4==0&&year%100!=0)||year%400==0)

leap=1;elseleap=0;例求ax2+bx+c=0方程的解。基本的算法:①a=0,不是二次方程。②b2-4ac=0,有兩個(gè)相等實(shí)根。③b2

-4ac>0,有兩個(gè)不等實(shí)根。④b2

-4ac<0,有兩個(gè)共軛復(fù)根。#include<stdio.h>

#include<math.h>

voidmain()

{

floata,b,c,disc,x1,x2,realpart,imagpart;

scanf(“%f,%f,%f”,&a,&b,&c);

printf(“theequation”);

if(fabs(a)<=1e-6)

printf(“isnotaquadratic\\n”);

else

{disc=b*b-4*a*c;

if(fabs(disc)<=1e-6)

printf(“hastwoequalroots:%8.4f\n”,-b/(2*a));

else

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);

}

}

}

例運(yùn)輸公司對(duì)用戶(hù)計(jì)算運(yùn)費(fèi)。路程(s)越遠(yuǎn),每公里運(yùn)費(fèi)越低。標(biāo)準(zhǔn)如下:

s<250km沒(méi)有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣設(shè)每公里每噸貨物的基本運(yùn)費(fèi)為p,貨物重為w,距離為s,折扣為d,則總運(yùn)費(fèi)f的計(jì)算公式為:f=p*w*s*(1-d)

分析:用ifelse分支方法,可以完成,但區(qū)間太多。用switch,尋找合適的表達(dá)式以及對(duì)應(yīng)的常量

分析折扣變化的規(guī)律性:折扣的“變化點(diǎn)”都是250的倍數(shù),在橫軸上加一種坐標(biāo)c,c的值為s/250。c代表250的倍數(shù)。c<1,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論