解析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'時都履行統一組語句。