引入

在程序中

有时候需要根据条件

而执行不同的代码

这时候就要使用选择结构了

if语句

if(条件成立)
{
    执行语句A;
    执行语句……
}

其中条件一项要写判断语句

a==10 a>=b

大括号是为了将执行语句放到一起

如果条件成立就会执行大括号内的语句

如果执行语句只有一行可省略大括号

例题

2051 偶数

#include<bits/stdc++.h>
using namespace std;

int main(){
    int a;
    cin>>a;
    if(a%2==0)
    {
        cout<<"yes"<<endl;
    }

    return 0;
}

其中a%2==0 表示a为偶数成立

cout<<"yes"<<endl表示是偶数就输出

2052 范围判断

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a;
    cin>>a;
    if(a>1 && a<100) cout<<"yes";
    return 0;
}

if else 语句

看这道题

2054 适合晨练

我们发现if语句不够用了

所以引入if else语句

if(条件成立)
{
    执行语句A;
    执行语句……
}
else
{
    //条件不成立
    执行语句B;
}

例题

2054 适合晨练

#include<bits/stdc++.h>
using namespace std;
int main()
{
    double a;
    cin>>a;
    if(a>=25&&a<=30)
    {
        cout<<"ok!";
    }
    else
    {
        cout<<"no!";
    }
    return 0;
}

如果a>=25 && a<=30不成立

那么就执行else中的语句:cout<<"no!";

2055 收费

#include<bits/stdc++.h>
using namespace std;

int main(){
    double x;
    cin>>x;
    double y=0;
    if(x<=20)
    {
        y=x*1.68;
    }
    else
    {
        y=x*1.98;
    }
    printf("%.2lf\n",y);

    return 0;
}

if elseif else 语句

在处理一些问题时,可能情况会很多,这时候我们可以用if elseif else语句来解决

if(条件A)
{
    执行语句A;
}
else if(条件B)
{
    执行语句B;    
}
else if(条件C)
{
    执行语句C;
}
else
{
    执行语句D;
}

此处会先判断条件A,如果成立就执行语句A

若条件A不成立,就会继续判断条件B,如果成立就执行语句B

同理,若条件AB皆不成立,就继续判断条件C,如果成立就执行语句C

如果条件ABC都不成立,就执行else中的语句D(什么保底)

一个完整的if语句,可以有0~很多很多个else if语句,最多一个也可以没有else语句,但是必须有if语句

例题

1039 判断数正负

#include <bits/stdc++.h>
using namespace std;
int main()
{
    double a,b;
    cin>>a;
    if(a<0)
    {
        printf("negative");
    }
    else if(a>0)
    {
        printf("positive");
    }
    else
    {
        printf("zero");
    }
    return 0;
}

这里也可以使用if嵌套的方式实现

#include <bits/stdc++.h>

using namespace std;

int main() {
    double a;
    cin >> a;
    if (a < 0) 
    {
        printf("negative");
    } 
    else 
    {
        if (a > 0) 
        {
            printf("positive");
        } 
        else 
        {
            printf("zero");
        }
    }
    return 0;
}

如果条件a<0未成立就会进入else语句

继续判断条件if(a>0),与if elseif else语句等效

1043 整数大小比较

#include<bits/stdc++.h>
using namespace std;

int main(){
    int x,y;
    cin>>x>>y;

    if(x>y)
    {
        cout<<'>'<<endl;
    }
    else if(x==y)
    {
        cout<<'='<<endl;
    }
    else
    {
        cout<<'<'<<endl;
    }

    return 0;
}

2057 星期几

#include<bits/stdc++.h>
using namespace std;

int main(){
    int a;
    cin>>a;
    if(a==1)
    {
        printf("Monday");
    }
    else if(a==2)
    {
        printf("Tuesday");
    }
    else if(a==3)
    {
        printf("Wednesday");
    }
    else if(a==4)
    {
        printf("Thursday");
    }
    else if(a==5)
    {
        printf("Friday");
    }
    else if(a==6)
    {
        printf("Saturday");
    }
    else if(a==7)
    {
        printf("Sunday");
    }
    else
    {
        printf("input error!");
    }

    return 0;
}

switch语句

对于上面的这道题

2057 星期几

用if elseif else来写有些过于繁琐了

所以可以使用switch语句简化

switch(变量a)
{
    case 1:
        语句A;
        break;
    case 2:
        语句B;
        break;
    case 3:
        语句C;
        break;
    default:
        语句D;
        break;
}

这段代码等价于

if(a==1)
{
    语句A;
}
else if(a==2)
{
    语句B;
}
else if(a==3)
{
    语句C;
}
else
{
    语句D;
}

break;语句表示如果条件成立并且执行完就跳出switch

break如果不写的话会判断不可能成立的条件!

default语句等价于else

case语句中不需要写大括号!

例题

2057 星期几

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int x;
    cin>>x;
    switch(x)
    {
        case 1:
            cout<<"Monday";
            break;
        case 2:
            cout<<"Tuesday";
            break;
        case 3:
            cout<<"Wednesday";
            break;
        case 4:
            cout<<"Thursday";
            break;
        case 5:
            cout<<"Friday";
            break;
        case 6:
            cout<<"Saturday";
            break;
        case 7:
            cout<<"Sunday";
            break;
        default:
            cout<<"input error!";
    }
}

2058 简单计算器

#include<bits/stdc++.h>
using namespace std;
int main()
{
    double a,b;
    char c;
    cin>>a>>b>>c;
    switch(c)
    {
        case '+':
            cout<<a+b;
            break;
        case '-':
            cout<<a-b;
            break;
        case '*':
            cout<<a*b;
            break;
        case '/':
            if(b==0)
            {
                cout<<"Divided by zero!";
                break;
            }
            cout<<a/b;
            break;
        default:
            cout<<"Invalid operator!";
            break;
    }
}

课后习题

1048 有一门课不及格的学生

1051 分段函数

1058 求一元二次方程