练习5.13

Posted dark-king

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了练习5.13相关的知识,希望对你有一定的参考价值。

5.13:下面显示的每个程序都含有一个常见的编程错误,指出错误在哪里,然后修改它们。

(a) unsigned aCnt=0, eCnt= 0,iouCnt=0;

    char ch = next_text();

    switch (ch)  {

       case ‘a‘ :  aCnt++;

       case ‘e‘ :  eCnt++;

       default :  iouCnt++;

    }

(b)unsigned index = some_value();

    switch  (index)  {

      case 1 :

          int ix=get_value();

          ivec[ ix ] = index;

          break;

      default :

          ix = ivec.size() -1;

          ivec [ ix ] = index;

      }

(c)unsigned evenCnt = 0,oddCnt = 0;

   int digit = get_num()%10;

   switch (digit)  {

     case 1,3,5,7,9:

          oddcnt++;

          break;

     case 2,4,6,8,10 :

          evencnt++;

          break;

    }

(d)unsigned ival =512, jval=1024,kval=4096;

   unsigned bufsize;

   unsigned swt = get_bufCnt();

   switch(swt) {

      case ival :

        buffsize=ival * sizeof(int);

        break;

      case jval :

        buffsize = jval * sizeof(int);

        break;

      case kval :

        bufsize = kval *sizeof(int);

        break;

    }

Ans:a)如果输入的是a,那么所有的计数变量(aCnt、eCnt、iouCnt)都会递增;如果输入的是b,那么计数变量(eCnt、iouCnt)都会递增。

    修改后的程序:

     unsigned aCnt=0, eCnt= 0,iouCnt=0;

      char ch = next_text();

      switch (ch)  {

         case ‘a‘ :  aCnt++;

               break;

         case ‘e‘ :  eCnt++;

                break;

         default :  iouCnt++;

                break;

      }

    b)C++语言规定不允许跨过一个初始化的变量,而跳转到使用这个变量的地方,而该程序可能发生跳转。

      修改之后:

        unsigned index = some_value();

        int ix=get_value();

          switch  (index)  {

            case 1 :

                ivec[ ix ] = index;

                break;

            default :

                ix = ivec.size() -1;

                ivec [ ix ] = index;

            }

  c)C++规定case标签后面只能放一个值

    修改后:

   unsigned evenCnt = 0,oddCnt = 0;

   int digit = get_num()%10;

   switch (digit)  {

     case 1:

     case 3:

     case 5:

     case 7:

     case 9:

          oddcnt++;

          break;

     case 2 :

     case 4:

     case 6:

     case 8:

     case 10:

          evencnt++;

          break;

    }

  d)case标签后面应该是整型常量表达式,而该程序的case标签后面的值不是常量。

    修改后:

    const unsigned ival =512, jval=1024,kval=4096;

    unsigned bufsize;

    unsigned swt = get_bufCnt();

       switch(swt) {

          case ival :

            buffsize=ival * sizeof(int);

            break;

          case jval :

            buffsize = jval * sizeof(int);

            break;

          case kval :

            bufsize = kval *sizeof(int);

            break;

        }

以上是关于练习5.13的主要内容,如果未能解决你的问题,请参考以下文章

[日常] Go语言圣经-匿名函数习题2

Python 输入输出练习,运算练习,turtle初步练习

Python输入输出练习,运算练习,turtle初步练习

Python输入输出练习,运算练习,turtle初步练习

Python输入输出练习,运算练习,turtle初步练习

练习_使用Lambda表达式无参数无返回值的练习练习_使用Lambda表达式有参数有返回值的练习