[C++ primer] 第五章习题答案

[C++ primer] 第五章习题答案

5.1

如果在程序的某个地方,语法上需要一条语句但是逻辑上不需要,此时应该使用空语句。(注意此时应该加上注释,增加可读性)

5.2

复合语句(块)是用花括号括起来的(可能为空的)语句和声明的序列,复合语句也被称作块。
一个块就是一个作用域,在块中引入的名字只能在块内部以及嵌套在块中的子块里访问。
块不以分号作为结束。

5.3

会降低代码的可读性

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

5.4

定义在控制结构当中的变量只在相应语句的内部可见,一旦语句结束,变量也就超出其作用范围了
(a)iter没有初始化,直接与end比较非法
(b)if循环没有意义,并且变量status在if循环中不可用

5.8

当if语句嵌套时,可能会出现if语句的数量大于else语句的情况,这时,我们如何确定给定的else是和哪个if匹配的呢?这个问题就称作悬垂else。

c++中规定,else与离它最近且尚未匹配的if语句匹配。

5.10

#include <iostream>
#include <vector>


using namespace std;

int main()
{
	int cntA = 0, cntE = 0, cntI = 0, cntO = 0, cntU = 0;

	char temp;
	while (cin >> temp)
	{
		if (temp == 'a')
			cntA++;
		else if (temp == 'e')
			cntE++;
		else if (temp == 'i')
			cntI++;
		else if (temp == 'o')
			cntO++;
		else if (temp == 'u')
			cntU++;
	}
}

5.10

#include <iostream>
#include <vector>


using namespace std;

int main()
{
	int cntA = 0, cntE = 0, cntI = 0, cntO = 0, cntU = 0;

	char temp;
	while (cin >> temp)
	{
		switch (cval)
		{
			case 'a':
            case 'A':
				cntA++;
				break;
			case 'e':
			case 'E':
				cntE++;
				break;
			case 'i':
			case 'I':
				cntI++;
				break;
			case 'o':
			case 'O':
				cntO++;
				break;
			case 'u':
			case 'U':
				cntU++;
				break;
		}
	}
}

5.11

空格符‘ ’
制表符‘/t’
换行符’/n’

5.13

(a)没有break, 程序会在遇到字符a时把aCnt, eCnt, iouCnt全部+1
(b)ix应该在外部定义
(c)case标签中只能有一个常量,不能用逗号
(d)case标签必须是常量表达式

5.15

(a)if语句永远不成立
(b)ix没有初始化
(c)死循环

5.18

(a)没有加{}
(b)不允许在do while的条件部分定义变量
(c)condition使用的变量必须定义在循环体外部

5.23

#include <iostream>
#include <stdexcept>
#include <vector>


using namespace std;

int main()
{
	int a, b;
	while (cin >> a >> b)
	{
		try
		{
			if (b == 0)
				throw runtime_error("被除数不能为0");
			cout << a / b << endl;
			break;
		}
		catch (runtime_error err)
		{
			cout << err.what();
			cout << "是否要重新输入" << endl;
			char c;
			cin >> c;
			if (!cin || c == 'n') break;
		}
	}	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值