C++第六章:选择结构的程序设计

一、选择语句

(1)if语句

        if语句的作用是计算给定的表达式,根据判断结果选择执行相应的语句

//形式1 
if (表达式)  语句1;

//例:
int a=5,b=1,t;
if(a>b)  t=a,a=b,b=t;
//形式2

if(表达式)  语句1;
else    语句2;

//例:
int x=5,y=6;
if(x>=y)   cout<<x<<endl;
else    cout<<y<<endl;

注:①if语句中的子语句既可以是一个简单语句,也可以是复合语句或控制语句,但必须是“一个语句”的语法形式。

if(a>b)
    x=a+b;
    y=a-b;
else
    x=a-b;
    y=a+b;

//错误,无大括号if语句只控制其下一句,即当a>b时x=a+b,而y=a-b不论条件是否成立,都会执行
//      else同理。
//正确代码
if(a>b)
{
    x=a+b;
    y=a-b;}
else
{
    x=a-b;
    y=a+b;}

//控制下面语句块

        ②if语句的表达式一般为关系、逻辑运算表达式,但也可以为其他表达式。

a=5,b=2;
if(a)    x=a*10;
//if(a)等价于a!=0

例:

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    double a,b,c;
    cin>>a>>b>>c;  //输入三遍长
    if(a+b>c && a+c>b && b+c>a) //判断能否构成三角形
    {
        double t,s;
        t=(a+b+c)/2.0;
        s=sqrt(t*(t-a)*(t-b)*(t-c));  //计算面积
        cout<<"area="<<s<<endl;
    }
    else
        cout<<"error\n";
        return 0;
}

  (2)switch语句

        switch语句作用是计算给定表达式,根据结果选择从那个分支入口执行

          ①形式

switch(表达式)
{
    case 常量表达式1 :    .....语句序列1
    case 常量表达式2 :    .....语句序列2
    case 常量表达式3 :    .....语句序列3
    .
    .
    .
    case 常量表达式n :    .....语句序列n
    default :     .....默认语句序列  //其它情况
}

     ②switch流程图

 (*********)

注:①switch语句中case分支的语句序列可以是一个语句,也可以是任意多的语句序列,也可以没有语句。

        ②如果case后没有语句,则一旦执行到这个case分支,什么也不做,继续往下执行。

例:

switch(n){
    case 7 : cout<<"setp5\n";
    case 6 : 
    case 5 : cout<<"setp4\n";
    case 4 : {
                cout<<"setp3  "<<"setp2\n";  }
    case 2 : cout<<"setp1\n";
    default : cout<<"setp10\n";
}

        ③switch语法中各各case分支和defalt分支的出现次序在语法上没有规定,但次序不同,可能会影响结果。

//1
switch(n){
    case 1 : cout<<"1\t";
    case 2 : cout<<"2\t";
    default cout<<"0\t";
}

//输入1  输出 1    2    0
//输入2  输出 2    0
//输入其他 3 输出 0
//2
switch(n){
    default cout<<"0\t";
    case 1 : cout<<"1\t";
    case 2 : cout<<"2\t";
}
//输入3  输出 0    1    2
//输入1  输出 1    2
//输入2  输出 2

        ④switch语法中default分支是可选的,若没有default分支且没有任何case标号相等时,switch语句将什么也不做,直接执行后续语句。

        ⑤switch语句的分支表达式可以是C++语言的任意表达式,但其值必须是整数(含字符类型)、枚举类型。

        ⑥switch语法中的case后表达式必须是常量表达式且互不相同。

case  c>=a && c<=b //错误

        ⑦在switch语句中任意位置上,只要执行break语句,就要结束switch语句的执行,转到后续语句。

break;
switch(表达式)
{
    case 常量表达式1 :    .....语句序列1    break;
    case 常量表达式2 :    .....语句序列2    break;
    case 常量表达式3 :    .....语句序列3    break;
    .
    .
    .
    case 常量表达式n :    .....语句序列n    break;
    default :     .....默认语句序列  //其它情况
}

含break语句的switch语句流程图:

 例:

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int g;
    cin>>g;
    switch(g){
        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";
    }
    return 0;
}

二、选择语句的嵌套

     (1)if语句的嵌套

//形式1
if(表达式1)   语句序列1;
  else if(表达式2)   语句序列2;
    else if(表达式3)   语句序列3;
     else if(表达式4)   语句序列4;
    ......
       else if(表达式n)   语句序列n;
    else  语句序列m;

流程图:

 例:

#include<iostream>
using namespace std;
int main()
{
    int score;
    cin>>score;
    if(score>=90)  cout<<"A\n";
    else if(score>=80)  cout<<"B\n";
    else if(score>=70)  cout<<"C\n";
    else if(score>=60)  cput<<"D\n";
    else cout<<"E\n";
    retuen 0;
}

//形式2
if(表达式1)
{
    if(表达式2)
        语句1;
    else
        语句2;
}
else 
{ 
   if(表达式3)
        语句3;
    else 
        语句4;
}

流程图:

 注:else语句总和距离自己最近的上面的if相匹配。

例:

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    double x,y;
    cin>>X;
    if(x<-3.0)  y=x-1.0;
    else
        if(x>=-3.0 && x<=3.0)
            y=sqrt(9.0-x*x);
        else
            y=x+1;
    cout<<"x= "<<x<<" ,y= "<<y<<endl;
    return 0;
}

 

     (2)switch语句的嵌套

int a=15,b=21,m=0;
switch(a%3){
    case 0 : m++;
             switch(b%2) {
                default : m++;
                case 0 : m++; break;
                    }
        case 1 : m++;
}

例:

#include<iostream>
using namespace std;
int main()
{
    int y,m,d,Days;
    cin>>y>>m>>d;  //输入今天日期 
    switch(m){      //计算每月天数
        case 2 : Days=28;
                    if(y%4==0&&y%100!=0||(y%400==0))
                           Days++;
                 break;
        case 4:
        case 6:
        case 9:
        case 11: Days=30;
                 break;
        default : Days=31;
       }
    d++;
    if(d>Days)    d=1,m++;   //判断月末
    if(m>12)    m=1,y++;    //判断年末
    cout<<"明天是:"<<y<<"-"<<m<<"-"<<d<<endl;  //输出第二天日期
    return 0; 
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值