我是靠谱客的博主 干净巨人,这篇文章主要介绍C++语言篇 第三章 选择结构第一节  if选择结构第二节   switch语句(多分支条件语句),现在分享给大家,希望可以做个参考。

  前面我们看到的代码都是顺序执行的,也就是先执行第一条语句,然后是第二条、第三条……一直到最后一条语句,这称为顺序结构。
  但是对于很多情况,顺序结构的代码是远远不够的,比如一个游戏限制了只能成年人使用,儿童因为年龄不够,没有权限使用。这时候程序就需要做出判断,看用户是否是成年人,并给出提示。

 

第一节  if选择结构

 

一、if语句(单分支结构)

 

格式1:

        if  (条件表达式)         语句1;
 
功能:如果条件表达式的值为真,即条件成立,语句1将被执行。否则,语句1将被忽略(不被执行),程序将按顺序从整个选择结构之后的下一条语句继续执行。
 
说明:格式中的“条件表达式”必须用圆括号括起来。
 
执行流程如下图所示  :  
 
 
例3.1  读入一个整数a,若这个数为偶数在屏幕上输出yes
 
复制代码
1
2
3
4
5
6
7
8
#include<iostream> using namespace std; int main() { int a; cin>>a; if(a%2==0) cout<<"yes"<<endl; //关系运算符==用来表达该符号的左右两边是否相等,不要写成赋值号=。 return 0; }

思考:如果改成为奇数在屏幕上输出NO,该如何改程序。

 
 
例3.2  读入一个数,若这个数大于1并且小于100,则输出yes。
 
复制代码
1
2
3
4
5
6
7
8
9
#include<iostream> using namespace std; int main() { int a; cin>>a; if (a>1 && a<100) cout<<"yes"; return 0; }

  

格式2 :

    if  (条件表达式)  
    {
      语句1;
      语句2;
      ……
     }   
 
 
功能:若条件成立时,则按顺序执行花括号内的多个句子,花括号{ }内的多个语子,称为语句块或复合语句。      
 
说明:书写语句块时,左右花括号要对齐,组成语句块的各语句要相对花括号缩进一层并对齐。
 
 
例3.3  读入a,b,按从小到大顺序输出
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
#include<bits/stdc++.h> using namespace std; int main ( ) { float a,b,c; cin>>a>>b; if (a>b) { c=a; a=b; b=c; } cout<<"a="<<a<<" b="<<b; return 0; }

 

二、if-else语句(双分支结构)

格式1:

         if  (条件表达式)       语句1;

         else                        语句2;

功能:如果(条件表达式)的值为“真” ,即条件成立,则执行语句1。执行完“语句1”后,继续执行整个if-else语句的后继语句; 

           如果(条件表达式)的值为“假” ,即条件不成立,则跳过语句1选择执行“语句2” 。执行完语句2后,继续执行整个if-else语句的后继语句;

           也就是说if-else语句总是根据(条件表达式)的结果,选择“语句1”和“语句2”中的一个执行,执行完以后,整个if-else就算执行完了。

注意:语句1和语句2后面都要写分号 “;” 。

例3.4  根据用户输入的成绩,判断是否通过了考试。
复制代码
1
2
3
4
5
6
7
8
#include<bits/stdc++.h> using namespace std; int main() { int c; cin >> c; if (c>=60) cout<<"pass! n"; //语句1 句尾要写分号 else cout<<"sorry!n"; //语句2 句尾要写分号 }

格式2 :

if  (条件表达式)   { 语句1;   语句2;   ……    }

else                    {  语句1;   语句2; ……      }

说明:若分支语句由多个句子构成,我们必须把这些句子括在一对花括号{ }内。

 

练习:用双分支语句 if  ---  else编写:  读入a,b,按从小到大顺序输出。

 

三   if语句的嵌套

在if语句中又可包含一个或多个if 语句,这种形式称为if语句的嵌套。
 
一般形式如下:        
       if(条件表达式)            
             if(条件表达式)      {语句1}    ;
             else                          {语句2}    ;      
      else              
            if(条件表达式)       {语句1}   ;
            else                           {语句2}   ;
 
注意: if 与else的配对关系,else 总是与其前面最近的尚未配对的if结合
 
如果if与else的数目不一样,为实现程序设计者的企图,可以加花括弧来确定配对关系。
例如:        
       if(条件表达式)
                  {if(条件表达式) 语句1 };
       else     语句2          ;
 
如果没有花括号,else与第二个if配对,这人例子里的花括号“{ }”限定了内嵌if 语句的范围,因此else与第一个if配对。
 
例3.7
复制代码
1
2
3
4
5
6
7
8
9
#include<bits/stdc++.h> using namespace std; int main () { int n; cin>>n; if (n>6) if (n<12) cout<<"6<n<12"; else cout<<"n<=6"; }

输入3    输出:

输入7   输出:

输入15    输出:

 

若想让else部分与第一个if语句配对,则要引入一个复合语句,将上述语句写成如下形式:

复制代码
1
2
3
4
5
6
7
8
9
#include<bits/stdc++.h> using namespace std; int main () { int n; cin>>n; if (n>6) { if (n<12) cout<<"6<n<12";} else cout<<"n<=6"; }

输入3    输出:

输入7   输出:

输入15    输出:

 

 

第二节   switch语句(多分支条件语句)

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

语句格式:  

switch(表达式)  

{ case  常量表达式1:     语句序列1;     break;

  case  常量表达式2:     语句序列2;     break;

  ……

  case  常量表达式n:     语句序列n;     break;

  default:                             语句序列n+1;  

}            

说明:

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

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

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

执行过程:

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

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

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

4、当执行到复合语句最后的右花括号时就结束整个switch语句的执行。

注意:

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

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

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

4、每一条case语句后要用break语句中断。如果case语句后没有break语句,则程序运行完成当前case语句后,继续运行下一条case语句。

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

6、程序设计风格提示:写switch语句时,switch(表达式)单独一行,各case分支和default分支要缩进两格并对齐,分支处理语句要相对再缩进两格,以体现不同层次的结构。

例3.8  根据从键盘上输入的表示星期几的数字,对应输出它的英文名称。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream> using namespace std; int main() { int weekday; cin>>weekday; switch(weekday) { 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!"; } }

例3.9:计算器程序,编程设计一个简单的计算器程序,要求根据用户从键盘输入如下形式的表达式:

操作数1    运算符op    操作数2

然后,计算并输出表达式的值

指定的运算符为     加(+)     减(-)     乘(*)     除(/)

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream> using namespace std; int main() { int data1, data2; /*定义两个操作符*/ char op; /*定义运算符*/ printf("Please enter the expression:"); scanf("%d%c%d",&data1,&op,&data2); /*输入运算表达式*/ switch (op) { case '+':printf("%d + %d = %dn",data1,data2,data1+data2);break;/*处理加法*/ case '-':printf("%d - %d = %dn",data1,data2,data1-data2);break;/*处理减法*/ case '*':printf("%d * %d = %dn",data1,data2,data1*data2);break;/*处理乘法*/ case '/':if(0==data2) printf("Division by zero!n"); else printf("%d/%d = %dn",data1,data2,data1/data2); break; /*处理除法*/ default: printf("Unknown operator! n"); } }

例3.10  期末来临了,班长小Q决定将剩余班费X元钱,用于购买若干支钢笔奖励给一些学习好、表现好的同学。已知商店里有三种钢笔,它们的单价为6元、5元和4元。小Q想买尽量多的笔(鼓励尽量多的同学),同时他又不想有剩余钱。请您编一程序,帮小Q制订出一种买笔的方案。

【分析】

        对于以上的实际问题,要买尽量多的笔,易知都买4元的笔肯定可以买最多支笔。因此最多可买的笔为x div 4支。由于小q要把钱用完,故我们可以按以下方法将钱用完:

        若买完x div 4支4元钱的笔,还剩1元,则4元钱的笔少买1支,换成一支5元笔即可;若买完x div 4支4元钱的笔,还剩2元,则4元钱的笔少买1支,换成一支6元笔即可;

        若买完x div 4支4元钱的笔,还剩3元,则4元钱的笔少买2支,换成一支5元笔和一支6元笔即可。

        从以上对买笔方案的调整,可以看出笔的数目都是x div 4,因此该方案的确为最优方案。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream> using namespace std; int main() { int a,b,c,x,y; //a,b,c分别表示在买笔方案中,6元、5元和4元钱笔的数目,x,y分别表示剩余班费和买完最多的4元笔后剩的钱 cin>>x; //输入x c=x/4; //4元笔最多买的数目 y=x%4; //求买完c支4元笔后剩余的钱数y switch (y) //判断购买方案 { case 0: a=0; b=0; break; case 1: a=0; b=1; c--; break; case 2: a=1; b=0; c--; break; case 3: a=1; b=1; c-=2; break; } cout<<a<<' '<<b<<' '<<c<<endl; //三个数间以空格隔开 return 0; }

 

四、练习

1、在北大校园里,没有自行车,上课办事会很不方便.但实际上,并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间.假设找到自行车,开锁并骑上自行车的时间为27秒;停车锁车的时间为23秒;步行每秒行走1.2米,骑车每秒行走3.0米。请判断走不同的距离去办事,是骑车快还是走路快。

2、给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 

3、一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

4、将字母'A','B','C','D'分别转换成1,2,3,4,其他的字符转换成5

5、编一个“念数字”的程序,它能让计算机完成以下工作:当你输入一个0至9之间的数后,计算机就会用汉字拼音印出这个数的念结束。

6、现在学生档案中经常采用等级评价,于是李老师想将百分制成绩转化为等级。
    李老师的成绩单上的成绩都是整数,他约定等级与百分制之间的对应关系如下:
     A:90~100     B:80~89    C:60~79    D:0~59
    请编程将任意给定的分数转化为等级。

7、移动的机器人
    在一个平面直角坐标系上,一个机器人处于某格点(x0,y0)处,格点的坐标均为整数。有一个遥控器可以让机器人实现7种可能的运动方式,它们依次是:
  1、向左走一个单位;
  2、向右走一个单位;
  3、向上走一个单位;
  4、向下走一个单位;
  5、走到格点(x0,y0)关于x轴的对称点;
  6、走到格点(x0,y0)关于y轴的对称点;
  7、走到格点(x0,y0)关于原点的对称点;

其中,以横坐标x值增大为向右,以纵坐标y值增大为向上。现已知机器人的初始位置(x0,y0)以及遥控器此次发出的指令编号i(1<=i<=9),问机器人执行指令后所到的位置。
输入:三个整数x0,y0,i,彼此之间用空格隔开。 
输出:两个整数x和y,即机器人移动后的坐标。 

8、学校超市里有三种笔,单价分别为6元、5元、4元,班长想用余下的班费(≥8)购买尽可能多的笔,同时他又不想有余钱,帮班长订出一种买笔方案,并输出每种笔的数目。  

9、 若a=true,b=false, x=7,y=12 ,m=3 ,n=35求下列布尔表达式的值。
     a and not (m>n) and (x<y-m) or a and b 

10、输入三个数,按由大到小的顺序打印出来这三个数。

11、输入一个三位数,将数字重新排列,组成一个尽可能大的三位数,打印出这个数。

12、输入三个数,判断它们是否可以组成一个三角形。

13、输入任意一个字符,判断其ASC码是否是奇数。若是输出‘YES’,否则输出‘NO’。

14、判断一个正整数是否是两位数(即大于等于10,且小于等于99)

15、判断一个数n能否同时被3和5整除。

16、输入三角形的三个边,判断它是何类型的三角形(等边,等腰,直角,普通,或不是三角形)

17、试编写一个根据随机产生两个操作数和随机产生一个运算符,由计算机输出运算结果的程序。这里只考虑加(+)、减(-)、乘(*)、除(/)四种运算。

18、答题游戏:
         计算机随机出题,你答题,并给出相应提示。
         两个操作数均为两位数,运算符为+、-、*、/,
         答对输出:You are so clever.答错输出:Sorry
样例输出格式如下:q
14+32=? 46
You are so clever
 

 

最后

以上就是干净巨人最近收集整理的关于C++语言篇 第三章 选择结构第一节  if选择结构第二节   switch语句(多分支条件语句)的全部内容,更多相关C++语言篇内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(87)

评论列表共有 0 条评论

立即
投稿
返回
顶部