《C++ Primer 4 Answer Book》 整理[6]——第6章 语句

6      语句

         416.10下面每段代码都暴露了一个常见的编程错误,请指出并修改之。

                   a)switch(ival){

                            case‘a’:aCnt++;

                            case’e’:eCnt++;

                            default:iouCnt++;

                   }

                   错误在于,各个case标号对应的语句块中缺少必要的break语句,从而当ival值为’a’时,aCnteCntiouCnt都会加1ival值为’e’时,eCntiouCnt都会加1

 

                   b)switch(ival){

                            case1:

                                     intix=get_value();

                                     ivec[ix]=ival;

                                     break;

                            default:

                                     ix=ivec.size()-1;

                                     ivec[ix]=ival;

                   }

                   错误在于,在case 1标号之后,default标号之前定义了变量ix。因为,对于switch结构,只能在它的最后一个case标号或default标号后面定义变量,以避免出现代码跳过变量的定义和初始化的情况。

                  

c)switch(ival){

                            case1,3,5,7,9:

                                     oddcnt++;

                                     break;

                            case2,4,6,8,10

                                     eventcnt++;        

                                     break;

                   }

                   错误在于,case标号中出现了多个值。因为一个case标号只能与一个值相关联。

 

                   d)intival=512, jval=1024, kval=4096;

                     int bufsize;

                     switch(swt){

                            caseival:

                                     bufsize=ival*sizeof(int);

                                     break;

                            casejval:

                                     bufsize=jval*sizeof(int);

                                     break;

                            casekval:

                                     bufsize=kval*sizeof(int);

                                     break;             

                   }

                   错误在于,case标号中不能使用ivaljvalkval。因为case标号中的值只能使用常量表达式,而ivaljvalkval都是变量。

        

         426.11解释下面的循环,更正你发现的问题

                   a)stringbufString,word;

                     while(cin>>bufString>>word){…}

                   每次读入两个string对象,直到遇到文件结束符;

 

                   b)while(vector<int>::iteratoriter!=ivec.end())

                            {…}

                   依次处理vector中的每个元素。此循环有错误,iter没有赋初值。

                   cwhile(ptr=0)

                            ptr=find_a_value();

                   调用find_a_value函数,讲返回值赋给ptr,直到ptr0.此循环有错误,条件表达式中应使用比较操作符,而不是赋值操作符。

        

                   d)while(boolstatus=find(word))

                            {word=get_next_word();}

                     if(!status)

                            cout<<Didnot find any words\n”;

                   每次调用get_next_word()获取一个word,然后调用find函数查找该word,直到找不到word为止。此循环有误,word没有赋初值。

        

         436.12编写一个小程序,从标准输入读入一系列string对象,寻找连续重复出现的单词。程序应该找出满足以下条件的单词的输入位置:该单词的后面紧跟着再次出现自己本身。跟踪重复次数最多的单词及其重复次数。输出重复次数的最大值,若没有单词重复则输出说明信息,例如输入是:hownow now now brown cow cow 则输出应表明”now”这个单词出现了三次

         答:#include <iostream>

                   #include<string>

                   usingnamespace std;

                   intmain()

                   {

                            stringpreWord,currWord;

                            stringrepWord;

                            intcurrCnt=0,maxCnt=1;

                            cout<<”Entersome words(Ctrl+z to end):”<<endl;

                            while(cin>>currWord){

                                     if(currWord==preWord)  ++currCnt;

                                     else{

                                               if(currCnt>maxCnt){

                                                        maxCnt=currCnt;

                                                        repWord=preWord;

                                               }

                                               currCnt=1;

                                     }

                                     preWord=currWord;

                            }

                            if(maxCnt!=1)

                                     cout<<””<<repWord<<””

                                               <<”repeatedfor”<<maxCnt

                                               <<”times”<<endl;

                            else

                                     cout<<”Thereis no repeated word.”<<endl;

                            return0;

                   }

        

         446.13详细解释下面语句是如何执行的

                   *dest++= *source++;

         答:执行过程如下,(1)指针dest1  2)指针source1  3)讲source原来指向的对象赋给dest原来指向的对象。

        

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值