(九十)第六章复习题

1.请看下面两个计算空格和换行符数目的代码片段:

//Version 1

while (cin.get(ch)) //quit on eof

{

if (ch == ' ')

    spaces++;

if (ch == '\n')

    newlines++;

}

 

//Version 2

while (cin.get(ch)) //quit on eof

{

if (ch == ' ')

    spaces++;

else if (ch == '\n')

    newlines++;
}

第二种格式比第一种格式好在哪里呢?

 

答:第一个会做两次判断;

而第二个假如第一个if判断条件成立,那么第二个就自动跳过了,效率更高。

 

 

 

2.在程序清单6.2中,用ch+1替换++ch将发生什么情况呢?

 

答:ch+1替换++ch后,显示的是ASCII编码。

比如a的ASCII编码是97,a+1是98,而++a输出的是b。

 

 

 

 

3.请认真考虑下面的程序:

#include <iostream>

using namespace std;

 

int main()

{

char ch;

int ct1,ct2;

 

ct1=ct2=0;

while ((ch = cin.get()) != '$')

{

    cout<<ch;

    ct1++;

    if (ch='$')

        ct2++;

    cout<<ch;

}

cout <<"ct1 = "<<ct1<<", ct2 = "<<ct2<<"\n";

return 0;

}

假如输入如下(请在每行末尾按回车键):

Hi !

send $10 or $20 now!

则输出将是什么(还记得吗,输入被缓冲)?

 

答:

输出:

————————

Hi !

H$i$ $!

$send $10 or $20 now!

s$e$n$d$ $ct1 = 10, ct2 = 10

 

————————

 

 

 

4.创建表示下述条件的逻辑表达式:

a.weight大于或等于115,但小于125。

b.ch为q或Q。

c.x为偶数,但不是26.

d.x为偶数,但不是26的倍数。

e.donation为1000-2000或guest为1。

f.ch是小写字母或大写字母(假如小写字母是依次编码的,大写字母也是依次编码的,但在大小写字母间编码不是连续的)。

 

答:

a.

weight >= 115 && weight < 125

b.

ch == 'q' && ch == 'Q'

c.

x%2 == 0 && x !=26

d.

x%2 == 0 && x%26 != 0

e.

(donation >= 1000 && donation <=2000) || guest == 1

f.

(ch >= 'a' && ch <='z') || (ch>='A' && ch<='Z')

or

头文件#include<cctype>

中间isalpha(ch)

或用tolower(ch)||toupper(ch)

 

 

 

5.在英语中,“I will not not speak(我不会不说)”的意思与“I will speak(我要说)”相同。在C++中,!!x是否与x相同呢?

 

答:

不同,x可能表示变量,也可以在判断语句里表示true或者false(根据值),但!!x只能表示true或者false(跟x表示的true或者false值相同)。

 

 

 

6.创建一个条件表达式,其值为变量的绝对值。也是说,如果x变量为正,则表达式的值为x;但如果x为负,则表达式的值为-x——这是一个正值。

 

答:

x>0?x:-x

 

 

 

7.用switch改写下面的代码片段:

if (ch == 'A')

a_grade++;

else if (ch == 'B')

b_grade++;

else if (ch == 'C')

c_grade++;

else if (ch == 'D')

d_grade++;

else

f_grade++;

 

答:

switch(ch)

{

case 'A':a_grade++;break;

case 'B':b_grade++;break;

case 'C':c_grade++;break;

case 'D':d_grade++;break;

default:f_grade++;break;

}

 

 

 

8.对于程序清单6.10,与使用数字相比,使用字符(如a和c)表示菜单选项和case标签有何优点?(提示:想想用户输入q和输入5的情况。)

 

答:

假如使用数字表示菜单选项,那么在输入字符的时候,会无限循环输出最后一句(default那一行),陷入死循环。

而使用字符表示菜单选项,可以有效避免这种情况,在输出非指定字符的时候,只会直接显示default那一行,并且不会陷入死循环。

 

 

 

9.请看下面的代码片段:

int line = 0;

char ch;

while (cin.get(ch))

{

if (ch == 'Q')

    break;

if (ch != '\n')

    continue;

line++;

}

请重写该代码片段,不要使用break和continue语句。

 

答:

先分析代码意思,输入Q,则结束输入,输入不是空字符,则继续,输入其他字符,则line+1。

int line = 0;

char ch;

cin.get(ch);

while( ch !='Q')

{

if(ch == '\n')line++;

cin.get(ch);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值