首页 > 代码库 > C++primer(第五版)第五章总结(含部分习题源代码及解析)语句

C++primer(第五版)第五章总结(含部分习题源代码及解析)语句

        本章讲解一些基本的语句,有C语言基础的会发现大致上差不多!当然也有一些细微的差别;

      条件语句:

       A:if语句

     和C语言的易错点一样:将条件语句写成赋值语句的错误;编译器通过编译,对功能的实现造成很大影响,需要特别注意;

    例子:if(max=1),本应该是if(max==1);这样的错误看似自己不会犯,经常由于各种原因总会出现的,不过当自己知道易错地方后,自己就会很容易修改!

     B:switch语句

     我们也很熟悉了,熟悉了应该如何懂得去灵活运用;如果下面的两个有关switch语句和break语句代码,能够很快的看出输出结果,则说明理解了,需要我们根据这种特性灵活运用!

          输入:huananligongdxue

          代码1:

#include <iostream>
using namespace std;
int main()
{
   unsigned acnt=0,ecnt=0,icnt=0,ocnt=0,ucnt=0;
   char ch;
   cout<<"请输入字符,按Ctrl+z结束"<<endl;
   while(cin>>ch)
   {


       switch(ch)
       {


       case ‘a‘:
        ++acnt ;
         break; 
       case ‘e‘:
        ++ecnt;
        break; 
       case ‘i‘:
        ++icnt;
       break;
       case ‘o‘:
        ++ocnt;
        break;
       case ‘u‘:
        ++ucnt;
        break;
       }
   }
   cout<<"Number of vowel a:\t"<<acnt<<‘\n‘<<"Number of vowel e:\t"<<ecnt<<‘\n‘<<"Number of vowel i:\t"<<icnt<<‘\n‘
   <<"Number of vowel o:\t"<<ocnt<<‘\n‘<<"Number of vowel u:\t"<<ucnt<<endl;
    return 0;
}

           代码2:

#include <iostream>
using namespace std;
int main()
{
   unsigned acnt=0,ecnt=0,icnt=0,ocnt=0,ucnt=0;
   char ch;
   cout<<"请输入字符,按Ctrl+z结束"<<endl;
   while(cin>>ch)
   {


       switch(ch)
       {


       case ‘a‘:
        ++acnt ;


       case ‘e‘:
        ++ecnt;


       case ‘i‘:
        ++icnt;


       case ‘o‘:
        ++ocnt;


       case ‘u‘:
        ++ucnt;

       }
   }
   cout<<"Number of vowel a:\t"<<acnt<<‘\n‘<<"Number of vowel e:\t"<<ecnt<<‘\n‘<<"Number of vowel i:\t"<<icnt<<‘\n‘
   <<"Number of vowel o:\t"<<ocnt<<‘\n‘<<"Number of vowel u:\t"<<ucnt<<endl;
    return 0;
}

          我们很快得出结果,第一种明显是碰到输入的字符就会增加相对应字符数目后,就跳出循环;计算相对应字母的次数;代码2由于没有break跳出,就会执行继续下面的语句,从而结果肯定是递增序列;从上到下都叠加;

           结果如下:

         代码1结果:

           代码2结果:

      continue语句:中断当前的迭代,但是继续执行循环;


      习题5.41和5.20一起讲解:

       代码如下:

 #include <iostream>

using namespace std;

int main()
{
    string ch,sw,mch;
    int max=1,b=1;
    cout<<"输入测试单词:"<<endl;

    while(cin>>ch)
    {


        if(sw==ch)
        {
             ++b;


        }


        else
        {
            if(b>max)
            {
                max=b;
                mch=sw;
            }
            else
                b=1;
        }
        sw=ch;

    }
    if(max==1)
       cout<<"单词没有连续出现\n"<<endl;
    else
        cout<<"单词"<<mch<<"连续的最大次数"<<max<<endl;
    
    return 0;
}

  结果:


    上面是5.14的程序,5.20只是对其进行判断,b=2时,结束循环!上面虽然解决了5.14的问题,只是不足的是边界问题考虑的不是很周到,如果有几个相同的最长单词,也只能打印一个最长的!需要改进!!!!

        程序运用的codeblocks可能有些编译器会存在兼容问题!










C++primer(第五版)第五章总结(含部分习题源代码及解析)语句