《新标准C++程序设计》习题解答
第1章-第10章
郭炜
第一章
1.将下列十进制数表示成16位二进制形式和4位十六进制形式:255,-254,-1,10,20,-12。
解答:题目的意思是,如果在计算机内部用16位二进制形式和4位16进制形式表示上面的数,会是什么样子。要求最高位是符号位,负数的符号位是1。因此答案为:
255: 0000 0000 1111 1111,00FF
-254: 1111 1111 0000 0010, FF02
-1: 1111 1111 1111 1111, FFFF
10:0000 0000 0000 1010, 000A
c编程必背100题
20:0000 0000 0001 0100,0014
-12:1111 1111 1111 0100, FFF4
2.将下列16位的有符号二进制数转换成十进制形式:
1000 1111 0000 1111, 0000 1011 0000 1111, 1111 1111 0000 1111
1111 1111 1111 1110, 1000 0000 0000 0000, 0000 0000 1100 1110
解答:-28913,2831,-241,-2,-32768,206
3.将下列有符号4位16进制数转换为十进制数:
FC34, 7000, 00a5, 1004, 7F45, 7700, C0C0, 0FFF,FFFF
解答:-972,28672,165,4100,32581,30464,-16192,4095,-1,
第二章
1. 以下哪些是合法的C++标识符,哪些不是?
2Peter
__day
_num_of
sch-name;
解答:第一个和第四个不是,因为标识符不能以数字开头,中间不能有除了“_”和“-”以外的标点符号。其他的是合法的。
2. 编写一个程序,输入3个整数,输出他们的平均数。
解答:
#include <iostream>
using namespace std;
int main()
{
int a,b,c;
cin >> a >> b >>c;
cout << (a+b+b)/3.0;
return 0;
}
3. 说出下面各个类型的变量所占的字节数和表示范围:
short , int, unsigned int, long long, unsigned char, char
解答:参见本章正文
4. 已知字母'a'的ASCII码是97,请写出下面程序的输出结果:
#include <iostream>
using namespace std;
int main()
{
int n1 = 'a';
unsigned short n2 = 0xffff;
int n3 = n2;
short n4 = n2;
cout << n1 << "," << n2 << "," << n3 << "," << n4  << endl;
double f = 6/5;
n3 = 5/(double) 2;
char c = 102;
int n5 = 0xffffffff + 2;
cout << c << "," << f << "," << n3 << "," << n5 << endl;
return 0;
}
解答:
97,65535,65535,-1
f,1,2,1
解释:n4是有符号的,会表示负数,n4=n2执行后,n4的内容是n2的拷贝,即n4最高位为1,表示负数,因此输出n4,得-1
5. 计算下列表达式的值(答案可写十六进制)
(1) 5 * 4 / 3 + (7 % 2)
(2) 0xfff4 >> 2
(3) 0xea8 << 3
(4) 12 ^ 23
(5) ~24
(6) 0x7fff0000 >> 3
解答:
(1)7
(2)3ffd
(3)7540
(4)1b
(5)ffffffe7
(6)fffe000
6. 已知有 int a = -10, b = 20, c = 30; 请写出以下每个表达式计算结束后a的值。
(1) a = b = ++c
(2) a = b | c
(3) a = ( b > c)
(4) b ++ && (a += 10)
(5) a ^= b
(6) a <<= 5
(7) a >> 4
(8) a >>= 4
(9) a = sizeof(int)
(10) a = sizeof(char)
(11) a = sizeof(double)
(12) a+=a-=a*a
解答:
(1)31
(2)30  10100 | 11110  = 11110 即是 30
(3)0  (4)0
(5)-30  a=-10,其十六进制形式是:FFFF FFF6
(6)-320, 因左移5位后十六进制形式为 FFFF FEC0
(7)-10  不会改变a
(8)-1  左移动4位后,高位补符号位1,因此结果的为 FFFF FFFF
(9)4 (10)1 (11)8  (12) -220
7. a是int型变量,请写一个表达式,表达式的值和a的第i位相等( i = 0 ... 31)。
解答:(a >> i) & 1
8. a是int型变量,请写一个表达式,表达式的值等于a的第i位取反( i= 0 ... 31)。
解答:((a >> i) & 1)^1
9. 已知有int类型变量a,b,请写一条语句,使得a的第3位到第7位和b相同,其余位都是0。
解答:a = b & 0xf8;
10. 已知有int类型变量a,b,c, 请写一条语句,使得a的第3位到第7位和b相同,其余位都和c 相同。
解答:a = (b & 0xf8) | ( c & 0xff07);
11. 已知有int类型变量a,b,请写一条语句,使得a的第3位到第7位和b的第27到31位相同,其余位都是0。
解答:a = ( b & 0xF8000000 ) >> 24;
12. 写出下面程序片断的输出结果:
(1)
int a = 0, b = 30;
bool c = a ++ || b ++;
cout << a << "," << b << "," << c << endl;
解答:1,31,1
(2)
int a = 0, b = 30;
bool c = a ++ && b ++;
cout << a << "," << b << "," << c << endl;
解答: 1,30,0
逻辑表达式是短路计算的,a++的值0,即为假,则整个表达式 a ++ && b ++ 就可判断为假,后面的b++不会被执行,因此b的值还是30
(3)
char c = 'a' + 4;
cout << c << "," << (int) c + 3 << endl;
解答:e,104
(4)
int a = 0,b = 10, c;
c = a++;
c = ++ b;
cout << a << "," << b << "," << c << endl;
解答:1,11,11
(5) int a = 0,b = 10;
bool c = ( a == b);
cout << c << endl;
解答:0
第三章
1.  编写程序,每读入3个整数,就将他们从大到小排序输出。读到连续的3个0,则程序结束。
输入样例:
3 4 5
7 2 9

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。