考了三道题。
佩服李开复老师的省钱本事:考试直接发白纸,连印刷费也省了,试题直接用投影仪显示在讲台屏幕上。
三道题,看着不难,所以我就现在先在稿纸上把程序基本都写出来,最后剩近二十分钟,才匆忙开始抄写到答题纸上。
失策:
1、最后二十分钟抄写程序,比较匆忙,导致抄写过程完全是机械式的,来不及重新思考或检查。有点浪费了二十分钟去抄写程序的遗憾。
改正:在稿纸上,基本写出解题思路;之后,直接把答案写到答卷上。避免三道题写完了,再写答卷的话,什么思路都忘了、断了。
回来后,发现第一题答得有漏洞,于是在机器上,重新实现了程序:
题意:把句子"I love you baby",倒置成"baby you love I"。
答卷上的漏洞:
1、word没有反转过来:
2、word没有置空值:word = "";
3、对word的最后情况,没有考虑:
if (word.length() > 0)
{
for (int j = word.length() - 1; j >= 0; j--)
{
ts += word[j];
}
}
知识延伸:
1、对判断一个char是否是一个字母,我的判断是:('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')。方法是比较低效的。
可使用<ctype>库中的函数:isalpha函数。
2、标准库函数isalpha的实现是:
在ASCII码中A-Z的编码为
二进制 十进制
A 01000001 65
B 01000010 66
.
.
Y 01011001 89
Z 01011010 90
所以A-Z的编码高位的第2、3位始终为10,然后通过后面5位来表示26个字母。
在ASCII码中a-z的编码为
二进制 十进制
a 01100001 97
b 01100010 98
.
.
y 01111001 121
z 01111010 122
所以a-z的编码高位的第2、3位始终为11,然后通过后面5位来表示26个字母。
ch | 0x20 表示将A-Z转换为a-z
3、关于位操作符:
(1)、~ 取反 ~0011 = 1100
(2)、& 位与 0011 & 0110 = 0010
(3)、| 位或 0011 | 0110 = 0111
(4)、^ 异或 0011 ^ 0110 = 0101