C++Primer第五版 习题答案 第五章 语句(Statements)

练习5.1

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

最简单的语句是空语句,空语句只有一个单独的分号:
;//null statement
如果在程序的某个地方,语法上需要一条语句但逻辑上不需要,此时应该使用空语句。

练习5.2

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

复合语句是指用花括号括起来的语句和声明的序列,复合语句也被称作块。
如果在程序的某个地方,语法上需要一条语句,但是逻辑上需要多条语句,则应使用复合语句。

练习5.3

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

#include <iostream>
int main()
{
   
   
    int sum = 0, val = 1;
    while (val <= 10)
        sum += val, ++val;
    std::cout << "Sum of 1 to 10 inclusive is " << sum << std::endl;
 
    return 0;
}

可读性降低了

练习5.4

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

(a) while (string::iterator iter != s.end()) {
   
    /* . . . */ }
(b) while (bool status = find(word)) {
   
    /* . . . */ }
		if (!status) {
   
    /* . . . */ }

(a)

std::string::iterator iter = s.begin();
while (iter != s.end()) {
   
    /* . . . */ }

(b)

bool status;
while (status = find(word)) {
   
   /* ... */}
if (!status) {
   
   /* ... */}

练习5.5

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

#include <iostream>
#include <vector>
#include <string>

using std::vector;
using std::string;
using std::cout;
using std::endl;
using std::cin;

int main()
{
   
   
    vector<string> scores = {
   
   "F", "D", "C", "B", "A", "A++"};

    int grade{
   
   0};
    while (cin >> grade) {
   
   
        string lettergrade;
        if (grade < 60)
            lettergrade = scores[0];
        else {
   
   
            lettergrade = scores[(grade - 50) / 10];
            if (grade != 100) {
   
   
                if (grade % 10 > 7)
                    lettergrade += "+";
                else if (grade % 10 < 3)
                    lettergrade += "-";
            }
        }

        cout << lettergrade << endl;
    }

    return 0;
}

练习5.6

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

#include <iostream>
#include <vector>
#include <string>

using std::vector;
using std::string;
using std::cout;
using std::endl;
using std::cin;

int main()
{
   
   
    vector<string> 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 = ival2
    else 
    	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) if (ival1 != ival2)
        ival1 = ival2;
    else ival1 = ival2 = 0;
(b) if (ival < minval)
    {
   
   
        minval = ival;
        occurs = 1;
    }
(c) int val;
    if (ival = get_value())
        cout << "ival = " << ival << endl;
    if (!ival)
        cout << "ival = 0\n";
(d) if (ival == 0)
        ival = get_value();

练习5.8

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

当一个if语句嵌套在另一个if语句内部时,很可能if分支会多于else分支。这时候我们怎么知道某个给定的else是和哪个if匹配呢。这个问题通常称作悬垂else。就C++而言,它规定else与离它最近的尚未匹配的if匹配的if匹配,从而消除了程序的二义性。

练习5.9

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

#include <iostream>
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值