5.1

空语句只有一个";"。如果什么也不想做可以使用空语句。

5.2

用花括号{}括起来的叫块,也叫复合语句。有多条语句作用在同一个作用域时,需要用花括号括起来。

5.3

降低了。

5.4

(a)每次迭代时候会初始化iter,但是iter缺少初值,所以这段代码根本不会通过编译。另外这里的括号需要一个bool类型的,而定义迭代器根本不会返回一个bool类型。假如上面那些问题都可以通过,每次迭代都会初始化这个iter,会导致死循环。

(b)我试了一下编译未通过是因为没找到适合的find函数。即使通过了仍然存在上个题里的问题。

5.5

  1. int main()
  2. {
  3. int score;
  4. cin>>score;
  5. ) cout<<"A++"<<endl;
  6. <=score&&score<=) cout<<"A"<<endl;
  7. <=score&&score<=) cout<<"B"<<endl;
  8. <=score&&score<=) cout<<"C"<<endl;
  9. <=score&&score<=) cout<<"D"<<endl;
  10. else cout<<"D"<<endl;
  11. ;
  12. }

5.6

5.7

(a)第二行语句缺少分号

(b)第二三行应该用{}括起来

(c)对于一个if如果get_value()返回一个0,if下的语句将无法执行

    对于第二个if,ival不属于它的作用域内

(d)if内的条件永远都不会为真

5.8

当if语句多余else语句的时候,我们将不知把else语句分配给哪个if语句。这样的else语句称为悬垂else。

在C++语言中,else与离它最近的尚未匹配的if匹配。

5.9

写错了。。我用的是switch。。if也是同样。。懒得改了。。

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. using namespace std;
  5. int solve(const string &str)
  6. {
  7. ;
  8. ; i<str.size(); ++i)
  9. {
  10. switch(str[i])
  11. {
  12. case 'a':
  13. ans++;
  14. break;
  15. case 'e':
  16. ans++;
  17. break;
  18. case 'i':
  19. ans++;
  20. break;
  21. case 'o':
  22. ans++;
  23. break;
  24. case 'u':
  25. ans++;
  26. break;
  27. }
  28. }
  29. return ans;
  30. }
  31. int main()
  32. {
  33. ;
  34. string str;
  35. while(cin>>str)
  36. ans+=solve(str);
  37. cout<<ans<<endl;
  38. ;
  39. }

关于switch语句,如果在case后面(如果该case不是最后一个case的话)定义新的变量,要求该变量不能被初始化否则会编译错误,允许赋值。

5.10

  1. using namespace std;
  2. int solve(const string &str)
  3. {
  4. ;
  5. ; i<str.size(); ++i)
  6. {
  7. if(str[i]=='a'||str[i]=='A') ans++;
  8. else if(str[i]=='e'||str[i]=='E') ans++;
  9. else if(str[i]=='i'||str[i]=='I') ans++;
  10. else if(str[i]=='o'||str[i]=='O') ans++;
  11. else if(str[i]=='u'||str[i]=='U') ans++;
  12. }
  13. return ans;
  14. }
  15. int main()
  16. {
  17. ;
  18. string str;
  19. while(cin>>str)
  20. ans+=solve(str);
  21. cout<<ans<<endl;
  22. ;
  23. }

5.11

  1. using namespace std;
  2. int solve(const string &str)
  3. {
  4. ;
  5. ; i<str.size(); ++i)
  6. {
  7. if(isspace(str[i])) ans++;
  8. else if(str[i]=='a'||str[i]=='A') ans++;
  9. else if(str[i]=='e'||str[i]=='E') ans++;
  10. else if(str[i]=='i'||str[i]=='I') ans++;
  11. else if(str[i]=='o'||str[i]=='O') ans++;
  12. else if(str[i]=='u'||str[i]=='U') ans++;
  13. }
  14. return ans;
  15. }
  16. int main()
  17. {
  18. ;
  19. string str;
  20. while(cin>>str)
  21. ans+=solve(str);
  22. cout<<ans<<endl;
  23. ;
  24. }

5.12

  1. int solve(const string &str)
  2. {
  3. ;
  4. ; i<str.size(); ++i)
  5. {
  6. ]=='f')
  7. {
  8. if(str[i]=='f'||str[i]=='l'||str[i]=='i')
  9. ans++;
  10. }
  11. }
  12. return ans;
  13. }
  14. int main()
  15. {
  16. ;
  17. string str;
  18. while(cin>>str)
  19. ans+=solve(str);
  20. cout<<ans<<endl;
  21. ;
  22. }

5.13

(a)每个case后面都缺少一个break

(b)第四行会编译错误。case 1不是最后一个case,所以它定义的int ix不能被初始化。

(c)case 后面只能由一个常量,不能多个

(d)case后面只能跟常量,不能跟变量。在这几个变量的定义前加const即可。

5.14

  1. using namespace std;
  2. int main()
  3. {
  4. string word,last,best;
  5. ,maxi=;
  6. while(cin>>word)
  7. {
  8. )
  9. ans=;
  10. else
  11. {
  12. if(word==last)
  13. ans++;
  14. else
  15. ans=;
  16. }
  17. last=word;
  18. if(maxi<ans)
  19. {
  20. maxi=ans;
  21. best=last;
  22. }
  23. }
  24. ) cout<<"任何单词都没有连续出现过!"<<endl;
  25. else cout<<best<< " 连续出了 "<<maxi<< "次"<<endl;
  26. ;
  27. }

5.15

(a)ix的作用域仅在for循环的括号和后面的花括号里面,下面的if语句中ix已没有定义

(b)for循环写错了,少了一部分。应该这么写:for(;ix!=sz;++ix){}

(c)这里由于ix和sz同步同速增长,所以只要ix!=sz曾经为真,那么它将永远不会为假

5.16

视情况而定。略。

5.17

  1. using namespace std;
  2. bool judge(const vector<int>& a,const vector<int>& b)
  3. {
  4. ; i<a.size(); ++i)
  5. if(a[i]!=b[i])
  6. return false;
  7. return true;
  8. }
  9. int main()
  10. {
  11. vector<,,,},vecb {,,,,,,};
  12. if(veca.size()<vecb.size()&&judge(veca,vecb))
  13. cout<<"a是b的前缀!"<<endl;
  14. else if(veca.size()>=vecb.size()&&judge(vecb,veca))
  15. cout<<"b是a的前缀!"<<endl;
  16. else
  17. cout<<"不满足前缀关系!"<<endl;
  18. ;
  19. }

5.18

(a)首先do与while之间应该用{}括起来,其次这是个死循环

(b)在while内定义的ival,在{}内无法使用,因为不在其作用域内

(c)在{}定义的变量ival,在while()无法使用。

5.19

  1. int main()
  2. {
  3. string a,b;
  4. cin>>a>>b;
  5. do
  6. {
  7. if(a.size()<b.size())
  8. cout<<a<<endl;
  9. else
  10. cout<<b<<endl;
  11. }
  12. while(cin>>a>>b);
  13. ;
  14. }

5.20

  1. int main()
  2. {
  3. string last,word;
  4. bool out=false;
  5. while(cin>>word)
  6. {
  7. if(word==last)
  8. {
  9. out=true;
  10. break;
  11. }
  12. last=word;
  13. }
  14. if(out) cout<<last<<endl;
  15. else cout<<"没有任何单词是连续重复出现的!"<<endl;
  16. ;
  17. }

5.21

  1. int main()
  2. {
  3. string last,word;
  4. bool out=false;
  5. while(cin>>word)
  6. {
  7. ]))
  8. {
  9. out=true;
  10. break;
  11. }
  12. last=word;
  13. }
  14. if(out) cout<<last<<endl;
  15. else cout<<"没有任何单词是连续重复出现的!"<<endl;
  16. ;
  17. }

5.22

goto同switch类似,不能跳过一个有初始化的变量。可以向后跳。

  1. )
  2. {
  3. int sz=get_size();
  4. )
  5. break;
  6. }

5.23

  1. int main()
  2. {
  3. int a,b;
  4. while(cin>>a>>b)
  5. cout<<a/b<<endl;
  6. ;
  7. }

5.24

注意runtime_error该异常定义在stdexcept头文件里。

没有设定catch语句的时候,程序会转到名为terminate的标准库函数。

  1. #include<iostream>
  2. #include<stdexcept>
  3. using namespace std;
  4. int main()
  5. {
  6. int a,b;
  7. while(cin>>a>>b)
  8. {
  9. ) throw runtime_error("b is zero!");
  10. cout<<a/b<<endl;
  11. }
  12. ;
  13. }

控制台输出:

  1. terminate called after throwing an instance of 'std::runtime_error'
  2. what(): b is zero!
  3.  
  4. This application has requested the Runtime to terminate it in an unusual way.
  5. Please contact the application's support team for more information.

5.25

  1. int a,b;
  2. while(cin>>a>>b)
  3. {
  4. try
  5. {
  6. ) throw runtime_error("b is zero!");
  7. cout<<a/b<<endl;
  8. }
  9. catch (runtime_error err)
  10. {
  11. cout<<err.what()<<endl;
  12. cout<<"是否继续? Y/N"<<endl;
  13. ];
  14. cin>>s;
  15. ]=='N') break;
  16. }
  17. }

try和catch必须同时出现,不能只有try没有catch。try和catch有各自的作用域,内部变量无法相互访问。当try中抛出异常将寻找catch中匹配的异常声明,如果找不到交给terminate,否则执行相应catch下的语句。

如果程序如下

  1. int main()
  2. {
  3. int a,b;
  4. while(cin>>a>>b)
  5. {
  6. try
  7. {
  8. ) throw runtime_error("b is zero!");
  9. cout<<a/b<<endl;
  10. }
  11. catch (range_error err)
  12. {
  13. cout<<err.what()<<endl;
  14. cout<<"是否继续? Y/N"<<endl;
  15. ];
  16. cin>>s;
  17. ]=='N') break;
  18. }
  19. }
  20. ;
  21. }

输入1 0 将转到terminate。因为找不到匹配的catch。

而如下程序:

  1. int main()
  2. {
  3. int a,b;
  4. while(cin>>a>>b)
  5. {
  6. try
  7. {
  8. ) throw runtime_error("b is zero!");
  9. cout<<a/b<<endl;
  10. }
  11. catch (exception err)
  12. {
  13. cout<<err.what()<<endl;
  14. cout<<"是否继续? Y/N"<<endl;
  15. ];
  16. cin>>s;
  17. ]=='N') break;
  18. }
  19. }
  20. ;
  21. }

输入输出如下:

  1. std::exception
  2. 是否继续? Y/N

它能够匹配到抛出的异常但是不提供额外的信息。

《C++primer》v5 第5章 语句 读书笔记 习题答案的更多相关文章

  1. 《C++primer》v5 第1章 开始 读书笔记 习题答案

    从今天开始在博客里写C++primer的文字.主要以后面的习题作业为主,会有必要的知识点补充. 本人也是菜鸟,可能有不对之处,还望指出. 前期内容可能会比较水. 1.1略 1.2略 1.3 cin和c ...

  2. 《C++primer》v5 第6章 函数 读书笔记 习题答案

    6.1 实参是在函数调用处填写的参数.形参是在函数体使用的参数. 实参是形参的初始值. 具体参见:http://blog.163.com/zhengguo_li/blog/static/7030148 ...

  3. 《C++primer》v5 第4章 表达式 读书笔记 习题答案

    4.1 105 4.2 *vec.begin()=*(vec.begin())//先调用点运算符,再解引用 *vec.begin()+1=(*vec.begin())+1//先解引用,再加一 4.3略 ...

  4. 《C++primer》v5 第7章 类 读书笔记 习题答案

    7.1.7.2.7.3 #include<iostream> #include<cstdio> #include<vector> #include<strin ...

  5. 《C++primer》v5 第8章 IO库 读书笔记 习题答案

    8.1.8.2 这一章不咋会啊.. istream &read(istream &is) { int a; auto old_state=is.rdstate(); is.clear( ...

  6. 《C++primer》v5 第3章 字符串、向量和数组 读书笔记 习题答案

    本章问题 1.char *p="hello world";与char p[]="hello world"的问题. 简单说前者是一个指向字符串常量的指针,后者是一 ...

  7. 《C++primer》v5 第2章 变量和基本类型 读书笔记 习题答案

    2.1 int,long long ,short 可表示范围和占用内存空间不同.具体与计算机有关. 无符号类型只能表示0和正数,带符号类型可以表示负数,0,正数. float是单精度,一般占用4个字节 ...

  8. C++primer(第五版)读书笔记&习题解答---CHAPTER 3

    C++标准库类型包括:string,vector和迭代器,其中string是可变长的字符序列,vector存放的是某种给定类型对象的可变长序列,迭代器是string和vector的配套类型,常被用于访 ...

  9. C++ Primer(第五版)读书笔记 & 习题解答 --- Chapter 3

    Chapter 3.1 1. using声明具有如下的形式: using namespace::name; Chapter 3.2 1. C++标准一方面对库类型所提供的操作做了规定,另一方面也对库的 ...

随机推荐

  1. 浅谈android binder机制

    binder机制 是谷歌优化在android上更适合终端的IPC(多进程通信方式),满足系统对通信方式,传输性能和安全性的要求. 特性: 1. 用驱动程序来推进进程间的通信.2. 通过共享内存来提高性 ...

  2. table清除样式大全

    table{width:100%;text-align:center;border-collapse:collapse;border-spacing:1;border-spacing:0; }tabl ...

  3. OpenGL利用模板测试实现不规则裁剪

    本文是原创文章,如需转载,请注明文章出处 在游戏开发中,经常会有这样的需求:给定一张64x64的卡牌素材,要求只显示以图片中心为圆点.直径为64的圆形区域,这就要用到模板测试来进行不规则裁剪. 实现不 ...

  4. 推荐10款免费的在线UI测试工具

    发布网站之前至关重要的一步是网站测试.网站测试要求我们全面地运行网站并通过所有基本测试,如响应式设计测试.安全测试.易用性测试.跨浏览器兼容性.网站速度测试等. 网站测试对SEO.搜索引擎排名.转换率 ...

  5. 输入scanner,if-else

    import java.util.Scanner; public class Job{ public static void main(String[] args){ Scanner scanner ...

  6. Scrapy--1安装和运行

    1.Scrapy安装问题 一开始是按照官方文档上直接用pip安装的,创建项目的时候并没有报错, 然而在运行 scrapy crawl dmoz 的时候错误百粗/(ㄒoㄒ)/~~比如: ImportEr ...

  7. Mybatis + Mysql 插入数据时中文乱码问题

    近日跟朋友一起建立一个项目,用的是spring+mybatis+mysql. 今天碰到一个mybatis向mysql中插入数据时,中文显示为'???'的问题,拿出来说下. 对于数据库操作中出现的中文乱 ...

  8. .net 项目 调用webservice 出错,异常信息:对操作“xxx”的回复消息正文进行反序列化时出错。解决方案。

    项目运行好好的,增加并更新WebService后,出错,捕获异常信息为:对操作“xxx”的回复消息正文进行反序列化时出错.解决方案. 认真分析异常信息后,得到关键提醒: {"读取 XML 数 ...

  9. VC++使用Pro*CC++

    几种数据库访问技术的比较 由上所述, Visual C++ 通过以上方法都可以访问Oracle 数据 库, 但是上述方法各有优缺点.ODBC 出现得比较早, 几乎支持所 有的关系型数据库, 而且有MF ...

  10. HTML <span> 标签

    定义和用法: <span>标签被用来组合文档中的行内元素.在行内定义一个区域,也就是一行内可以被<span>划分成好几个区域,从而实现某种特定效果.<span>本身 ...