练习5.1 什么是空语句?什么时候会用到空语句?
空语句是最简单的语句,空语句由一个单独的分号构成。如果在程序的某个地方,语法上需要
一条语句但是逻辑上不需要,此时应该使用空语句,空语句什么也不做。
一种常见的情况是,当循环的全部工作在条件部分就可以完成时,我们通常会用到空语句。使用
空语句时最好加上注释,从而令代码的阅读者知道这条语句是有意省略内容的。
练习5.2 什么是块?什么时候会用到块?
块是指用花括号括起来的语句和声明的序列,也称为复合语句。一个块就是一个作用域,在
块中引入的名字只能在块内部以及嵌套在块中的子块里访问。如果在程序的某个地方,语法上
需要一条语句,但是逻辑上需要多条语句,此时应该使用块。块不需要以分号结束。
练习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)非法,原意while语句的控制结构当中定义一个string::itertor类型的变量iter,然后判断
iter是否达到了s的末尾,只要未到就执行循环。但该式把变量的定义和关系混合在了一起,如果
要使用iter与其他值比较,必须为iter赋初值
string::iterator iter = s.begin();
while (iter !=s.end())
{
++iter;
/*...*/
}
(b)非法,变量status定义在while循环控制结构的内部,其作用域仅限于while循环。if语句已
经位于while循环的作用域之外,status在if语句内是一个未命名的无效变量。要想在if语句中
继续使用status,需要把它定义在while循环之前。
bool status;
while (status = find(word)){
/*...*/}
if (!status){
/*...*/}
练习5.5 写一段自己的程序,使用if—else语句实现把数字成绩转换成字面成绩的要求。
#include<iostream>
using namespace std;
int main()
{
int grade;
cout << "please enter your grade" << endl;
cin >> grade;
if (grade < 0 || grade>100)
{
cout << "the grade is illegal" << endl;
return -1;
}
else if (grade == 100) //处理满分
{
cout << "the grade is A++" << endl;
return -1;
}
else if (grade < 60) //处理不及格
{
cout << "the grade is F" << endl;
return -1;
}
int iu = grade / 10; //成绩的十位数
int it = grade % 10; //成绩的个位数
string score, level, lettergrade;
//根据成绩的十位数字确定score
if (iu == 9)
{
score = "A";
}
else if (iu == 8)
{
score = "B";
}
else if (iu == 7)
{
score = "c";
}
else
score = "D";
//根据成绩个位数字确定level
if (it < 3)
{
level = "-";
}
else if (it > 7)
{
level = "+";
}
else
{
level = "";
}
//累加求得等级成绩
lettergrade = score + level;
cout << "the grade is:" << lettergrade << endl;
return 0;
}
练习5.6 改写上一题的程序,使用条件运算符代替if-else语句。
#include<iostream>
using namespace std;
int main()
{
int grade;
cout << "please enter your grade" << endl;
cin >> grade;
if (grade < 0 || grade>100)
{
cout << "the grade is illegal" << endl;
return -1;
}
else if (grade == 100) //处理满分
{
cout << "the grade is A++" << endl;
return -1;
}
else if (grade < 60) //处理不及格
{
cout << "the grade is F" << endl;
return -1;
}
int iu = grade / 10; //成绩的十位数
int it = grade % 10; //成绩的个位数
string score, level, lettergrade;
//根据成绩的十位数字确定score
score = (iu == 9) ? "A"
: (iu == 8) ? "B"
: (iu == 7) ? "C" : "D";
//根据成绩个位数字确定level
level = (it < 3) ? "-"
: (it > 7) ? "+" : "";
//累加求得等级成绩
lettergrade = score + level;
cout << "the grade is:" << lettergrade << endl;
return