1.请看下面两个计算空格和换行符数目的代码片段:
第一种对于每个字符ch,都要进行两次条件判断;第二种可以在ch!='\n'的情况下少执行一次判断,基本上除了ch=='\n'的情况下都只用执行一次判断。
2.在程序清单6.2中,用ch+1替换++ch将发生什么情况呢?
++ch首先将ch变为ch+1,然后返回ch的值;ch+1这个表达式表示ch+1,但并不会改变ch的值。
++ch时输出字符会在输入的字符上加一,也就是输入a,输出的就是b;但使用ch+1,输出的字符值和输入的一样。
3.请认真考虑下面的程序:
输出如下:使用了ch=$,条件判断始终为真,故结果如下
Hi!
H$i$!$
$Send $10 or $20 now!
S$e$n$d$ $ct1 = 9, ct2 = 9
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
ch % 2 == 0 && ch != 26;
//d
ch % 2 == 0 && ch % 26 != 0;
//e
(donation >= 1000 && donation <= 2000) || guest == 1;
//f
(ch > 'a' && ch < 'z') || (ch > 'A' && ch < 'Z');
5.在英语中,“I will not not speak(我不会不说)”的意思与“I will speak(我要说)”相同。在C++中,!!x是否与x相同呢?
不相同,!x返回的时一个bool的逻辑值,即要么为true要么为false,如果x是一个大于0的数,!x的值表示为false,而!!x表示在!x上再次取反,即表示逻辑真,也就是true。
6.创建一个条件表达式,其值为变量的绝对值。也是说,如果变 量x为正,则表达式的值为x;但如果x为负,则表达式的值为−x——这 是一个正值。
使用?:运算符最方便:
x=(x>0)?x:-x
7.用switch改写下面的代码片段:
改写如下:
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+=;
}
8.对于程序清单6.10,与使用数字相比,使用字符(如a和c)表示 菜单选项和case标签有何优点呢?(提示:想想用户输入q和输入5的情 况。)
用字符表示更能明白对应选项的含义,方便记忆。
9.请看下面的代码片段:
int line = 0;
char ch;
while(cin.get(ch) && ch!='Q')
{
if(ch=='\n')
line++;
}