C++ Primer 习题(第五章附答案)

练习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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值