• 微信号
  • 微信号
您当前的位置:首页 > 学海无涯 > 茑语花香>C++ Switch讲解与一本通平台讲解

C++ Switch讲解与一本通平台讲解

孤峰 孤峰家 2023-09-21 95人阅读

C++ Switch 讲解~ Hi,大家好,我来讲解一下C++中的 Switch 以及信息学奥赛一本同上面的题目。

switch 是C++中的保留字,它的作用于if是差不多的。

下面是 switch 的结构

switch(表达式){

case 常量表达式:

语句...;

break;

case 常量表达式:

语句...;

break;

...

default:

语句...;

}

当 switch 小括号中的表达式与花括号中的常量表达式相同时,switch 就会执行冒号后面到break的语句。

如果一轮 case 都没有匹配项,就直接执行 default 的语句。

switch 不好用的地方在于,它只能判断 case 后面的常量表达式是否与表达式相同,只有相同才会执行后面的代码。这样,一旦要选择的量多了起来,switch 就略弱于 if 了。

Switch 的执行过程

这是 switch 的执行过程(有点丑)

default是可有可无的,执行完default也会跳出switch

首先 switch 会查找 case,如果 case 成立了,就执行其后方的代码,遇到 break 就跳出switch(没有就继续往下执行)。如果 case 中一个都没有成立,就会执行 default 后面的指令。当然 default 不一定要放在较后面,case 也不一定要放在 default 的前面。

在中间的 case 或 default 的末尾必须加上 break,否则,会影响到其他的代码。

Switch 的实例

下面是 switch 的一个实例

#include<iostream>

using namespace std;

int **in(){

int x;

cin >>x;

switch(x){

case 1:

cout << "One" << endl;

break;

case 2:

cout << "Two" << endl;

break;

default:

cout << "I don't konw!" << endl;

}

return 0;

}

这段代码的意思是输入一个 x,然后判断 x 是什么,如果是 1 则输出 One,如果是 2 则输出 Two,否则输出 I don't know。

注意 case 后方的常量表达式是不能重复的,default 也只能有一个或没有。

信息学奥赛一本通的题目

2057 - 2059,1049 - 1058

2057【例3.9 】星期几

这是一道用 switch 比较简单的题目,因为它的等式就7个,使用 switch 比较简洁明了。

下面是代码

#include<iostream>

using namespace std;

int **in(){

int x;

cin >> x;

switch(x){

case 1:

cout<<"Monday"<<endl;

break;

case 2:

cout<<"Tuesday"<<endl;

break;

case 3:

cout<<"Wednesday"<<endl;

break;

case 4:

cout<<"Thursday"<<endl;

break;

case 5:

cout<<"Friday"<<endl;

break;

case 6:

cout<<"Saturday"<<endl;

break;

case 7:

cout<<"Sunday"<<endl;

break;

default:

cout<<"input error!"<<endl;

}

return 0;

}

本题十分简单,只要懂了就可以完成。

2058【例3.10】简单计算器

这道题也十分简单,只需判断符号,在做相应的运算就行了。

下面是代码

#include<iostream>

using namespace std;

int **in(){

float x,y,sum;//两个数字和得数(样例输入的含有小数,所以要用float)

char s;//运算符

cin>>x>>y>>s;//按照题目要求输入

switch(s){//判断s

case '+'://加

sum=sum+(x+y);//累加,吧x+y的和加到sum里面

break;

case '-'://减

sum=sum+(x-y);

break;

case '*':

sum=sum+(x*y);

break;

case '/':

if(y==0){//判断除数是否为0

cout<<"Divided by zero!"<<endl;

return 0;//结束

}

sum=sum+(x/y);

break;

default:cout<<"Invalid operator!"<<endl;return 0;//没有此运算符

}

cout<<sum<<endl;//输出运算结果

return 0;

}

这个也不难,只要好好思考就可以找到思路。

2059【例3.11】买笔

这道题初学者看上去就觉得很难,做不出来,但思考一下。

首先,题目要求尽量多买亿一些笔,所以我们先用所有的钱买4元钱的笔,再看看买完之后还有多少钱。当买完之后还剩1元钱时,就可以用一支4元钱的笔换一支4+1=5元钱的笔。同理还剩下2元钱就用一支4元钱的笔换一只4+2元钱的笔。那如果多了三支笔呢?没有4+3=7元的笔啊?那就用两支4元钱的笔换一支5元钱的笔和一支6元钱的笔,这样就用完了剩下的3元钱

但是我居然输出搞反了啊!!!!(是z,y,x,我写成了x,y,z)

#include<iostream>

using namespace std;

int **in(){

int a,x=0,y=0,z=0;//a是总钱数,x是4元钱的笔,y是5元钱的笔,z是6元钱的笔

cin>>a;

x=a/4;//算出可以买多少4元钱的笔

switch(a%4){//查看剩余的钱

case 1://剩下1元钱

x--;

y++;

break;

case 2://剩下2元钱

x--;

z++;

break;

case 3://剩下3元钱

if(x<2) break;//特判

x-=2;

y++;

z++;

break;

}

cout<<z<<' '<<y<<' '<<x<<endl;

return 0;

}

无语

1049 晶晶赴约会

这道题十分简单,直接上代码。

#include<iostream>

using namespace std;

int **in()

{

int n;

cin>>n;

switch(n)

{

case 1:case 3:case 5://几个case连起来就可以表示:只要满足这几个条件的其中一个就可以进入

cout<<"NO"<<endl;

break;

default:cout<<"YES"<<endl;//否则就输出YES

}

return 0;

}

这题用if更简单:

#include<iostream>

using namespace std;

int **in(){

int n;

cin>>n;

if(n==1||n==3||n==5){

cout<<"NO"<<endl;

}

else

cout<<"YES"<<endl;

return 0;

}

1050 骑车与走路

这道题...好像不能用 switch 做...

#include<iostream>

using namespace std;

int **in()

{

int len;

cin>>len;

if(50+(double)len/3.0>(double)len/1.2)//如果走路的速度大于骑自行车

cout<<"Walk";

else if(50+(double)len/3.0==(double)len/1.2)//如果骑自行车的速度小于走路

cout<<"All";

else//如果都相等

cout<<"Bike";

return 0;

}

疑惑1051 分段函数

照打就行啦(好像还是用不了 switch...)

代码如下

#include<cstdio>//输出要用printf,printf要用cstdio,cstdio要用手打...

using namespace std;

int **in(){

double y,n;//float应该也行

scanf("%lf",&n);

if(n>=0&&n<5){

y=2.5-n;

}

else

if(n>=5&&n<10){

y=2-1.5*(n-3.0)*(n-3.0);

}

else

y=n/2.0-1.5;//照写就行

printf("%.3lf",y);//以3位小数输出

return 0;

}

1052 计算邮资

这题也是直接算(好像这个也是...)

代码如下

#include<iostream>

using namespace std;

int **in(){

int w,sum=8;//基本费

char x;//是否加急

cin>>w>>x;

if(w>1000){//大于1000克

w-=1000;

sum+=w/500*4;

if(w%500!=0){

sum+=4;

}

}//收费...

if(x=='y'){

sum+=5;

}//加急的特判

cout<<sum<<endl;

return 0;

}

1053 较大数输出

这个直接比三次就行(switch又被抛弃...)

代码如下

#include<iostream>

using namespace std;

int **in(){

int a,b,c,**xn;

cin>>a>>b>>c;

**xn=a;//假设较大的数是a

if(b>**xn) **xn=b;//如果b比较大的数大则将b赋值给**xn

if(c>**xn) **xn=c;//如果c比较大的数大则将c赋值给**xn

cout<<**xn<<endl;//输出较大的数

return 0;

}

1054 三角形判断

小学老师说过,三角形的任意两条边大于另一条边...(switch 又双被抛弃)

所以代码就是这样

#include<iostream>

using namespace std;

int **in(){

int a,b,c;

cin>>a>>b>>c;

if(a+b>c&&b+c>a&&a+c>b) cout<<"yes"<<endl;//满足条件就输出yes

else

cout<<"no"<<endl;//没满足就输出no

return 0;

}

1055 判断闰年

闰年如何判断?

它是4的倍数,且不是100的倍数。

它是400的倍数。

只要满足以上其中一个就可以被称为闰年(switch 又双叒被抛弃)

#include<cstdio>

using namespace std;

int **in(){

int n;

scanf("%d",&n);

if(n%4==0){

if(n%100==0){

if(n%400==0){

cout<<"Y"<<endl;

}

else

cout<<"N"<<endl;

}

else

cout<<"Y"<<endl;

}

else

cout<<"N"<<endl;//许多判断...

return 0;

}

1056 点和正方形的关系

直接判断,不用多说(switch 又双叒叕被抛弃)

#include <iostream>

using namespace std;

int **in(){

double x,y;

cin>>x>>y;

if((x>=-1&&x<=1)&&(y>=-1&&y<=1)) cout<<"yes"<<endl;//在正方形的坐标内就输出yes

else cout<<"no"<<endl;//否则输出no

return 0;

}

1057 简单计算器

啊这...

这不跟2058一样的吗???

1058 求一元二次方程

直接照着打就行

#include<iostream>

#include<cstdio>

#include<c**th>

using namespace std;

int **in(){

double a,b,c,x1,x2,sum;

cin>>a>>b>>c;

sum=b*b-4*a*c;

if(sum>-0.01&&sum<0.01){//实根相等

x1=(-b+sqrt(b*b-4*a*c))/(2*a);

printf("x1=x2=%0.5f",x1);

}

else if(sum<0){//无实根

cout<<"No answer!";

}

else if(sum>0){//实根不相等

x1=(-b+sqrt(b*b-4*a*c))/(2*a);

x2=(-b-sqrt(b*b-4*a*c))/(2*a);

if(x1<x2){//谁小谁在前面

printf("x1=%0.5f;x2=%0.5f",x1,x2);

}

else{

printf("x1=%0.5f;x2=%0.5f",x2,x1);

}

}

return 0;

}

好了,题目都讲完了。

转载:感谢您阅览,转载请注明文章出处“来源从小爱孤峰知识网:一个分享知识和生活随笔记录的知识小站”。

链接:C++ Switch讲解与一本通平台讲解http://www.gufeng7.com/niaolang/1843.html

联系:如果侵犯了你的权益请来信告知我们删除。邮箱:119882116@qq.com