第6节 选择结构的程序设计

第6节 选择结构的程序设计

1.if语句和switch语句
1、if语句
►if语句的作用是计算给定的表达式,根据结果选择执行相应的语句。语句形式有两种:
    ► ①if形式:
        if (表达式) 语句1;
        如: if ( a>b ) t=a, a=b, b=t;
    ►②if-else形式:
        if (表达式) 语句1; else 语句2;
        如: if ( x>=y ) cout<<x<<endl;
         else cout<<y<<endl;

►(1)if语句中的子语句既可以是简单语句,又可以是复合语句或控制语句,但必须是“一个语句”的语法形式
     1 if (a>b) //此段程序代码编译有错误
     2 	x=a+b; y=a-b;
     3 else
     4 	x=a-b; y=a+b;
     1 if (a>b) { //此段程序代码正确
     2 	x=a+b; y=a-b;
     3 }
     4 else {
     5 	x=a-b; y=a+b;
     6 }

►(2)if语句的表达式一般为关系、逻辑运算表达式,但也可以为其他表达式,但按逻辑值来理解:
    a=5,b=2;
    if ( a ) x=a*10; //等价于a!=0

【例6.1】计算三角形的面积。
     1 #include <iostream>
     2 #include <cmath>
     3 using namespace std;
     4 int main()
     5 {
     6 	double a,b,c;
     7 	cin>>a>>b>>c; //输入三角形三边长
     8 	//判断三边长是否构成三角形
     9 	if (a+b>c && a+c>b && b+c>a) {
    10 		double s,t;
    11 		t=(a+b+c)/2.0;
    12 		s=sqrt(t*(t-a)*(t-b)*(t-c)); //Heron公式计算三角形面积
    13 		cout<<"area="<<s<<endl;
    14 	}
    15 	else cout<<"error"<<endl;
    16 	return 0;
    17 }
/*输出结果
3 4 5
area=6
*/
2、switch语句
►switch语句的作用是计算给定的表达式,根据结果选择从哪个分支入口执行,语句形式为:
	switch ( 表达式 ) {
         case 常量表达式1 : … 语句序列1
         case 常量表达式2 : … 语句序列2
         ┇
         case 常量表达式n : … 语句序列n
         default : … 默认语句序列
    }

在这里插入图片描述

►switch语句的使用说明:
    ►(1)switch语句中case分支的语句序列可以是一个语句,也可以是任意多的语句序列,也可以没有语句;
    ►(2)如果case后没有语句,则一旦执行到这个case分支,什么也不做,继续往下执行。
     1 switch (n) {
     2 	case 7 : cout<<“step5”<<endl;
     3 	case 6 : 
     4 	case 5 : cout<<“step4”<<endl;
     5 	case 4 :
     6 		{
     7 			cout<<“step3”<<“step2”<<endl;
     8 		}
     9 	case 2 : cout<<“step1”<<endl;
    10 	default: cout<<“step0”<<endl;
    11 }
	►(3)switch语法中各个case分支和default分支的出现次序在语法上没有规定,但次序的不同安排会影
		响执行结果。
        1 //①程序A
        2 switch (n) {
        3 case 1 : cout<<"1";
        4 case 2 : cout<<"2";
        5 default: cout<<"0";
        6 }

        1 //②程序B
        2 switch (n) {
        3 default: cout<<"0";
        4 case 1 : cout<<"1";
        5 case 2 : cout<<"2";
        6 }

	►(4)switch语法中default分支是可选的,若没有default分支且没有任何case标号的值相等时,
        switch语句将什么也不做,直接执行后续语句。
	►(5)switch语句的分支表达式可以是C++语言的任意表达式,但其值必须是整数(含字符类型)、
        枚举类型。
    ►(6)switch语法中的case后的表达式必须是常量表达式且互不相同,即为整型、字符型、枚举类型的常
        量值,但不能包含变量。
    ►例如:若c是变量,如 :“case c>=‘a’ && c<=‘z’:”的写法是错的。
    ►(7)在switch语句中任意位置上,只要执行到break语句,就结束switch语句的执行,转到后续语句。
    	break;

	►更常见的switch结构应该如下,它提供了程序多分支选择执行流程。
        switch ( 表达式 ) {
             case 常量表达式1: … 语句序列1; break;
             case 常量表达式2: … 语句序列2; break;
             ┇
             case 常量表达式n: … 语句序列n; break;
             default : … 默认语句序列
        }

在这里插入图片描述

【例6.2】按照考试成绩的等级输出百分制分数段
     1 #include <iostream>
     2 #include <cmath>
     3 using namespace std;
     4 int main()
     5 {
     6 		int g;
     7 		cin>>g; //输入成绩等级
     8 		switch(g)
     9 		{
    10 			case 'A':cout<<"85~100\n"; break;
    11 			case 'B':cout<<"70~84\n"; break;
    12 			case 'C':cout<<"60~69\n"; break;
    13 			case 'D':cout<<"<60\n"; break;
    14 			default: cout<<"error\n";
    15 		}
    16 		return 0;
    17 }
2.选择结构的嵌套
3、if语句的嵌套
►1. 第一种形式,在else分支上嵌套if语句,语法形式为:
    if ( 表达式1 ) 语句1
    else if ( 表达式2 ) 语句2
    else if ( 表达式3 ) 语句3
    ......
    else if ( 表达式n ) 语句n
    else 语句m

在这里插入图片描述

【例6.3】编程输出成绩分类。
     1 #include <iostream>
     2 using namespace std;
     3 int main()
     4 {
     5 		int score;
     6 		cin>>score;
     7 		if (score >= 90 ) cout<<"A"<<endl; //90分以上
     8 		else if (score >= 80 ) cout<<"B"<<endl; //80~89分
     9 		else if (score >= 70 ) cout<<"C"<<endl; //70~79分
    10 		else if (score >= 60 ) cout<<"D"<<endl; //60~69分
    11 		else cout<<"E"<<endl; //60分以下
    12 		return 0;
    13 }

►2. 第二种形式,在if和else分支上嵌套if语句,语法形式为:
    if ( 表达式1 )
         if ( 表达式2 ) 语句1
         else 语句2
    else
         if ( 表达式3 ) 语句3
         else 语句4

在这里插入图片描述

►注意:嵌套的if语句可以实现多路分支。在结构上else语句总和距离自己最近的if相匹配。
	  我们可以通过加“{}”来改变else的层位,从而改变程序的执行流程。

在这里插入图片描述

【例6.4】计算分段函数:
         x-1  (x<-3 )
    y =  9-x2 (-3≤x≤3)
         x+1  (x>3  )
    
     1 #include <iostream>
     2 #include <cmath>
     3 using namespace std;
     4 int main( )
     5 {
     6 		double x, y;
     7 		cin>>x;
     8 		if(x<-3.0) y=x-1.0;
     9 		else
    10 			if(x>= -3.0 && x<=3.0)
    11 				y=sqrt(9.0-x*x);
    12 			else
    13 				y=x+1;
    14 		cout<<"x="<<x<<",y="<<y<<endl;
    15 		return 0;
    16 }
4、switch语句的嵌套
►switch语句是可以嵌套的,如:
     1 int a=15, b=21, m=0;
     2 switch(a%3) {
     3 		case 0: m++;
     4 			switch(b%2) {
     5 				default: m++;
     6 				case 0 : m++; break;
     7 			}
     8 		case 1: m++;
     9 }

【例6.5】输入某天的日期,输出第二天的日期。
     1 #include <iostream>
     2 using namespace std;
     3 int main()
     4 {
     5 	int y,m,d,Days; 
     6 	cin>>y>>m>>d; //输入日期
     7 	switch(m) { //计算每月的天数
     8 		case 2 :
     9 			Days=28;
    10 			if((y%4==0&&y%100!=0)|| (y%400==0)) Days++; //闰年天数加1
    11 			break;
    12 		case 4 : case 6 : 
    13 		case 9 : case 11 : Days=30;break;
    14 			default: Days=31; //其余月份为31天
    15 		}
    16 		d++;
    17 		if (d>Days) d=1,m++; //判断月末
    18 		if (m>12) m=1,y++; //判断年末
    19 		cout<<y<<“-”<<m<<“-”<<d<<endl; //输出第二天的日期
    20 		return 0;
    21 }
  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值