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;
}
}
}