C++ Primer第五版_第五章习题答案(1~10)
创始人
2025-06-01 14:03:49

文章目录

      • 练习5.1
      • 练习5.2
      • 练习5.3
      • 练习5.4
      • 练习5.5
      • 练习5.6
      • 练习5.7
      • 练习5.8
      • 练习5.9
      • 练习5.10

练习5.1

什么是空语句?什么时候会用到空语句?

只含义一个单独的分号的语句是空语句。如:

;

如果在程序的某个地方,语法上需要一条语句但是逻辑上不需要,此时应该使用空语句。

while (cin >> s && s != sought);

练习5.2

什么是块?什么时候会用到块?

用花括号括起来的语句和声明的序列就是块。

{// ...
}

如果在程序的某个地方,语法上需要一条语句,而逻辑上需要多条语句,此时应该使用块

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

练习5.3

使用逗号运算符重写1.4.1节的 while 循环,使它不再需要块,观察改写之后的代码可读性提高了还是降低了。

while (val <= 10)sum += val, ++val;

代码的可读性反而降低了。

练习5.4

说明下列例子的含义,如果存在问题,试着修改它。

(a) while (string::iterator iter != s.end()) { /* . . . */ }
(b) while (bool status = find(word)) { /* . . . */ }if (!status) { /* . . . */ }
  • (a) 这个循环试图用迭代器遍历string,但是变量的定义应该放在循环的外面,目前每次循环都会重新定义一个变量,明显是错误的。
  • (b) 这个循环的 while 和 if 是两个独立的语句,if 语句中无法访问 status 变量,正确的做法是应该将 if 语句包含在 while 里面,

练习5.5

写一段自己的程序,使用if else 语句实现把数字转换为字母成绩的要求。

#include 
#include 
#include 
using std::vector; using std::string; using std::cout; using std::endl; using std::cin;int main()
{vector scores = { "F", "D", "C", "B", "A", "A++" };for (int g; cin >> g;){string letter;if (g < 60){letter = scores[0];}else{letter = scores[(g - 50) / 10];if (g != 100)letter += g % 10 > 7 ? "+" : g % 10 < 3 ? "-" : "";cout << letter << endl;}}return 0;
}

练习5.6

改写上一题的程序,使用条件运算符代替if else语句。

#include 
#include 
#include 
using std::vector; using std::string; using std::cout; using std::endl; using std::cin;int main()
{vector scores = { "F", "D", "C", "B", "A", "A++" };int grade = 0;while (cin >> grade){string lettergrade = grade < 60 ? scores[0] : scores[(grade - 50) / 10];lettergrade += (grade == 100 || grade < 60) ? "" : (grade % 10 > 7) ? "+" : (grade % 10 < 3) ? "-" : "";cout << lettergrade << endl;}return 0;
}

练习5.7

改写下列代码段中的错误。

(a) if (ival1 != ival2) ival1 = ival2else ival1 = ival2 = 0;
(b) if (ival < minval) minval = ival;occurs = 1;
(c) if (int ival = get_value())cout << "ival = " << ival << endl;if (!ival)cout << "ival = 0\n";
(d) if (ival = 0)ival = get_value();
  • (a) ival1 = ival2 后面少了分号。
  • (b) 应该用花括号括起来。
  • © if (!ival) 应该改为 else
  • (d) if (ival = 0) 应该改为 if (ival == 0)

练习5.8

什么是“悬垂else”?C++语言是如何处理else子句的?

C++语言规定else与它最近的尚未匹配的if匹配。

练习5.9

编写一段程序,使用一系列if语句统计从cin读入的文本中有多少元音字母。

#include using std::cout; using std::endl; using std::cin;int main()
{unsigned aCnt = 0, eCnt = 0, iCnt = 0, oCnt = 0, uCnt = 0;char ch;while (cin >> ch){if (ch == 'a') ++aCnt;else if (ch == 'e') ++eCnt;else if (ch == 'i') ++iCnt;else if (ch == 'o') ++oCnt;else if (ch == '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;
}

练习5.10

我们之前实现的统计元音字母的程序存在一个问题:如果元音字母以大写形式出现,不会被统计在内。编写一段程序,既统计元音字母的小写形式,也统计元音字母的大写形式,也就是说,新程序遇到’a’和’A’都应该递增 aCnt 的值,以此类推。

#include 
using std::cin; using std::cout; using std::endl;int main()
{unsigned aCnt = 0, eCnt = 0, iCnt = 0, oCnt = 0, uCnt = 0;char ch;while (cin >> ch)switch (ch){case 'a':case 'A':++aCnt;break;case 'e':case 'E':++eCnt;break;case 'i':case 'I':++iCnt;break;case 'o':case 'O':++oCnt;break;case 'u':case 'U':++uCnt;break;}cout << "Number of vowel a(A): \t" << aCnt << '\n'<< "Number of vowel e(E): \t" << eCnt << '\n'<< "Number of vowel i(I): \t" << iCnt << '\n'<< "Number of vowel o(O): \t" << oCnt << '\n'<< "Number of vowel u(U): \t" << uCnt << endl;return 0;
}

相关内容

热门资讯

辅助透视!hm3德州辅助怎么购... 辅助透视!hm3德州辅助怎么购买(辅助挂)辅助透视(有挂方法)-哔哩哔哩;最新版2024是一款经典耐...
玩家必看指南来来淮北麻将外挂辅... 你好:来来淮北麻将这个游戏允许作弊。确有作弊行为。很多在这款游戏中打牌的玩家都会发现,很多用户的牌都...
透明私人局!微扑克的辅助工具(... 微扑克的辅助工具透视辅助版本稳定性对比与推荐‌:透明私人局!微扑克的辅助工具(透视)确实是真的有挂(...
学识互通有无白金岛字牌圈外挂辅... 这篇文章讲的是游戏作弊的热点。希望对你有帮助。不要忘记书签这个网站。如何破解手机麻将游戏?。白金岛字...
透视挂!wpk俱乐部有没有外挂... 自定义wpk俱乐部有没有外挂系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器...