C++ Primer第五章①

C++ Primer

第五章 语句

和大多数语言一样,C++提供了条件执行语句、重复执行相同代码的循环语句和用于中断当前控制流的跳转语句。本章就是要详细介绍这些语句(其实我们在之前的程序中基本都用过了,所以大家看这一章完全不费力,就跟已经学过差不多)。

简单语句

C++语言的大多数语句都以分号结尾,我前面敲的代码应该都没有漏掉分号,一个表达式末尾加上分号就成了表达式语句。

int a = 5;
a + 5;
cout << a; //输出还是5

虽然执行了加法,但是相加的结果没被使用。

空语句

就是一个分号,它的用处在于:语法上需要一条语句但是逻辑上不需要,例如:

int a = 3;
for(; a<10; ++a) //for循环的第一条语句就是空语句
{
    cout << a;
}

正因为分号是一条空语句,所以我们既不能多写分号,又不能少写。

复合语句

用花括号括起来的就是复合语句,复合语句也叫块,一个块就是一个作用域,在块中引入的名字只能在块内部访问。用处在于:语法上只需要一条语句,逻辑上需要多条,例如:

while(a < 10)
{
    sum += a;
    ++a;
}

条件语句

C++语言提供了两种按条件执行的语句:

  • if语句,它根据条件决定控制流
  • switch语句,它计算一个整型表达式的值,然后根据这个值从几条执行路径中选择一条

    if语句

    我们通过一个成绩判定的程序来了解一下:
    const vector<string> scores = {"F", "D", "C", "B", "A", "A++"}; //把不打算改变的变量声明为const是个好习惯
    string res;
    if(grade < 60) //低于60分的为F
    {
      res = score[0];
    }
    else
    {
      res = scores[(grade - 50)/10]; //其他的就这么求,刚好对应
    }
    
    在程序比较复杂的时候,可能会有多个if-else语句嵌套,这时候怎么看else是和那个if对应呢?C++的规定是:else与离它最近的尚未匹配的if匹配。我的建议是:写程序的时候if和else的花括号都加上,注意代码缩进对齐,就不会搞错了。

    switch语句

    为什么有了if-else还要有switch呢,我觉得是这样,switch可以让我们在若干固定选项中做出选择(当然if-else也可以,不过switch写起来更简单)。我们来写一个程序:统计五个元音字母在文本中出现的次数:
    unsigned a = 0, e = 0, i = 0, o = 0, u =0;
    char ch;
    while(cin >> ch)
    {
      switch(ch)
      {
          case 'a':
              ++a;
              break;
          case 'e':
              ++e;
              break;
          case 'i':
              ++i;
              break;
          case 'o':
              ++o;
              break;
          case 'u':
              ++u;
              break;
      }
    }
    
    如果表达式和某个case标签的值匹配成功,程序从该标签之后的第一条语句开始执行,直到到达了switch的结尾或者是遇到break,上面代码中的break不可少,想想为什么。 break的作用是中断当前的控制流,这里break将控制权转移到switch语句外面。 我们来看看没有break会怎么样,来实现一个统计所有元音字母之和的程序:
    unsigned cnt = 0;
    char ch;
    while(cin >> ch)
    {
      switch(ch)
      {
          case 'a':
          case 'e':
          case 'i':
          case 'o':
          case 'u': //几个case写在一起,中间没有break,因此,只要ch是其中一个,cnt都会++
              ++cnt;
              break;
      }
    }
    
    default标签
    如果没有任何一个case标签能匹配上switch表达式的值,程序将执行紧跟在default标签后面的语句,例如:
    unsigned cnt = 0, other = 0;
    char ch;
    while(cin >> ch)
    {
      switch(ch)
      {
          case 'a':
          case 'e':
          case 'i':
          case 'o':
          case 'u': //几个case写在一起,中间没有break,因此,只要ch是其中一个,cnt都会++
              ++cnt;
              break;
          default:
              ++other;
              break;
      }
    }
    
#C++工程师#
全部评论

相关推荐

05-09 14:45
门头沟学院 Java
点赞 评论 收藏
分享
每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务