解析C++編程中的選擇構造和switch語句的用法。本站提示廣大學習愛好者:(解析C++編程中的選擇構造和switch語句的用法)文章只能為提供參考,不一定能成為您想要的結果。以下是解析C++編程中的選擇構造和switch語句的用法正文
C++編寫選擇構造的法式
上面,經由過程兩個實例來講明若何編寫較為龐雜的C++法式。
【例】編寫法式,斷定某一年能否為閏年。
#include <iostream> using namespace std; int main( ) { int year; bool leap; cout<<"please enter year:";//輸入提醒 cin>>year; //輸出年份 if (year%4==0) //年份能被4整除 { if(year%100==0)//年份能被4整除又能被100整除 { if (year%400==0)//年份能被4整除又能被400整除 leap=true;//閏年,令leap=true(真) else leap=false; } //非閏年,令leap=false(假) else //年份能被4整除但不克不及被100整除確定是閏年 leap=true; } //是閏年,令leap=true else //年份不克不及被4整除確定不是閏年 leap=false; //若為非閏年,令leap=false if (leap) cout<<year<<" is "; //若leap為真,就輸入年份和“是” else cout<<year<<" is not ";//若leap為真,就輸入年份和“不是” cout<<" a leap year."<<endl; //輸入“閏年” return 0; }
運轉情形以下:
① 2005↙ 2005 is not a leap year. ② 1900↙ 1900 is npt a leap year.
也能夠將法式中第8~16行改寫成以下的if語句:
if(year%4!=0) leap=false; else if(year%100!=0) leap=true; else if(year%400!=0) leap=false; else leap=true;
也能夠用一個邏輯表達式包括一切的閏年前提,將上述if語句用上面的if語句取代:
if((year%4 == 0 && year%100 !=0) || (year%400 == 0)) leap=true;
else leap=false;
【例】運輸公司對用戶盤算運費。旅程(s)越遠,每千米運費越低。尺度以下:
s<250km 沒有扣頭 250≤s<500 2%扣頭 500≤s<1000 5%扣頭 1000≤s<2000 8%扣頭 2000≤s<3000 10%扣頭 3000≤s 15%扣頭
設每千米每噸貨色的根本運費為p(price的縮寫),貨色重為w(wright的縮寫),間隔為s,扣頭為d(discount的縮寫),則總運費f(freight的縮寫)的盤算公式為
f = p * w * s * (1 - d)
據此寫出法式以下:
#include <iostream> using namespace std; int main( ) { int c,s; float p,w,d,f; cout<<"please enter p,w,s:"; cin>>p>>w>>s; if(s>=3000) c=12; else c=s/250; switch (c) { case 0:d=0;break; case 1:d=2;break; case 2: case 3:d=5;break; case 4: case 5: case 6: case 7:d=8;break; case 8: case 9: case 10: case 11:d=10;break; case 12:d=15;break; } f=p*w*s*(1-d/100.0); cout<<"freight="<<f<<endl; return 0; }
運轉情形以下:
please enter p,w,s:100 20 300↙ freight=588000
C++ switch語句(多選分支構造)
switch語句是多分支選擇語句,用來完成多分支選擇構造。它的普通情勢以下:
switch(表達式) { case 常量表達式1:語句1 case 常量表達式2:語句2 ... case 常量表達式n:語句n default:語句n+1 }
例如,請求依照測驗成就的品級打印出百分制分數段,可以用switch語句完成:
switch(grade) { case 'A': cout<<"85~100\n"; case 'B': cout<<"70~84\n"; case 'C': cout<<"60~69\n"; case 'D': cout<<"<60\n"; default: cout<<"error\n"; }
解釋:
1) switch前面括號內的“表達式”,許可為任何類型。
2) 當switch表達式的值與某一個case子句中的常量表達式的值相婚配時,就履行此case子句中的內嵌語句,若一切的case子句中的常量表達式的值都不克不及與switch表達式的值婚配,就履行default子句的內嵌語句。
3) 每個case表達式的值必需互不雷同,不然就會湧現相互抵觸的景象(對表達式的統一個值,有兩種或多種履行計劃)。
4) 各個case和default的湧現順序不影響履行成果。例如,可以先湧現“default:…”,再湧現“case 'D':…”,然後是“case 'A':…”。
5) 履行完一個case子句後,流程掌握轉移到下一個case子句持續履行。“case常量表達式”只是起語句標號感化,其實不是在該處停止前提斷定。在履行switch語句時,依據switch表達式的值找到與之婚配的case子句,就從此case子句開端履行下去,不再停止斷定。例如,下面的例子中,若grade的值等於'A',則將持續輸入:
85~100 70~84 60~69 <60 error
是以,應當在履行一個case子句後,使流程跳出switch構造,即終止switch語句的履行。可以用一個break語句來到達此目標。將下面的switch構造改寫以下:
switch(grade) { case 'A': cout<<"85~100\n";break; case 'B': cout<<"70~84\n";break; case 'C': cout<<"60~69\n";break; case 'D': cout<<"<60\n";break; default: cout<<"error\n";break; }
最初一個子句(default)可以不加break語句。假如grade的值為'B',則只輸入“70~84”。
在case子句中固然包括一個以上履行語句,但可以不用用花括號括起來,會主動次序履行本case子句中一切的履行語句。
6) 多個case可以共用一組履行語句,如
case 'A': case 'B': case 'C': cout<<">60\n";break; ...
當grade的值為'A'?'B'或'C'時都履行統一組語句。