《C程序設(shè)計》課件第4章_第1頁
《C程序設(shè)計》課件第4章_第2頁
《C程序設(shè)計》課件第4章_第3頁
《C程序設(shè)計》課件第4章_第4頁
《C程序設(shè)計》課件第4章_第5頁
已閱讀5頁,還剩65頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四章分支結(jié)構(gòu)的C程序設(shè)計4.1分支結(jié)構(gòu)中的表達(dá)式4.2if語句4.3switch語句4.4程序設(shè)計舉例習(xí)題4.1分支結(jié)構(gòu)中的表達(dá)式在其他高級語言中,分支結(jié)構(gòu)中的表達(dá)式僅指關(guān)系表達(dá)式和邏輯表達(dá)式,比較簡單。C語言中要復(fù)雜得多,可以是任何有效的表達(dá)式,如算術(shù)表達(dá)式、賦值表達(dá)式、字符表達(dá)式、條件表達(dá)式,還可以是任意類型的數(shù)據(jù),如整型、實型、字符型、指針類型等。4.1.1C語言中的邏輯值

C語言中沒有專門定義邏輯類型的變量、常量和輸入、輸出格式。但對邏輯值作了更寬的規(guī)定:表達(dá)式的值非0,則表示邏輯真;表達(dá)式的值為0,則表示邏輯假。這就是說,不管什么類型的表達(dá)式,只要值不是0就表示真,如1、2、0.5、′a′,都表示真。值只有是0、′\0′(字符′\0′的ASCII值為0)才表示假。對邏輯真、假值的這種策略,使得所有類型的表達(dá)式都能在分支語句中作條件使用,允許我們編制效率極高的程序。4.1.2關(guān)系表達(dá)式

1.關(guān)系表達(dá)式的概念所謂關(guān)系表達(dá)式是指,用關(guān)系運算符將兩個表達(dá)式連接起來,進行關(guān)系運算的式子。例如,下面的關(guān)系表達(dá)式都是合法的:

a>b,a+b>c-d,(a=3)<=(b=5),′a′>=′b′,(a>b)==

(b>c)

2.關(guān)系表達(dá)式的運算結(jié)果——邏輯值(非“真”即“假”)

C語言用整數(shù)“1”表示“邏輯真”,用整數(shù)“0”表示“邏輯假”。所以,關(guān)系表達(dá)式的值,還可以參與其它種類的運算,例如算術(shù)運算、邏輯運算等。例如,假設(shè)num1=3,num2=4,num3=5,則:

(1)num1>num2的值為0。

(2)(num1>num2)!=num3的值為1。

(3)num1<num2<num3的值為1。

(4)(num1<num2)+num3的值為6,因為num1<num2的值為1,1+5=6。4.1.3邏輯表達(dá)式

1.邏輯表達(dá)式的概念關(guān)系表達(dá)式只能描述單一條件,例如“x>=0”。如果需要描述“x>=0”、同時“x<10”,就要借助于邏輯表達(dá)式了。所謂邏輯表達(dá)式是指,用邏輯運算符將一個或多個表達(dá)式連接起來,進行邏輯運算的式子。在C語言中,用邏輯表達(dá)式表示多個條件的組合。例如,(x>=0)&&(x<10)就是一個判斷數(shù)x是否大于等于0且小于10的邏輯表達(dá)式。

2.邏輯表達(dá)式的運算結(jié)果邏輯表達(dá)式的值也是一個邏輯值(非“真”即“假”)。例如:

(a>b)&&(x>y)等效于a>b&&x>y

(a==b)||(x==y)等效于a==b||x==y

(!a)||(a>b)等效于!a||a>b要根據(jù)優(yōu)先級處理數(shù)值運算、關(guān)系運算和邏輯運算,想提高某運算的級別或增加運算關(guān)系的清晰性,可以加括號。邏輯表達(dá)式求解,在值已能確定的情況下不一定求到最后。如:

(1)表達(dá)式a&&b&&c:當(dāng)a=0時,表達(dá)式的值為0,不必計算判斷b、c;當(dāng)a=1、b=0時,表達(dá)式的值為0,不必計算判斷c;只有a=1、b=1,才判斷c。

(2)表達(dá)式a||b||c:當(dāng)a=1(非0)時,表達(dá)式的值為1,不必計算判斷b、c;當(dāng)a=0時,才判斷b,如b=1,則表達(dá)式的值為1,不必計算判斷c;只有a=0、b=0,才判斷c。熟練掌握關(guān)系運算符和邏輯運算符,可以用邏輯表達(dá)式表示一個復(fù)雜的條件。例如,判斷某年y是否為閏年。y滿足二者之一為閏年:(1)y能被4整除,但不能被100整除;(2)y能被400整除。兩個條件為或(||)的關(guān)系,條件(1)內(nèi)的兩個條件為與(&&)的關(guān)系。判斷整除用求余運算%,余數(shù)為0,則能整除。表達(dá)式可寫成:(y%4==0&&y%100!=0)||y%400==0判斷非閏年,則將上述整個條件取反即可:!((y%4==0&&y%100!=0)||y%400==0)4.1.4其它形式的表達(dá)式

C語言分支的表達(dá)式比較復(fù)雜,因為它可以是任何有效的表達(dá)式。常用的還有:

1.算術(shù)表達(dá)式如if(a*b-3*c){…},以算術(shù)表達(dá)式“a*b-3*c”的值是否為真決定程序流向,而不必寫成邏輯表達(dá)式“a*b-3*c==1”的形式。

if(a){…}、if(3){…}、if(0){…}使用的都是算術(shù)表達(dá)式。如果寫成if(a==1){…}或if(a==0){…},則用的是邏輯表達(dá)式,是有冗余且潛在低效的,不是好風(fēng)格。

2.賦值表達(dá)式用賦值表達(dá)式作表達(dá)式,清晰度不高,最容易使人“上當(dāng)受騙”。例如:“inta=3,b=5;if(a=b){…}”,請問條件是否成立?有人說不成立,因為3≠5。錯了!這里“a=b”是賦值表達(dá)式,而不是“a==b”,a為5。表達(dá)式取a的值,為真。再如:“inta=3,b=0;if(a=b){…}”,請問條件是否成立?有人說不成立,因為3≠0。說條件不成立,是正確的,但理由是“a=b”是賦值表達(dá)式,賦值后a為0,表達(dá)式取a的值,故為假。

3.字符表達(dá)式如定義“charc=3;”,則if(c){…}、if(′B′){…}使用的都是字符表達(dá)式,其值同樣是0為假,非0為真。還有其它形式的表達(dá)式,如逗號表達(dá)式等,其邏輯值的取法與上述相同。4.2

if語句4.2.1if語句的簡單形式

if語句的簡單形式如下:

if(表達(dá)式)語句其中表達(dá)式不限于邏輯表達(dá)式或關(guān)系表達(dá)式,可以是各種表達(dá)式,如算術(shù)表達(dá)式等。當(dāng)表達(dá)式的值為非零時為“真”,當(dāng)表達(dá)式的值為零時為“假”。

if語句的執(zhí)行過程如圖4.1所示。圖4.1if語句執(zhí)行過程當(dāng)表達(dá)式的值為真時,執(zhí)行后面的語句,接著執(zhí)行下一語句;當(dāng)表達(dá)式的值為假時,就直接執(zhí)行下一語句。

if語句中的“語句”從語法上講必須也只能是一條語句,它可以是第三章中介紹過的各種語句。很多情況下它不止一句,當(dāng)超過一句時,必須用花括號括起來,構(gòu)成一個復(fù)合語句。例4.1

打印出不及格的成績。

#include<stdio.h>

voidmain()

{

floatscore;

scanf("%f",&score);

if(score<60.0)printf("score=%5.1f\n",score);

}運行:

68↙(輸入,不滿足條件,無輸出)再次運行:

50↙(輸入)

score=┗┛50.0(輸出)

if結(jié)構(gòu)中也可以采用復(fù)合語句。

例4.2輸入三角形的三條邊長a、b、c,若能構(gòu)成三角形,則利用海倫公式求出三角形的面積。(海倫公式:S=sqrt(l*(l-a)*(l-b)*(l-c)),其中l(wèi)=(a+b+c)/2。

#include<stdio.h>

#include<math.h>

voidmain()

{floata,b,c,l,S;

printf("Inputa,b,c:");

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

if(a<=0||b<=0||c<=0)

{

printf("Illegalinput!\n");

return;

}

if(a+b>c&&a+c>b&&b+c>a)

{

l=(a+b+c)/2;

S=sqrt(l*(l-a)*(l-b)*(l-c));/*sqrt是庫函數(shù),其功能是求平方根*/

printf("areaS=%.2f\n",S);

}

}運行結(jié)果:

Inputa,b,c:345↙ areaS=6.004.2.2if~else結(jié)構(gòu)

1.if~else結(jié)構(gòu)的形式

if~else結(jié)構(gòu)是if語句的基本形式,形式如下:

if(表達(dá)式)語句1

else語句2其執(zhí)行過程如圖4.2所示。圖4.2if~else語句執(zhí)行過程當(dāng)表達(dá)式的結(jié)果為真(非零)時,執(zhí)行語句1,執(zhí)行完后跳到下一語句;當(dāng)表達(dá)式的結(jié)果為假(零)時,執(zhí)行語句2,執(zhí)行完后順序執(zhí)行下一語句。此屬二中選一的情況,必選其一,只選其一。其中語句1和語句2可以是單個語句,也可以是復(fù)合語句(即用花括號括起來的一組語句)。復(fù)合語句中又可以含有if語句,這就是后面要講的if嵌套。子句else是任選的,當(dāng)沒有else子句時,就變成第一種形式了。在書寫格式上語句1、elsc、語句2都可以另起一行,但仍看做是在同一個if語句內(nèi)。

例4.3

打印成績≥60分為“Pass”,否則為“Fail”。

解我們可以使用兩種方法編程。方法一:用兩個簡單的if語句實現(xiàn)。

#inchde<stdio.h>

voidmain()

{

floatscore;

scanf("%f",&score);

if(score<60.0)printf("score=%5.1f---Fail\n",score);

if(score>=60.0)printf("score=%5.1f---Pass\n",score);

}運行:

50↙

score=┗┛50.0---Fail再次運行:

80↙

score=┗┛80.0---Pass在第二個if語句中,if(score>=60.0)是不能缺少的,否則不管score是否小于60,都將打印出第二行的結(jié)果。方法二:用if~else語句實現(xiàn)。

#include<stdio.h>

voidmain()

{

floatscore;

scanf("%f",&score);

if(score<60.0)printf("score=%5.1f---Fail\n",score);

elseprintf("score=%5.1f---Pass\n",score);

}運行:

50↙

score=┗┛50.0---Fail再次運行:

80↙

score=┗┛80.0---Pass從例4.3中可看出,if~else結(jié)構(gòu)較兩個if語句簡單、清晰,也不易出錯。上例if語句和else語句后都有一個分號,該分號是C語言語句語法所要求的。if語句后的分號并不是表示if結(jié)構(gòu)已結(jié)束,而是其后的printf語句要求的分號;else語句后的分號也是其后的printf語句要求的,同時表示此if語句到此結(jié)束,而不必連用兩個分號來表示if~else結(jié)構(gòu)的結(jié)束。

2.條件運算符的使用當(dāng)if~else結(jié)構(gòu)中的語句是表達(dá)式語句時,就可以使用條件運算符“?:”,即下列if~else語句:

if(表達(dá)式1)表達(dá)式2;else表達(dá)式3;用條件運算符寫成通用形式即為:表達(dá)式1?表達(dá)式2:表達(dá)式3說明:

(1)條件運算符的執(zhí)行順序:先解表達(dá)式1,若為非0(真),則求解表達(dá)式2,此時表達(dá)式2的值就作為整個條件表達(dá)式的值。若表達(dá)式1的值為0(假),則求解表達(dá)式3,此時表達(dá)式3的值就作為整個條件表達(dá)式的值。

max=(a>b)?a:b執(zhí)行結(jié)果就是將條件表達(dá)式的值賦給max。也就是將a和b兩者中大者賦給max。

(2)條件運算符優(yōu)先于賦值運算符,因此上面賦值表達(dá)式的求解過程是先求解條件表達(dá)式,再將它的值賦給max。條件運算符的優(yōu)先級比關(guān)系運算符和算術(shù)運算符都低。因此,

max=(a>b)?a:b等效于max=a>b?a:b

a>b?a:b+1等效于a>b?a:(b+1)

(3)條件運算符的結(jié)合方向為“自右向左”。如果有以下條件表達(dá)式:

a>b?a:c>d?c:d相當(dāng)于

a>b?a:(c>d?c:d)如果a=1,b=2,c=3,d=4,則條件表達(dá)式的值為4。由于函數(shù)調(diào)用也返回一個值,因此表達(dá)式2,3也可出現(xiàn)函數(shù)的調(diào)用。如以下形式:表達(dá)式?函數(shù)調(diào)用1:函數(shù)調(diào)用2

例4.4

輸入x的值,當(dāng)x>0時調(diào)用sqrt(x),否則調(diào)用fabs(x)。程序:

#include<math.h>

#include<stdio.h>

voidmain()

{

floatx,y;

scanf("%f",&x);

y=x>0?sqrt(x):fabs(x);/*fabs是庫函數(shù),其功能是取絕對值*/

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

}

運行:

9.0↙

x=9.000000,y=3.000000再次運行:-9.0↙

x=-9.000000,y=9.000000本例中使用了數(shù)學(xué)函數(shù)sqrt(開平方根)和fabs(求絕對值),因此在程序頭部要加上文件包含命令#include<math.h>。這兩個函數(shù)的函數(shù)值和自變量均為雙精度類型,因此x最好定義成雙精度型。取整型數(shù)的絕對值可使用abs(x)函數(shù)。這些可查附錄二的庫函數(shù)表。例4.5

打印a,b兩個數(shù)中較大的一個數(shù)。方法一:用if~else結(jié)構(gòu)實現(xiàn)。

#include<stdio.h>

voidmain()

{

inta,b;

scanf("%d,%d",&a,&b);

if(a>b)printf("max=%d\n",a);

elseprintf("max=%d\n",b);

}方法二:用條件運算符實現(xiàn)。

#include<stdio.h>

voidmain()

{

inta,b;

scanf("%d,%d",&a,&b);

printf("max=%d\n",a>b?a:b);

}以上兩種方法運行結(jié)果完全一致,可選用。

3.if語句的嵌套

if語句的嵌套是if~else結(jié)構(gòu)中的語句1或(和)語句2,又是一個if~else結(jié)構(gòu)。我們直接由例子來說明。

例4.6

輸入一個學(xué)生成績,當(dāng)成績≥90時,打印“VeryGood”;當(dāng)80≤成績<90時,打印“Good”;當(dāng)60≤成績<80時,打印“Pass”;當(dāng)成績<60時,打印“Fail”。

#include<stdio.h>

voidmain()

{

floatscore;

scanf("%f",&score);

if(score>=80)

if(score>=90)printf("VeryGood\n");

elseprintf("Good\n");

elseif(score>=60)printf("Pass\n");

elseprintf("Fail\n");

}運行:

85↙

Good嵌套的if語句很容易出錯,原因在于不知道哪個else與哪個if配對。C語言提供了一個簡單規(guī)則:從內(nèi)層開始,else總是與它上面最近的(未曾配對的)if配對。例如語句段:

if(x)

if(y)printf("A");

elseprintf("B");其中else語句是與if(y)相匹配的。如果else語句與if(x)相匹配,則if(y)子句必須加花括號寫成:

if(x)

{if(y)printf("A");}

elseprintf("B");此時else語句不知道if(y)語句,因為它隱藏在一個復(fù)合語句中。從本質(zhì)上講,if(y)和else不在同一個塊程序中。為了能區(qū)分嵌套的層次,我們常用縮進的方式來表示不同的層次,這樣寫程序便于閱讀,便于查錯。我們要求在程序書寫時采用按層縮進的格式,使同一層在同一起始位置。嵌套最多可達(dá)15層。當(dāng)一個if~else結(jié)構(gòu)嵌在if子句中,即語句1又是一個if~else結(jié)構(gòu)時,非常容易出錯,而嵌在else子句中,即語句2是if~else結(jié)構(gòu)時,則不易出錯。故建議初學(xué)者在寫if嵌套語句時,盡量寫成:

if(表達(dá)式1)語句1

elseif(表達(dá)式2)…這就是if語句的第三種常用形式,即elseif結(jié)構(gòu)。4.2.3

elseif結(jié)構(gòu)

elseif結(jié)構(gòu)的形式如下:

if(表達(dá)式1)語句1

elseif(表達(dá)式2)語句2

elseif(表達(dá)式3)語句3

elseif(表達(dá)式n)語句n

else語句n+1其中語句1~語句n+1的解釋同前。表達(dá)式1到n的值應(yīng)相互獨立、無重疊。其執(zhí)行過程如圖4.3所示。圖4.3elseif結(jié)構(gòu)的執(zhí)行過程該結(jié)構(gòu)的執(zhí)行過程是按從上到下的次序逐個進行判斷的,一旦發(fā)現(xiàn)條件滿足時(表達(dá)式值為非零)就執(zhí)行與它有關(guān)的語句,并跳過其它剩余的語句結(jié)束本if語句,若逐一判斷卻沒有一個條件被滿足,則執(zhí)行最后一個else語句。這個最后else語句常起著“缺省條件”的作用。如果沒有最后的else語句,則其它條件都不滿足時,什么也不執(zhí)行。此屬多中選一的情況,必選其一,只選其一。從if(表達(dá)式1)到語句n+1,不管n多大,只算一個語句。無論執(zhí)行的是哪個語句,執(zhí)行完都轉(zhuǎn)到elseif下面的語句執(zhí)行。不難看出,當(dāng)n=1時,就變成了ifelse形式了。

例4.7

將例4.6用elseif結(jié)構(gòu)來實現(xiàn)。程序:

#include<stdio.h>

voidmain()

{

floatscore;

scanf("%f",&score);

if(score>=90)printf("VeryGood\n");

elseif(score>=80)printf("Good\n");

elseif(score>=60)printf("Pass\n");

elseprintf("Fail\n");

}

運行:

58↙

Fail說明:

(1)在elseif結(jié)構(gòu)中,if語句…elseif語句…else語句屬于同一程序模塊。程序每運行一次,僅有一個分支的語句能得到執(zhí)行。

(2)各個表達(dá)式所表示的條件必須是互相排除的,也就是說,只有條件1(表達(dá)式1)不滿足時才會判斷條件2,只有條件2也不滿足時才會判斷條件3,其余依次類推,只有所有條件都不滿足時才執(zhí)行最后的else語句。例4.7的程序也可寫成:

#include<stdio.h>

voidmain()

{

floatscore;

Printf("Inputscore:"),

scanf("%f",&score);

if(score<60)printf("Fail\n");

elseif(score<80)printf("Pass\n");

elseif(score<90)printf("Good\n");

elseprintf("VeryGood\n");

}

如寫成以下形式就錯了:

#include<stdio.h>

voidmain()

{

floatscore;

printf("Inputscore:");

scanf("%f",&score);

if(score<60)printf("Fail\n");

elseif(score>=60)printf("Pass\n");

elseif(score>=80)printf("Good\n");

elseprintf("VeryGood\n");

}因為在elseif(score>=60)這個條件中包含了score>=80,也包含了score>=90,所以后兩個語句再也沒有機會執(zhí)行了。4.3

switch語句

if語句和if~else結(jié)構(gòu)常解決二分支問題,if結(jié)構(gòu)的嵌套和elseif結(jié)構(gòu)可解決多分支的問題。此外,C語言還提供一種用于多分支選擇的switch語句,又稱開關(guān)語句。表達(dá)式的取值有特點、有規(guī)律,易于統(tǒng)一表示。實際問題如:按成績分類、年齡分類、數(shù)學(xué)函數(shù)按定義域分類、菜單選項等。這類問題可用if語句或其嵌套解決,但往往顯得冗長,或嵌套層數(shù)多,可讀性差。

switch語句的形式:

switch(表達(dá)式)

{

case常量1:語句段1;[break]

case常量2:語句段2;[break]

default:語句段n

}

switch語句的執(zhí)行過程如圖4.4所示。圖4.4switch語句的執(zhí)行過程

switch語句先計算表達(dá)式的值,然后同多個case語句后的常量比較,找到相等的case常量則執(zhí)行該常量冒號后的語句段,并從這個入口一直執(zhí)行下面所有冒號后的語句,如果遇到break語句則跳出switch結(jié)構(gòu)。如果沒有break語句,則不再判斷后面case后的條件,直接執(zhí)行下面所有case后的語句,直到碰到break語句或switch語句結(jié)束。如果switch語句后表達(dá)式的值找不到匹配的case常量,就執(zhí)行default后面的語句段直到結(jié)束。default是任選項,如果沒有該語句,則在所有配對都失敗時,什么也不執(zhí)行。說明:

(1)switch后面的表達(dá)式可以是整型、字符型、枚舉型。

(2)若語句1~語句n中存在break語句,則程序執(zhí)行到break時會跳出switch語句,執(zhí)行其后的語句n+1。

(3)每個case分支只是一個入口,若無break語句,則一直執(zhí)行其后所有case后的語句,直至switch語句的結(jié)束處。因此,若希望只執(zhí)行一個開關(guān),則必須在case后的語句中加break語句。

(4)每個case分支后也可有多條語句,但不必用{},這一點與之前的if語句、之后的while和for語句不同。

(5)switch語句可以允許有257個case常量,但同一級的case常量不能有相同的值。

(6)switch語句允許嵌套,即在某一case常量后的語句段中又包含一個switch語句,此時內(nèi)、外層的case語句可以有相同的常量值。

(7)當(dāng)若干分支需要執(zhí)行相同操作時,可利用空語句,將幾個case分支寫在一起,使多個case分支共用一組語句。

(8)switch語句非常適合于菜單的編程,如下例。

例4.8

在顯示器上顯示一個菜單程序的模型。程序:

#include<conio.h>

#include<stdio.h>

voidmain()

{

voiddummy();

charch;

printf("1.輸入記錄\n");

printf("2.記錄列表\n");

printf("3.刪除記錄\n");

printf("4.修改記錄\n");

printf("請輸入選擇:\n");

ch=getche();

switch(ch)

{

case′1′:printf("輸入記錄\n");

dummy();break;

case′2′:printf("記錄列表\n");

dummy();break;

case′3′:printf("刪除記錄\n");

dummy();break;

case′4′:printf("修改記錄\n");

dummy();break;

default:printf("選擇錯!\n");

}

}

voidfun1(){}

voidfun2(){}

voidfun3(){}

voidfun4(){}

運行:

1.輸入記錄

2.記錄列表

3.刪除記錄

4.修改記錄請輸入選擇(1~4):↙

1輸入記錄說明:程序運行后,當(dāng)執(zhí)行到ch=getche()時,屏幕停留在此,等待用戶鍵入字符。當(dāng)我們從鍵盤鍵入字符“1”后,開始執(zhí)行“case′1′:”后的語句段。程序中的fun1、fun2、fun3和fun4四個函數(shù)分別表示在輸入相應(yīng)選項時將執(zhí)行的函數(shù),為簡化程序,我們在該例中將這四個函數(shù)定義為空函數(shù),讀者可在學(xué)習(xí)了函數(shù)的相關(guān)知識后補充完善。程序前面的5個printf語句用于顯示提示信息即菜單,switch語句進行判斷,case后的常量必須是字符常量。當(dāng)然′1′可以寫成49,但若寫成1則匹配不上,所以case后的常量不能是1,2,3,4。由于在4個分支中只執(zhí)行1個分支,因此每個case結(jié)束都必須有break語句跳出switch語句。當(dāng)ch與′1′、′2′、′3′、′4′都不匹配時,就執(zhí)行default語句并結(jié)束switch語句。4.4程序設(shè)計舉例例4.9編寫一個可由用戶鍵入簡單表達(dá)式的程序,形式如下:

numberoperatornumber該程序要計算該表達(dá)式并以兩位小數(shù)顯示結(jié)果。我們要識別的運算符operator為加、減、乘、除。程序:

#include<stdio.h>

voidmain()

{

floatvalue1,value2;

charoperator;

printf("Inputyourexpression:\n");

scanf("%f%c%f",&value1,&operator,&value2);

if(operator==′+′)

printf("%.2f\n",value1+value2);

elseif(operator==′-′)

printf("%.2f\n",value1-value2);

elseif(operator==′*′)

printf("%.2f\n",value1*value2);

elseif(operator==′/′)

if(value2==0.0)

printf("Divisionbyzero.\n");

esle

printf("%.2f\n",value1/value2);

else

printf("Unknownoperator.\n");

}運行:

Inputyourexpression:

123.5+59.3↙

182.80再次運行:

Inputyourexpression:

198.7/0↙

Divisionbyzero.再次運行:

Inputyourexpression:

125$28↙

Unknownoperator.例4.10用switch語句改寫例4.9。

#include<stdio.h>

voidmain()

{

floatvalue1,value2;

charoperator;

printf("Inputyourexpression:\n");

scanf("%f%c%f",&value1,&operator,&value2);

switch(operator)

{

case′+′:printf("%.2f\n",value1+value2);

break;

case′-′:printf("%.2f\n",value1-value2);

break;

case′*′:printf("%.2f\n",value1*value2);

break;

case′/′:if(value2==0.0)

printf("Divisionbyzero.\n");

else

printf("%.2f\n",value1/value2);

break;

default:printf("Unknownoperator.\n");

}

}本程序運行結(jié)果與例4.9的結(jié)果完全一樣。

例4.11輸入一個字符,請判斷是字母、數(shù)字還是特殊字符。程序:

#include<stdio.h>

#include<conio.h>

voidmain()

{

charch;

printf("請輸入一個字符:");/*在雙引號內(nèi)的字符串中,可以出現(xiàn)漢字,不影響程序運行*/

ch=getche();

if((ch>=′a′&&ch<=′z′)||(ch>=′A′&&ch<=′Z′))

printf("\n它是一個字母!\n");/*注意前后的\n,養(yǎng)成良好的編輯習(xí)慣*/

elseif(ch>=′0′&&ch<=′9′)

printf("\n它是一個數(shù)字!\n");

esle

printf("\n它是一個特殊字符!\n");

}運行:請輸入一個字符:A它是一個字母!再次運行:請輸入一個字符:+它是一個特殊字符!說明:本程序能鍵入可見的ASCII字符有95個,由于需羅列的情況太多而不適合用switch語句。例4.12假設(shè)獎金稅率如下(a代表獎金,r代表稅率): a<500部分 r=0

500≤a<1000部分 r=5% 1000≤a<2000部分 r=8% 2000≤a<3000部分 r=10% a≥3000部分 r=15

溫馨提示

  • 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

提交評論