C++语法15 多分支结构(if多分支与switch结构)

if else if else 多分支结构基本框架

if(条件1)
    语句1;       //满足条件1就执行
else if(条件2)
    语句2;       //不满足条件1,但是满足条件2执行
else if (条件3)
    语句3;       //不满足条件1和条件2,满足条件3执行
......
else 语句 n;     //不满足上面所有条件就执行

if开始,中间都是else if,最后是以else结束是对上面所有条件的否定

不同三角形

我们已经知道三角形的成立条件是任意两边之和大于第三边了。按照边长的特性我们还将三角形分为等边,等腰和一般三角形。

等腰三角形就是有两边相等,等边三角形就是三边都相等,一般三角形就是任意两边都不等。

训练:特殊三角形

输入三角形的三边,判断它是何种类型的三角形?是等边的话输出'DB',仅是等腰的话输出'DY',除此之外都属于一般三角形,输出'YB',如果不能构成三角形则输出'NO'。(1<=a<=10,1<=b<=10,1<=c<=10)

【输入格式】三个整数a,b,c,分别代表三条边的边长

【输出格式】DB或者DY或者YB或者NO

【输入样例】3 4 3

【输出样例】DY

解析

判断是否是三角形:首先要判断这三条边是否能构成三角形,即要满足任意两边之和要大于第三边

是三角形:除去上面的情况,则能构成三角形,紧接着判断什么类型的三角形

参考代码

#include<iostream>
using namespace std;
int main( )
{
    int a,b,c;
    cin>>a>>b>>c;
    if(a+b<=c||a+c<=b||b+c<=a)
        cout<<"NO";
    else  if(a==b&&a==c)
        cout<<"DB";
    else  if(a==b||a==c||b==c)
        cout<<"DY";
    else  cout<<"YB";
    return 0;
}

训练:电脑故障

学校组织的某次竞赛一共有99位学生参加,考试结束后老师对编号从1-99的每一位同学的成绩进行名次标注,并在电脑上记录。结果电脑出现了故障,将第1名到第9名改为了10,20,30...90 名,将第10,20,30...90 名改为了第1到第9名。竞赛成绩前50名(包括50名)的同学获得奖励,后49名没有奖励。在电脑故障后随意输入一个同学的名次n,输出在电脑故障之前他应该是什么名次,和之前是否应该获得奖励。(1<=a<=100)

【输入格式】一个整数n,表示故障后的名次

【输出格式】故障前的名次和是否获奖,用空格隔开(获得奖励输出Yes,没有获得输出No)

【输入样例】70

【输出样例】7 Yes

解析

调整现在的10-90名:现在的10-90名其实是1-9名,将10-90调整回1-9,需要将这个数被10整除

调整现在的1-9名:现在的1-9名其实是10-90名,将1-9调整回10-90,需要将这个数乘以10

参考代码

#include<iostream>
using namespace std;
int main( )
{
    int n;
    cin>>n;
    if(n%10==0)     n=n/10;
    else if(n<10)    n=n*10;
    if(n<=50)    cout<<n<<" Yes";
    else    cout<<n<<" No";
    return 0;
}

什么是switch结构?

应用条件语句可以很方便地使程序实现分支,但是出现分支比较多的时候,虽然可以用嵌套的if语句来解决,但是程序结构会显得复杂,其至凌乱。为方便实现多情况选择,C++提供了一种switch开关语句。

基本框架

 switch(表达式)
  {
         case 常量表达式1:
                  语句序列1;
                  break;
         ……
         case  常量表达式n:
                   语句序列n;
                   break;
         default:
                  语句序列n+1;
 }

该语句中可以使用一次或多次case标号,但只能使用一次default标号,或者省略整个default部分

多个case标号也允许使用在同一个语句序列的前面

每个语句标号有保留字case和后面的常量表达式及冒号组成,每个常量表达式通常为字面常量,如常数或字符。

switch语句的执行过程

计算出switch后面圆括号内表达式的值,假定为M,若它不是整型,系统将自动舍去其小数部分,只取其整数部分作为结果值。

依次计算出每个case后常量表达式的值,假定它们为M1、M2、…,同样若它们的值不是整型,则自动转换为整型。

让M依次同M1、M2、…进行比较,一旦遇到M与某个值相等,则就从对应标号的语句开始执行;在碰不到相等的情况下,若存在default子句,则就执行其冒号后面的语句序列,否则不执行任何操作;当执行到复合语句最后的右花括号时就结束整个switch语句的执行。

注意事项

case语句后的各常量表达式的值不能相同,否则会出现错误码。

每个case或default后,可以包含多条语句,不需要使用“{”和“}”括起来。

各case和default子句的先后顺序可以变动,这不会影响程序执行结果。

default子句可以省略,default后面的语句末尾可以不必写break。

训练:计算器

一个最简单的计算器支持+,-,*,/四种运算。输入只有一行:两个参加运算的数和一个操作符(+,-,*,/)。输出运算表达式的结果。考虑下面两种情况:
(1)如果出现除数为0的情况,则输出:Divided by zero!
(2)如果出现无效的操作符(即不为+,-,*,/之一),则输出:Invalid operator!
【输入样例】34  56  +
【输出样例】90

解 析

设num1、num2存放两个参加运算的操作数,op存放操作符。

  • 当op为“+”号时,实现加法操作。
  • 当op为“-”号时,实现减法操作。
  • 当op为“*”号时,实现乘法操作。
  • 当op为“/”号时,判断b值,如果不为0,则实现除法操作,如果为0,则输出:Divided by zero!。
  • 当op不是上面四种操作符时,输出:“Invalid operator!”。

参考代码

float num1,num2;
char op;
cin>>num1>>num2>>op;
switch(op)
{
        case '+': cout<<num1+num2;break;
        case '-': cout<<num1-num2;break;
        case '*': cout<<num1*num2;break;
        case '/':if(num2!=0) cout<<num1/num2;break;
        else cout<<"Divided by zero!";break;
        default: cout<<"Invalid operrator!";
}


从入门到算法,再到数据结构,查看全部文章请点击此处icon-default.png?t=N7T8http://bigbigli.com/

  • 26
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C++中的switch case语句是一种用于多分支选择的控制结构。它允许根据表达式的值选择不同的执行路径。以下是C++中switch case语句的基本语法: ```cpp switch (expression) { case value1: // 当expression的值等于value1时执行的代码 break; case value2: // 当expression的值等于value2时执行的代码 break; case value3: // 当expression的值等于value3时执行的代码 break; // 可以有更多的case语句 default: // 当expression的值与任何case都不匹配时执行的代码 break; } ``` 在switch后面的括号中,我们需要提供一个表达式,它的值将与每个case语句中的值进行比较。当表达式的值与某个case语句中的值匹配时,将执行该case语句后面的代码块。如果没有匹配的case语句,可以使用default关键字指定一个默认的执行路径。 需要注意的是,在每个case语句的末尾需要使用break关键字来终止当前case的执行,否则程序将会继续执行下一个case语句,这可能导致意外的结果。 如果不希望在每个case语句末尾使用break关键字,可以让多个case语句共享同一个代码块。例如: ```cpp switch (expression) { case value1: case value2: // 当expression的值等于value1或value2时执行的代码 break; case value3: // 当expression的值等于value3时执行的代码 break; default: // 当expression的值与任何case都不匹配时执行的代码 break; } ``` 这样,当expression的值等于value1或value2时,将会执行共享的代码块。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bigbigli_大李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值