計算機程序設計基礎第三章_第1頁
計算機程序設計基礎第三章_第2頁
計算機程序設計基礎第三章_第3頁
計算機程序設計基礎第三章_第4頁
計算機程序設計基礎第三章_第5頁
已閱讀5頁,還剩236頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

敬學目標

?掌握格式化輸出

?掌握關系運算符與關系表達式

?掌握邏輯運算符與邏輯表達式

?掌握順序結構

?掌握選擇結構

?掌握循環結構

函數是執行一項任務的代碼塊。

自定義函數:自己決定其任務的函數。

內置函數:庫文件中已定義好功能的函

數;只要知道該函數包含在哪個庫中,可

直接調用。

C++內置數學函數的定義都在cmath庫文件中,

使用內置數學函數時,要加文件包含命令:

#include<cmath>

1、塞函數和平方根函數

幕函數:pow(x,y)

y=pow(3,4);y=pow(l.7,2.3);

平方根函數:sqrt(x)

y=sqrt(9);y=sqrt(3.3);A

頁.休息

例3.2、編程計算

3x7y3+7x4y5+x2y6-7

Z=-----------------的值.

x5y3+5x3y4+2xy5+3

程序:

ttinclude<cmath>

ttinclude<iostream>

usingnamespacestd;

——去

voidmain()

{doublex,y,z;

/z

cout<<inputx,y:〃〈〈endl;

cin>>x>>y;

z=(3*pow(x,7)*pow(y,3)+7*pow(x,4)\

*pow(y,5)+x*x*pow(y,6)-7)/\

(pow(x,5)*pow(y,3)+2*x*pow(y,5)\

+5*pow(x,3)*pow(y,4)+3);

cout<</zz=//<<z<<endl;

例3.3、根據三邊長求三角形面積

可根據海倫公式可求結果:

假設三角形三邊長分別為a、b、c

三角形面積為area,則

海倫公生______________

area=Vs(s-a)(s-b)(s-c)

其中:s=(a+b+c)/2

簿一頁.[休息

程序:

ttinclude<cmath>

ttinclude<iostream>

usingnamespacestd;

voidmain()

{doublea,b,c,s,area;

cout〈〈“pleaseinputa,b,c=?〃〈〈endl;

cin>>a>>b>>c;

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

area=sqrt(s*(s-a)*(s-b)*(s-c));

cout<<“area=〃<<area<<endl;

2、余弦、正弦和正切函數

余弦函數:cos(x)

正弦函數:sin(x)

正切函數:tan(x)

x的單位為弧度

例3.4、編程求z=3sinx-2cosy的值。

程序:

簿一頁.[休息

ttinclude<cmath>

ttinclude<iostream>

usingnamespacestd;

voidmain()

{doublex,y,z;

constdoublePI=3.14159;

cout〈〈〃輸入x和y的值(度):z/<<endl;

cin>>x>>y;

x=x*PI/180;y=y*PI/180;

z=3*sin(x)-2*cos(y);

cout<<z/z=//<<z<<endl;

簿一頁.[休息

3、其它常用數學函數

求絕對值:abs(x)

指數函數(d):exp(x)

自然對數(Inx):log(x)

常用對數(lo$ox):loglO(x)

、格式化數字的輸出

?觀察程序運行結果

?#include<iostream>

?#include<string>

?usingnamespacestd;

?voidmain()

?{cout?1234.56?endl;

?cout?1234567.89?endl;

?)

、格式化數字的輸出

普通情況下小數點前多于6位時以E符號顯示,否則

以定點符號(小數點法)顯示。

fixed:控制以定點符號顯示數據輸出

用法:cout<<fixed;

cout.precision(p):指明有效位數p位

例如:

cout.precision(5):顯示5位有效數

cout.precision(0):回到正常方式(四舍五入,

取整)

兩個共用時,cout.precision(p)表示小數點后的

位數。

?#include<iostream>

?usingnamespacestd;

?voidmain()

?{doublef;

?coutvv”請輸入工資:”vvendl;

?cin?f;

?cout?fixed;

■//cout.precision(2);

?coutvv"工資為"vvfvvendl;

?}

例3.7、

#include<iostream>

usingnamespacestd;

voidmain()

{doublea=12345678.87654321;

doubleb=87654321.12345678;

cout.precision(7);

cout<<fixed;

cout<<z/a=//<<a<<endl;

cout<<z/b=//<<b<<endl;

例3.2編程實現數材例3?2

?#include<iostream>

?#include<iomanip>

?usingnamespacestd;

?voidmain()

?{floatscore1,score2,score3,average;

?COUtVV”請輸入三門課程的考試成

績:“vvendl;

?cin?score1?score2?score3;

?average=(score1+score2+score3)/3

前一五休息

例3.2編程實現數材例3?2

?coutvvsetw(10)vv"科目"vvsetw(12)vv“成績"vvendl;

?cout?setw(10)?"^i^,,?setw(12)?score1?endl;

?cout?setw(10)?"^JT^i+"?setw(12)?score2?endl;

?cout?setw(10)?,,^^W5l"?setw(12)?score3?endl;

?cout?fixed;

?cout.precision(2);

?coutvv”該生的V均成績為:"vvaveragevvendl;

?)

前一五休息

cout.width(p):設置緊跟其后的

第一個輸出項所占寬度為p位。

例3.8、

#include<iostream>

#include<string>

usingnamespacestd;

voidmain()

{stringstrl=〃12345〃,str2二〃abcdefgh”;

cout.width(10);

cout<<strl<<endl;cout<<str2<<endl;

簿一頁.[休息

setw(p):設置字段寬度。

(只對其后輸出的一個數據生效)

例3.~

#include<iostream>

#include<iomanip>〃用setw要包含此文件

#include<string>

usingnamespacestd;

voidmain()

{stringstrl=〃12345〃,str2二〃abcdefgh”;

cout<<setw(10)<<strl<<endl;

cout<<str2<<endl;

簿一頁.[休息

setw(n):設置數據輸出時所占最小位置寬度n

?#include<iostream>

?#include<iomanip>

?usingnamespacestd;

?voidmain()

?{double

salary[]={1000,600.34,812.5,1234.2,3345.1};

?char*names[]={“王群平”「歐陽居成“J張可”「劉

家星二'朱江”};

?for(inti=0;i<5;i++)

?cout?setiosflags(ios::left)?setw(8)<<names

l]<<resetiosflags(ios::left)?setw(10)?salary

1]?endl;}

前一五休息

第三章基本程序設計

171順序結構程庠設計

例3.1、“雞兔同籠問題”:在一個籠子

里養著雞與兔,但不知其中雞有多少只,兔

有多少只。只知道雞和兔的總數是a,雞與兔

的總腳數是b,求雞與兔各有多少只。

簿一頁.[休息

思路分析:

首先從題目本身開始,找出解決問題的基本

思路。每只雞有兩只腳,每只兔有四只腳。

假設有X只雞和y只兔,則根據已知條件可

列出如下方程組:

x+y=a

2x+4y=b

對該方程組做進一步的轉換可得:

(y=(b-2a)i2去舞

^=(40-3)/2卡”

滸?叫?休息,

#include<iostream>

usingnamespacestd;

voidmain

{inta,b,x,y;

cout<〈〃請輸入雞和兔的總數:〃;

cin>>a;

cout〈〈〃請輸入雞和兔的總腳數:〃;

cin>>b;

x=(4*a—b)/2;

y=(b-2*a)/2;

cout〈〈〃雞的數量為:z,<<x<<endl;

cout〈〈〃兔的數量為:,?<<y<<endl;

簿一頁.[休息

?定義與聲明語句:數據類型聲明、常量

聲明、函數定義和聲明

?表達式語句:由表達式加分號構成

?輸入/輸出流語句:cincout

?復合語句:用{}將若干執行語句組成一

個整體(在語法上作為一條語句處理)

?空語句:由獨立分號構成,不產生任何

操作。

簿一頁.[休息

?輸入一字符并找出該字符的前趨字符和后繼字

符,輸出這三個字符和其對應的ASCII碼值并對

charx,y,z;

coutvv"請輸入字符"vvendl;

cin?y;

x=y-l;z=y+l;

cout?setw(4)?x?!\n<<setw(4)?yvv"Jvv

setw(4)?z?endl;

cout?setw(4)?int(x)?!\n?setw(4)?

int(y)?!\n?setw(4)?int(z)?endl;

晌休息,

§3.2選擇結構程序設計

選擇結構是根據給定條件的判斷結果決

定程序執行的走向,也稱判斷結構。

如:

rXXNO

計算絕對值y=\

'I舞

簿一頁.[休息

§3.2選擇結構程序設計

三、關系運算符與關系表達式

選擇結構中的“條件P”實際上是一個表達式,程序根據此

表達式的值是“非0”(條件成立)還是“0”(條件不成立)

來決定流向.構成條件的表達式可以是除了逗號表達式之外的

C++表達式(賦值表達式當且僅當賦值表達式為非零時,條件為

真,否則為假)。

1、關系運算符與關系表達式

關系運算是比較簡單的一種邏輯運算,優先次序為:

〈(小于)〈二(小于等于)

>(大于)>=(小于等于)

優先級相同(高)

二二(等于)!二(不等于)

優先級相同(低)

三、關系運算符與關系表達式

1、關系表達式:用關系運算符將兩個表達式(可以是字面

值、算術、關系、邏輯、賦值、字符表達式)連接起來的式子。

其結果類型為bool,值只能為true或false。

關系運算:即比較運算,將兩個值進行比較,判斷比較的

結果是否符合給定的條件。如果比較運算的結果成立則表達式取

值true(1),否則取值false(0)o

例如:a>b

c〈二a+b

x+y=3

3〈二3

休息】

?2、構成關系運算符的兩字符間不能

加空格

?3、==與=的區別

?4、兩個浮點數之間一般不用==來判

斷相等

?5、關系運算符(比較運算符)的優先

級低于算術運算符,高于賦值運算符。

一微

?若A=3,B=2,C=1,求下列表達式的值

?A>B1

?(A>B)==C1(不加括號也可)

?B+C<Ao

?若D=A>BD=1

若F=A>B>CF=0(A>B為1,1>C為0)

前?頁.休息

2.邏輯運算符與邏輯表達式

C++中有三種邏輯運算符:

!(邏輯非)&&(邏輯與)(邏輯或)

高-------------------------低

邏輯非“!”是一單目運算符,和其它單目運算符一

樣,優先級高于包括算術運算符在內的所有雙目運算符

(和++、--平級)O

邏輯與和邏輯或運算符的優先級低于所有的若卻

算符,高于賦值運算符。點聲

*▽

邏輯運算真值表

AB!aa&&ba||b

truetruefalsetruetrue

truefalsefalsefalsetrue

falsetruetruefalsetrue

falsefalsetruefalsefalse

簿一頁.[休息

邏輯表達式:亮邏輯運算符連接表達式構成,其結

果類型為bool,值為true或false。

原則上,邏輯運算符的操作數應為bool型數據,但

同時允許是數值型數據,如果操作數是其它類型,編譯

系統會自動將非0數據轉換為true,0轉換為false。

例如:

40&&-1true

40&&0false

頁.休息*

?含&&和II的表達式在編譯時,即從左

到右的運算中,結果一經確定就不向

下運算下去

?如A&&BA=0

*A||A=1

算術表達式的值可以作為數值,也可

以作為邏輯值,作為邏輯值使用時,非0代

表邏輯真(true),而0代表邏輯假(false).

如:

若A=5,B=0,

!AB&&A

if(x)//x為數值

if(10&&-5.6)cout<<“true”

簿一頁.[休息

若B=0,計算!B<2||5&&5<=5

?第一步1<2||5&&5<=5

?第二步1||5&&5<=5

?第三步1||5&a1

?第四步1||1

?第五步1

簿一頁.[休息

設A=3,B=4,C=5,寫出下列邏輯表達式的值

?!(A>B)&&iC||1

!(3>4)&&!C||1

1

設A=3,B=4,C=5,寫出下列邏輯表達式的值

?!(A+B)+C-1&&B+C/2

!(3+4)+C-1&&B+C/2

0+C-1&&B+C;2

0+5-1&&B+2

4&&6

1

?判斷鍵盤接收的字符是方是

chv=,z,&&ch>=6

?判斷鍵盤接收的字符是否更字母—

chv='Z'&&ch>=6A51|ch<=6z5&&ch>=‘a'

?判斷鍵盤接收的數字是否在0至9之間

x<=9&&x>=0

?判斷鍵盤接收的字符是否在0至9之間

chv=,9,&&ch>=,(T搟/

簿一頁.[休息

了解:含&&和II的表達式在編譯時,即從左到右

的運算中,結果一經確定就不向下運算下去

#include<iostream>#include<iostream>

usingnamespacestd;usingnamespacestd;

voidmain()voidmain()

{inta=5,b=10,c=1,d,e;{inta=5,b=10,c=0,d,e;

d=c&&a++;d=c&&a++;

e=c||b++;e=c||b++;

cout?"a=',?a?endl;cout?,,a="?a?endl;

cout?,,b="?b<<endl;cout?"b=,,?b?endl;

cout?,,d="?d?endl;cout?"d=,,?d?endl;

cout?,,e="<<e?endl;cout?,,e=,,<<e?endl;

例3.14、分析程序運行結果

#include<iostream>

usingnamespacestd;

voidmain()

{intn,m,a=8,b=5;

n=a<b;m=a>b;

cout<<//n=//<<n<<,\t'<<//m=//<<m<<endl;

n=(a>b)&&(100>90);m=(a<b)&&(100>90);

cout<<//n=//<<n<<,\t'<<//m=//<<m<<endl;

知識回顧:

魂擇結構3稱楚取結構;

選擇結構的框圖表示:

■-----2fc

b寅句移過=

1ifC春運區>

i&G后刑

J

一____不見產

^Sc^z,~I

語句j

田旬中劉審以至一^個言句,

也E以是盤^吉go

執行過程:1、計算表達式的值

2、若值為真,執行語句序列(再執行后續工

語句)否則,直接執行后續語句

?lf(x>0)cout?x?endl;

?cout?u***,,?endl;

復合語句

語句1;

語句2;

語句n;

}

如:

?if(x>0){cout?x;cout?endl;}

?cout?u***,,?endl;

例3.10、求x的絕對值的框圖:

程序:

#include<iostream>

usingnamespacestd;

voidmain()

{

doublex;

cout<</zInputx:〃;

cin>>x;

if(x<0)

X二一X;

cout<<x<<endl;

例3.11、從鍵盤輸入兩個實數x和y,如果y的值大于x則

交換x,y的值并輸出x,v,編程畫出其框圖。

正確框圖:

/輸Tx,

yesI

t=x

x=y

__________

--------------

/輸"x,y/

——矗

刖—,頁?[休息M

#include<iostream>

usingnamespacestd;

voidmain()

{doublex,y,t;

cout<<〃inputxandy:

cin>>x>>y;

if(y>x)

t二x;

x二y;

y=t;

cout<<x<<,,?<<y<<endl;

*

正確程序:

#include<iostream>

usingnamespacestd;

voidmain()

{doublex,y,t;

cout<<zzinputxandy:〃;

cin>>x>>y;

if(y>x)

{t=x;x二y;y=t;}

cout<<x<<,,,<<y<<endl;

簿一頁.[休息

二兩路分支

十,兩路分支

,語句格式:

if<表達式>

語句序列1

else

語句殍歹,J2

港句存列11咨旬方列2

10-3*xx三8

例3.12、求y=(6*X-5

x<8的值

#include<iostream>

usingnamespacestd;

voidmain()

{doublex,y;cin>>x;

if(x<8.0)

y=6.0*x-5.0;

else

y=10.0-3*x;

cout<</zx=/z<<x<<,\t’<</zy=//<<y<<endl;

)//輸入89結果:x=89y=

前?頁■休息1

例3.13、求一元二次方程ax2+bx+c=0的

根,其中系數a,b,c為實數,由鍵盤輸入。

#include<iostream>

#include<cmath>

usingnamespacestd;

voidmain()

{doublea,b,c,delta,p,q;

/z=?〃?

cout<<pleaseintputa,b,c?7

cin>>a>>b>>c;

=b*b-4*a*c;

p=-b/(2*a);

q=sqrt(abs(delta))/(2*a);

if(delta>=0)

{cout<<z/xl=z/<<p+q<<endl;

cout〈〈〃x2=z/<<p-q<<endl;

}

else

{cout<<z/xl=z/?p?z/+j,,?q?endl;

z/z//z

cout〈〈〃x2=?p?-j?q?endl;小?

簿一頁.[休息

求輸入數的以10為底的對數值

?doublex;

?COUtVV“請輸入數值:”;

?cin?x;

?if(x>0)coutvv“對數為“?log10(x)?endl;

?elsecout?uerror,5?endl;

課皺練習2

?定義變量f,a,b,c并分別賦初值1,3,2,1o

若f=1且a>b>c,輸出OK,否則輸出wrong。

#include"iostream”

usingnamespacestd;

voidmain()

能否省略?

{intf=l9a=39b=29c=l;

if(f==l&&(a>b&&b>c))

cout?"ok"vVendl;

elsecout?f1wrong11?endl;

例3.16、輸入一個年份,判斷是否閏年

閏年條件

(1)能被4整除,但不能被100整除的年份

(2)能被100整除,又能被400整除的年份

分析:

條件⑴中能被4整除可表示為:x%4=0

不能被100整除可表示為:x%100!二0

同時滿足則條件⑴表示為:

(x%4==0)&&(x%100!=0)4

條件⑵中能被100整除可表示為:x%100=0

能被400整除可表示為:x%400==0

同時滿足則條件⑵表示為:

(x%100==0)&&(x%400==0)

因能被400整除的數必能被100整除,所以條件⑵可

改為:

(x%400==0)

而總表達式則為⑴、⑵的邏輯或.微冷

簿一頁.[休息

ttinclude<iostream>

usingnamespacestd;

voidmain(void)

{intyear;boolIsLeapYear;

cout<</zEnertheyear:z/;cin>>year;

IsLeapYear二((year%4==0&&year%100!=0)\若結果是輸

I|■出非閏年?

if(IsLeapYear)

cout<<year<<z/isaleapyear/z<<endl;

else、

cout<<year<<zzisnotaleapyearz/<<endl*/

例3.17、編程計算函數

L10其它

y二y的值

.-5.7x二8

程序一:

<Xo^tream>

usingnamespacestd;

voidmain(void)

{doublex,y;

/z〃

cout<<InputX二;

cin>>x;

if(x==8)y=-5.7;

elsey=10.0;

cout<<//x=//?x<<//,y=//<<y<<endl;

程序二:

ftinclude<iostream>

usingnamespacestd;

voidmain(void)

{doublex,y;

cout<</zInputx=〃;

cin>>x;

if(x-8)y=10.0;

elsey=-5.7;

cout<〈〃x=〃y=//<<y<<endl;

有些數學上的數值區間,不能直接用在C++的

條件表達式中,否則會得到錯誤的結果。

例3.18、編程計算函數

rx2+l.5l<x<10

y=

8.5其它卡

簿一頁.[休息

#include<iostream>

usingnamespacestd;

voidmain()

{doublex,y;

z/

cout<<Inputx二〃;

cin>>x;

if(l<x<=10)

y=x*x+l.5;

else

y=8.5;去A

z/////

cout<<x=<<x<<,y=〃<Xy〈〈endl;

新-?頁?[休息?*

X在(1,10]區間,在C++中若直接寫成“l〈x〈二10",

表面上看表達式沒有錯誤,但按照關系運算符從左到右

的運算原則:

當x的值在(1,10]區間時,先運算“l〈x”的值為1,

再運算“1〈二10”得整個表達式的值為1(真),此結果正

確。

但當x的值不在(1,10]區間時,同樣得整個表達式的

值為1(真),結果不正確。

此表達式在C++中的正確寫法應該是:*次

_____l<x&&x<=10

正確程序:

#include<iostream>

usingnamespacestd;

voidmain()

{doublex,y;

cout<</zInputx--〃■

cin>>x;

if(l<x&&x<=10)y=x*x+l.5;

elsey=8.5;

cout〈<〃x=〃y=//<<y<<endl;

?#include"iostream"

?usingnamespacestd;

?voidmain()

,鬼考:當

?{floatx,y;

二100時

?coutvv”計算x/y的值,請輸入x,'y:;

?cin?x?y;

?對不起,y不能為

?elsecout?,,x/y=,,<<x/y?endl;}

刖二頁,『休息’

練習

?1、判斷int型變量quantity的值是否為數字100,

哪項正確(C)

?Aif(quantity=100)Bif(quantity=100);

?Cif(quantity==100)Dif(quantity==100);

?2、下面哪項將數字5賦給變量area?(B)

?Aarea=5Barea=5;Carea==5Darea==5;

?3、寫出一條if語句,判斷int型變量area是否存方

T5

if(area==5)

簿一頁.[休息

?4、比較運算符舉例,輸入一個數字,判別

該數字是奇數還是偶數。

?intnumber;

?cin?number;

?if(number%2==0)偶數

?cout?number?uisaeven,,?endl;

?else

?cout?number?uisanodd,,?eriq^

若條件成立時輸出

奇數,如何改動

、逗號運算符和逗號表達式

逗號運算符:

用逗號將多個表達式連接起來組成一個新的表達式,

呼逗號表達式。其格式為:

表達式1,表達式2,,表達式n

程序執行時,按從左到右的順序執行組成全號表達

式的各表達式,而將最后一個表達式(即表達式n)的值

作為逗號表達式的值。逗號運算符的運算級別最低。

y=15;

x=(y=y-5,50/y);//結果x=5

好一頁■I休息

逗號表達式常見于循環結構語句中的初始化表達式

和增量表達式。逗號表達式也可用于簡化程序的編寫。

如:

if(x>y)

{t=x;x=y;y=t;

用逗號表達式可簡化為:

if(x>y)

t=x,x=y,y=t;

簿一頁.[休息

五、?運算符和?表達式

?運算符由?和:兩個運算符組成,也稱為條件

運算符.

是一個三目運算符,對三個運算對象進行操

作。

?表達式也稱為條件表達式,其格式為:

表達式1?表達式2:表達式3

執行過程:

如果表達式1的值為

非零值,貝IJ?表達式的

值為表達式2的值;

如果表達式1的值等

于零,貝U?表達式的值

為表達式3的值。

購■一頁休息

?表達式的優先級比賦值運算符“二”高,比邏輯或

I”低。條件表達式結合性從右到左

?表達式經常用來替換下面形式的if語句:

if(x>y)z=x;

elsez=y;

可寫成:z=x>y?x:y;

如a〉O?a:-a若a=-5,值為5

?表達式執行比if-else快很多。

購i頁■I休息,

例319、求雙精度類型量的絕對值

ttinclude<iostream>

usingnamespacestd;

voidmain()

{doublex,y;

cin>>x;

y=x>0?x:-x;

cout<<y<<endl;

簿一頁.[休息

六、運算符優先級和結合方向

優先級運算符結合方向

10[].->自左至右

2-+++--!?(t)*&sizeof自右至左

3*/%自左至右

4+(加)-(減)自左至右

5??自左至右

6<<=>>=自左至右

7二二I二自左至右

優先級運算符結合方向

8&(按位與)自左至右

9ZV自左至右

10自左至右

11&&自左至右

12自左至右

9?

13??自右至左

14=+=一二*二/-%=自右至左

>>=<<=&=八==

15自左至右

HA

前一頁.休

七、嵌套的選擇結構_______________

十個選擇結構中包含有其它的選擇和

時,則稱為嵌套的選擇結構。外層判斷條件稱為

主要判定,內層稱為次要判定

當做出的判定不止一個時可選用此類結構。

2xx>l

3-xx=l

{5xx<l

if(x<1)左迎---------★★

elseif(x==l)y=3-x;"C、

」.&

轉■休息,--e--l-s-e---y工-=---2---*---x--;-----------

?if(條件表達式)

?{多條語句;}

?else

?{多條語句;}

后磋語句

例3.20、編寫一用戶登錄的判斷程序

程序:

ftinclude<iostream>

ftinclude<string>

usingnamespacestd;

voidmain(void)

{stringusername,password;

cout<<z/PleaseInputYourUserName:〃;

cin>>username;

cout<<z/PleaseInputYourPassword:〃;

cin>>password;

簿一頁.[休息

*

1f(username二二student005)

嵌套結構可以發生在if分

if(password二二〃12345678〃)

支中,也可發生在else分

cout<<zzok!z/<<endl;支中

else

cout<<zzPasswordError!z/<<endl;

else

if(password二二〃12345678〃)

cout<<z/UserNameError!z/<<endl;

else

cout<<zzUserNameandPassword

Error!!!z/<<endl;

嵌套的ifi吾句一般形式:

if(表達式1)

語句序列1;

elseif(表達式2)

語句序列2;/選擇結構可以

°進行多層嵌套

elseif(表達式n-l)

語句序列nT;

else

語句序列n;

前?頁,休息

例3.22、從鍵盤任意輸入三個數,求它們的最大數

#include<iostream>

usingnamespacestd;

voidmain()

{doublea,b,c,max;

cout<</zinputa,b,c:〃;cin>>a>>b>>c;

if(a〉b&&a〉c)max=a;

elseif(b>a&&b>c)max=b;

elsemax=c;

cout<<//max=//<<max<<endl;

}//???

前i詞[休息?

正確程序一:

#include<iostream>

usingnamespacestd;

voidmain()

{doublea,b,c,max;

z/

cout<<inputa,b,c:〃;

cin>>a>>b>>c;

if(a>二b&&a>=c)max=a;

elseif(b>二a&&b>二c)max=b;

elsemax=c;

cout<</zmax=z/<<max<<endl;

簿一頁.[休息

正確程序二:

#include<iostream>

usingnamespacestd;

voidmain()

{doublea,b,c,max;

/z

cout<<inputa,b,c:〃;

cin>>a>>b>>c;

if(a>二b&&a>二c)max=a;

if(b>二a&&b>二c)max=b;

if(c>二a&&c>二b)max=c;

cout<<z/max=z/<<max<<endl;

正確程序三:

#include<iostream>

usingnamespacestd;

voidmain()

{doublea,b,c,max;

cout<</zinputa,b,c:〃;

cin>>a>>b>>c;

max=(a>=b)?a:b;

□ax=(max>=c)?max:c;

cout〈〈〃max=〃〈〈max〈〈endl;

八、用ifi吾句創建多路選擇結構

例3.23、將等級成績按下表轉換成對應消息

輸出

等級成績消息

A或aExcellent

B或bAboveAverage

(MeAverage

D或dBelowAverage

_____^或fBelowAverage

購i頁■[休息w

程序:

#include<iostream>

usingnamespacestd;

voidmain()

{chargrade;

/z

cout<<InputGrade:〃;

cin>>grade;

if(grade—A'||grade—a)

cout<<z/Excellentz/<<endl;

elseif(grade二二,B,||grade二二,b')

cout<</zAboveAverage/Z<<endl;

elseif(grade==,C\\grade==,c)

cout<<z/Average/z<<endl;

elseif(grade==,D5||grade==,di\

?=,

|grade二二'F||grade=f,)

cout<</zBelowAveragez/<<endl;

else

cout<<z/Errorz/<<endl;

簿一頁.[休息

九、使用if語句應注意的問題

1、else不能單獨使用

一個else總是與前面最近的一個且沒有與其

它else配對的if組成配對關系。

例3.13、中程序段:

if(delta>=0)

{cout<<z/xl=z/<<p+q<<endl;

cout<〈〃x2=z/<<p-q<<endl;

else

{cout<<z/xl=/z?p?/z+Jz/?q?endl;

〃〈〈p〈〈〃-jz/<<q<<endr^^

out<<z/x2=

MH

若改成:

if(delta>=0)

cout<<z/xl==z/<<p+q<<endl;

cout〈〈〃x2==/z<<p-q<<endl;

else

cout<</zxl==/z?p?/z+j/z?q?endl;

cout〈<〃x2==z/?p?/z-jz/?q?endl;

結果會怎樣?

例3.22、中程序一:

#include<iostream>

usingnamespacestd;

voidmain()

{doublea,b,c,max;

cout<<zzinputa,b,C:;

cin>>a>>b>>c;

if(a>=b&&a>=c)max二a;

elseif(b>二a&&b>二c)max=b;

elsemax二c;〃else與哪個if配對?

cout<<z/max=zz<<max<<endl;

簿一頁.[休息

?if(a<b)?if(a<b)

?if(b<c)?{if(bvc)

?x=y;?x=y;}

?else?else

?x=z;?x=z;

不成對時加{}確定配

g系:書寫最好分層

程序填空:輸入兩個整數,比較兩個數的大小

#include<iostream>

usingnamespacestd;

voidmain(void)

{intx,y;〃

cout<</zEnterxandy:〃;

cin>>x>>y;

if(x!=y)

if(x>y)

cout<</zx>yz/<<endl;

else

cout<</zx<yz/<<endl;

else

cout<<z/x=y/z<<endl;

2、不恰當使用邏輯表達式代替嵌套選擇結構

XYZ公司有全職和兼職兩種類

工,其帶薪休假制度規定如下:

休假周數員工類型公司工齡

兼職員工(P)任意

全職員工(F)W5年

全職員工(F)〉5年

寫出實現下面功能的算法:輸入員工類型及公司工齡則

輸出該員工的帶薪休假周數,如果不是全職員工互輸也

任何信息。甘木

簿一頁.[休息

正確算法:

1.輸入員工類型和工齡

2.if(員工類型是F)

if(工齡大于5)

顯示“3-weekvacation”

else

顯示“2-weekvacation”

//endif

else

顯示“novacation”

//endif

簿一頁.[休息

錯誤算法:

1.輸入員工類型和工齡

2.if(員工類型是F且工齡大于5)

顯示“3-weekvacation”

else

顯示“2-weekvacation”

//endif

3、顛倒主、次判定

例3.24、的另一錯誤算法:

1.輸入員工類型和工

2.if(工齡大于5)

if(員工類型是F)/

顯示“3-weekvacation55

else

顯示“2-weekvacation”

//endif

//endif

4、使用不必要的嵌套選擇結構

例3.24、的另一錯誤算法:

1.輸入員工類型和工齡

2.if(員工類型是F)

if(工齡大于5)

顯示“3-weekvacation”

簿一頁.[休息

十、switch語句(開關語句)

switch語句的作用是用來實現多路分支類型

的選擇結構。

用switch語句實現多路分支類型的選擇結構

格式簡明。

1、帶break語句的switch語句

語句格式及框圖見下頁

簿一頁.[休息

。多路(開關〉選擇語句帶break語句的框圖

語句格式:

switch(表達式)

'case常量表達式1:

語句序列1;break;

?■■■?<

case常量表達式n:

rTlV-eIr~^

語句序列n;break;

iMAV^aaiv?

[default:—,

語句序列n+1;]

sinm吾句的執行過程^框圖所示。

表達式只能是整型、字符型等表達式

每個case后的常量表達式稱為開關常數,只能是整

型、字符型等表達式,各值不能相同且只起入口標號的

作用。

break語句起著結束switch語句執行的作用,并轉移

到其后繼語句繼續執行。?,

簿一頁.[休息

default分支是一個可選項,若缺省則在所有

匹配失敗時,直接執行switch語句的后繼語句。

若沒有break語句,則當表達式的值與某個

case中的開關常數相匹配后,執行該case模塊中

的語句序列,然后執行其后每一個case模塊中的

語句序列,包括default中的語句序列,而不管

其值是否匹配。

軻-貝?I休息,

例325、輸入一個0?6的整數,

轉換成星期輸出

程序:

#include<iostream>

usingnamespacestd;

voidmain(void)

{intday;

cout〈〈〃請輸入0到6之間的任一數字〃〈〈endl;

cin>>day;

簿一頁.[休息

switch(day)

{case0:cout<</zSunday/z<<endl;break;

case1:cout<<z/Monday/z<<endl;break;

case2:cout<</zTuesdayz/<<endl;break;

case3:cout<<z/Wednesday/z<<endl;break;

case4:cout<</zThursdayz/<<endl;break;

case5:cout<</zFridayz/<<endl;break;

case6:cout<<z/Saturday/z<<endl;break;

default:

cout〈〈〃輸入數據不在規定范圍內〃<〈endl;

}

e韁叱、"

例3?26、編制一個完成兩個數四則運算的程序

#include<iostream>

usingnamespacestd;

voidmain()

doublex,y;

charop;

cout〈〈〃請輸入算式:〃〈〈endl;

cin>>x>>op>>y;卷

簿一頁.[休息J

if(op=二'+')

cout<<x<<,<<y<<?=,<<x+y<<endl;

elseif(op二二'-')

cout<<x<<,-'<<y<<?=’<<x"y<<endl;

elseif(op二二'*,)

cout<<x<<*'<Xy〈〈'='〈〈x*y〈〈endl;

elseif(op=二'/'&&y!=0.0)

cout<<x<<,/"<<y<<?<<x/y<<endl;

else

cout〈〈〃非四則運算!〃〈〈endl;

前?頁■休息1

程序二(switch語句實現)

#include<iostream>

usingnamespacestd;

voidmain()

{doublex,y;

charop;

coutvv”請輸入算式:n?endl;

cin?x?op?y;

switch(op)

{case

cout?x?,+!?y?l=,?x+y?endl;break;

簿一頁.[休息

,,

case-:

cout<<x<<,-'<<y<<5=’<<x"y<<endl;break;

case*:

cout<<x<<5*'<<y<<5='<〈x*y〈<endl;break;

case/:

if(y==0.0)cout〈〈〃除式的分母為零!〃〈〈endl;

elsecout<<x<<?/’<<y<<,=’<<x/y<<endl;

break;

default:

cout〈〈〃非四則運算〃〈〈endl;

2、缺省形式的switch語句:

switch(表達式)當表達式的值

{case常量表達式1:與常量表達式1

case常量表達式2:的值或常量表達

式2的值,…,

或常量表達式n-

1的值之一匹配

時,都執行語句

case常量表達式nT:

序列n-1;否則,

語句序列n-1;break;執行語句序列n

default:

——語句序列n;

例3?27、給學生寫評語,娜將學生的考試

成績由百分制楂換為4級制,標準為:

等級分數段

A100-90分

B89-80分

C79-60分

D60分以下

前?頁.休息

分析:轉換的前提是成績屬于哪個分數段

所以問題的關鍵是對條件的描述。

由于:100/10=10

(90-99)/10=9

(80-89)/10=8

(70-79)/10=7

(60-69)/10=6

因此,可以構造一個整型表達式grade/10

用于將分數段化為單個整數值。、

程序清單:

#include<iostream>

usingnamespacestd;

voidmain(void)

{intgrade;

charx;

cout〈〈〃請輸入該學生的百分制成

績:z/<<endl;

cin>>grade;

switch(grade/10)——

{case10:

case9:x='A';break;

case8:x='B';break;

case7:

case6:x='C';break;

default:x='D';

cout〈〈〃該學生成績等級為:/z<<x<<endl;

選擇題:

1.C++源文件的擴展名為A.

A).CPPB).CC).DLLD).EXE

2.將小寫字母n賦值給字符變量w,正確的操作是J

A)w='\n";B)w="n";C)w=110;D)

溫馨提示

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

評論

0/150

提交評論