《C++语言基础教程》吕凤翥习题答案文档格式.docx
《《C++语言基础教程》吕凤翥习题答案文档格式.docx》由会员分享,可在线阅读,更多相关《《C++语言基础教程》吕凤翥习题答案文档格式.docx(116页珍藏版)》请在冰点文库上搜索。
![《C++语言基础教程》吕凤翥习题答案文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/3/043dc60d-215d-4d14-b88b-d7cb2562f677/043dc60d-215d-4d14-b88b-d7cb2562f6771.gif)
)。
6.C++中标识符内的大小写字母是没有区别的。
7.C++中不允许使用宏定义的方法定义符号常量,只能用关键字const来定义符号常量。
8.在编写C++程序时,一定要注意采用人们习惯使用的书写格式,否则将会降低其可读性。
9.C++是一种以编译方式实现的高级语言。
10.在C++编译过程中,包含预处理过程、编译过程和连接过程,并且这三个过程的顺序是不能改变的。
11.预处理过程是一般编译过程之后连接过程之前进行的。
12.源程序在编译过程中可能会出现一些错误信息,但在连接过程中将不会出现错误信息。
三、分析下列程序的输出结果
1.#include<
iostream.h〉
voidmain()
{
cout<
〈"
BeiJing”<
"
cout〈<
"
ShangHai"
〈〈”\n"
cout〈〈”TianJing”〈〈endl;
}
1.BeiJjingShangHai
TianJing
2. #include〈iostream。
h〉
{
inta,b;
cout〈〈”inputa,b:
cin>
〉a>
>
b;
a="
<
a〈〈"
"
〈<
”b="
b<
endl;
a-b=”<
a-b〈〈”\n”;
}
假定,输入如下两个数据:
85
2.Inputa,b:
A=8,b=5
A—b=3
3.#include〈iostream。
h>
charc=’m’;
intd=5;
cout〈〈”d="
d〈<
”:
”;
〈”c=”<
c〈<
”\n”;
D=5,c=m
四、编译下列程序,改正所出现的各种错误信息,并分析输出结果:
1、main()
Thisisastring!
1.#include〈iostream.h>
voidmain()
”Thisisastring!
”;
输出结果:
2、#include〈iostream。
voidmain()
cin〉〉x;
intp=x*x;
p=<
〈p〈<
\n"
#include<
iostream.h>
intx;
〉x;
p=”<
”\n”;
3
p=9
3、#include〈iostream.h>
voidmain()
{ inti,j;
i=5;
intk=i+j;
i+j="
k<
\n”;
#include〈iostream.h>
{inti,j;
i=5;
j=3;
”i+j=”<
I+j=8
五、通过对第四题中三个程序的所出现问题的修改,回答下列问题:
1.从对第四题1题的修改中,总结出编程时应注意哪三个问题?
2.C++程序中所出现的变量是否都必须先说明才能引用?
3.使用cout和运算符〈<
输出字符串时应注意什么问题?
4.有些变量虽然说明了但是没有赋值,这时能否使用?
5.一个程序编译通过了并且运行后得到了输出结果,这个结果是否一定是正确的?
第二章 习题
1、在16位机中,int型字宽为()字节。
A.2;
4;
6;
D8
2、类型修饰符unsigned修饰()类型是错误的。
A.char;
int;
longint;
Dfloat
3、下列十六进制的整型数常数表示中,()是错误的。
A.0xaf;
B.0X1b;
C.2fx;
0xAE
4、下列double型常量表示中,()是错误的。
A.E15;
.35;
C.3E5;
D.3E—5
5、下列字符常量表示中,()是错误的。
‘\105'
;
B.‘*’;
C.‘\4f’;
D.‘\a’
6、下列字符串常量表示中,()是错误的。
”\"
yes\”or\”No\"
”\’OK!
\’”;
C."
abcd\n"
”ABC\0”
7、下列变量名中,()是合法的。
CHINA;
B.byte—size;
double;
A+a
8、在inta[5]={1,3,5};
中,数组元素a[1]的值是()。
A。
1;
0;
3;
2
9、在intb[][3]={{1},{3,2},{4,5,6},{0}};
中a[2][2]的值是()。
A.0;
5;
C.6;
D.2
10、下列给字符数组进行初始化中,()是正确的。
A.chars1[]=”abcd;
B.chars2[3]=”xyz"
chars3[][3]={‘a’,’x’,'
y'
};
D.chars4[2[3]={"
xyz"
,"
mnp"
};
11、在inta=3,*p=&
a;
中,*p的值是()。
A.变量a的地址值;
B.无意义;
C.变量p的地址值;
D.3
12、对于int*pa[5];
的描述,()是正确的。
A.pa是一个指向数组的指针,所指向的数组是5个int型元素;
B.pa是一个指向某个数组中第5个元素的指针,该元素是int型变量;
C.pa[5]表示某个数组的第5个元素的值;
D.pa是一个具有5个元素的指针数组,每个元素是一个int型指针;
13、下列关于指针的运算中,()是非法的。
A.两个指针在一定条件下,可以进行相等或不等的运算;
B.可以用一个空指针赋值给某个指针;
C.一个指针可以加上两个整数之差;
D.两个指针在一定条件下,可以相加.
14、指针可以用来表示数组元素,下列表示中()是错误的.
已知:
inta[3][7];
*(a+1)[5];
B.*(*a+3);
*(*(a+1));
D.*(&a[0][0]+2)
15、下列表示引用的方法中,()是正确的。
intm=10;
A.int&x=m;
B.int&
y=10;
C.int&z;
D.float&t=&m
16、下列各运算符中,()可以作用于浮点数.
A.++;
%;
〉〉;
&
17、下列各运算符中,()不能作用于浮点数。
A./;
&
C.!
D.~
18、下列各运算符中,()优先级最高。
A.+(双目);
B.*(单目);
〈=;
D.*=
19、下列各运算符中,()优先级最低。
A.?
:
B。
|;
C.||;
!
=
20、下列各运算符中,()结合性从左到右。
三目;
赋值;
C.比较;
单目
21、下列表达式中,()是非法的.
inta=5;
floatb=5。
5;
a%3+b;
b*b&&++a;
(a〉b)+(int(b)%2);
D.—--a+b
22、下列表达式中,()是合法的。
doublem=3.2;
intn=3;
m〈<
2;
(m+n)|nC。
!
m*=n;
m=5,n=3.1,m+n
23、下列关于类型转换的描述中,()是错误的。
A.在不同类型操作数组成的表达式中,其表达式类型一定是最高类型double型;
B.逗号表达式的类型是最后一个表达式的类型;
C.赋值表达式的类型是左值的类型;
D.在由底向高的类型转换中是保值映射。
24、下列各表达式中,()有二义性。
inta(5);
b(6);
A.a+b>
++a+b++;
C.b+(a=3);
(a=3)—a++
二、判断下列描述是否正确,对者划√,错者划×
.
1、任何字符常量与一个任意大小的整型数进行加减都是有意义的。
2、转义序列表示法只能表示字符不能表示数字。
3、在命名标识符中,大小写字母是不加区别的。
4、C++的程序中,对变量一定要先说明再使用,说明只要在使用之前就可以。
5、C++中数组元素的下标是从0开始,数组元素是连续存储在内存单元中的。
6、数组赋初值时,初始值表中的数据项的数目可以大于或等于数组元素的个数。
7、枚举变量的取值受到该枚举变量所对应的枚举表中的枚举符的局限。
8、指针是用来存放某种变量的地址值的变量。
这种变量的地址值也可以存放在某个变量中,存放某个指针的地址值的变量称为指向指针的指针,即二级指针。
9、引用是用来给某个变量以别名的变量.,对引用的操作,实质上就是对被引用的变量的操作。
10、运算符的优先级和结合性可以确定表达式的计算顺序。
11、在说明语句中,的值和的值是相等的。
12、已知:
表达式具有两用性。
13、移位运算符在移位操作中,无论左移还是右移,所移出的空位一律补0;
14、某个变量的类型高是指该变量被存放在内存中的高地址处。
15、隐含的类型转换都是保值映射,显式的类型转换都是非保值映射。
16、类型定义是用来定义一些C++中所没有的新的类型.×
三、计算下列各表达式的值
(下列各表达式是相互独立的,不考虑前面对后面的影响。
)
1、已知:
unsignedintx=015,y=0x2b;
A.x|y;
x^y;
x&
y;
D.~x+~y;
E.x〈〈=3;
F。
y>
=4.
A
B
C
D
E
F
47
38
9
4294967238
104
2、已知:
inti(10),j(5);
A.++i-j--;
B.i=i*=j;
C.i=3/2*(j=3—2);
D.~i^j;
E。
i&
j|1;
F.i+i&0xff.
6
50
1
-16
20
3、已知:
inta(5),b(3);
计算下列表达式得值以及a和b的值.
a&
&b++;
B.a||b+4&
a*b;
C.a=1,b=2,a〉b?
++a:
++b;
++b,a=10,a+5;
E.a+=b%=a+b;
F。
a!
=b〉2<
=a+1.
0,5,3
1,5,3
3,1,3
15,10,4
8,8,3
1,5,3
4、已知:
intd(5),*pd=&
d,&rd=d;
A.d+-rd;
B.*pd*rd;
C.++*pd—rd;
++rd—d.
25
5、已知:
'
1'
的ASCII码的值为49.
3+2〈〈1+1;
B.2*9|3<
1;
5%-3*2/6-3;
D。
8==3<
=2&
5;
E。
!
(‘3’〉’5’)||2<
6;
6>
=3+2-(‘0'
-7)。
22
-3
四、按下列要求编写程序
1.从键盘上输入两个int型数,比较其大小,并输出显示其中小的.
2.从键盘上输入一个int型数,一个浮点型数比较其大小,并输出其中大的.
3.输入一摄氏温度,编程输出华氏温度。
已知:
华氏温度转换为摄氏温度的计算公式如下:
C=(F-32)*5/9
其中,F表示华氏温度,C表示摄氏温度.
{
floatc,f;
cout〈<
”华氏温度:
cin〉>
f;
c=(f—32)*5/9;
cout<
摄氏温度:
”〈〈c〈〈endl;
}
4.编程实现输入公里数,输出显示其英里数。
1英里=1.60934公里(用符号常量).
#include<
iostream。
constfloatr=1.60934;
floatm,I;
cout〈〈”公里数:
m;
I=r*m;
〈”英里数:
”<
〈I〈<
endl;
5.输入一个int型数,将它的低4位(右4位)都置为1。
{
intn,m;
〈”输入一个整数:
cin>
n;
m=n|15;
”结果为:
”〈<
m<
〈endl;
第三章 习题
1.预处理命令在程序中都是以()开头的.
*;
#;
C.:
;
/;
2.文件包含命令中被包含的文件的扩转名()。
A.必须为.h;
B.不能用.h;
C.必须是.c;
D.不一定是.h;
3.下列条件编译命令中
#if()
〈语句序列1〉
#else
〈语句序列2〉
#endif
A.整常量表达式;
B.任何标识符;
C.任意表达式;
被定义的宏名;
4.带参数的宏定义中,程序中引用宏定义的实参()。
A.只能是常量;
只能是整型量;
C.只能是整形表达式;
D.可以是任意表达式;
5.下列()是语句
a=17;
C。
x+y;
D.cout<
〈”\n”;
6.下列for循环的次数为().
for(inti(0),x=0;
&i<
=5;
i++)
B.6;
C.1;
D.无限;
7.下列while循环的次数是()。
while(inti=0)i-—;
A.0;
B.1;
C.5;
无限;
8.下列do-while循环的循环次数为()。
inti(5);
do{cout〈<
i-—〈<
i—-;
}while(i!
=0);
0;
B.1;
C.5;
无限;
9.下列for循环的循环体执行次数为()。
for(inti(0),j(10);
i=j=10;
i++,j-—)
A.0;
10;
D.无限;
10.已知:
下列switch语句中,()是正确的。
A.switch(a);
{casea:
a++;
break;
caseb:
b++;
}
B.switch(a+b)
{case1:
a+b;
break;
case2:
a—b
}|
C.switch(a*a)
{case1,2:
++a;
case3,4:
D.switch(a/10+b)
{case5:
a/5;
break
default:
11.下述关于循环体的描述中,()是错误的。
A.循环体中可以出现break语句和continue语句;
B.循环体中还可以出现循环语句;
C.循环体中不能出现goto语句;
D.循环体中可以出现开关语句。
12.下述关于goto语句的描述中,()是正确的。
A.goto语句可在一个文件中随意转向;
B.goto语句后面要跟上一个他所转向的语句;
C.goto语句可以同时转向多条语句;
D.goto语句可以从一个循环体内转到循环体外.
13.下述关于break语句的描述中,()是正确的。
A.break语句可用于循环体内,它将退出该重循环;
B.break语句可用于开关语句中,它将退出开关语句。
C.break语句可用于if体内,它将退出if语句;
D.break语句在一个循环体内可以出现多次。
14.下述关于开关语句的描述中,()是正确的。
A.开关语句中default子句可以没有,也可以有一个;
B.开关语句中每个语句序列中必须有break语句;
C.开关语句中default子句只能放在最后;
D.开关语句中case子句后面的表达式可以是整形表达式.
15.下列关于条件语句的描述中,( )是错误的。
A.if语句中只有一个else子句;
B.if语句中可以有多个elseif子句;
C.if语句中if体内不能是开关语句;
D.if语句中的if体中可以是循环语句。
二、判断下列描述是否正确,对者划√,错者划×
1.预处理命令是在进行编译时首先执行的,然后再进行正常编译。
2.宏定义命令是以分号结束的。
3.带参数的宏定义只能有1至2个参数。
4.文件包含命令所包含的文件是不受限制的。
5.条件编译命令只在编译时才有作用。
6.预处理命令的主要作用是提高效率的。
7.复合语句就是分程序。
8.条件语句不能作为多路分支语句.×
9.开关语句不可以嵌套,在开关语句的语句序列中不能再有开关语句×
10.开关语句中的default关键字,只能放在该语句的末尾,不能放在开头或中间。
11.Switch语句中必须有break语句否则无法退出switch语句。
12.While循环语句的循环体至少执行一次.×
13.Do—while循环可以写成while循环的格式。
14.For循环是只有可以确定的循环次数时才可使用,否则不能用for循环。
15.只有for循环的循环体可以是空语句,其他种循环的循环体不能用空语句。
16.当循环体为空语句时,将说明该循环不作任何工作,只起延时作用。
17.循环是可以嵌套的,一个循环体内可以包含另一种循环语句.√
18.在多重循环中,内重循环的循环变量应用的次数比外重的多。
19.Break语句可以出现在各种循环体中.√
20.continue语句只能出现在循环体中。
三、分析下列程序的输出结果。
1。
#defineM1.5
#defineA(a)M*a
intx(5),y(6);
A(x+y)<
13。
5
2。
#include<
#defineMAX(a,b)(a)>
(b)?
(a):
(b)
intm
(1),n
(2),p(0),q;
q=MAX(n,n+p)*10;
〈q〈<
3.
#include〈iostream.h>
#include”f1.cpp"
inta(5),b;
b=f1(a);
cout〈〈b〈<
f1。
cpp文件内容如下:
#defineM(m)m*m
f1(intx)
inta(3);
return–M(x+a);
13
4。
#include<
inti(0);
while(++i)
if(i==10)break;
if(i%3!
=1)continue;
cout〈〈i<
4
7
5。
inti
(1);
do{
i++;
++i<
〈endl;
if(i==7)break;
}while(i==3);
cout〈〈"
Ok!
5
Ok!
6。
#include〈iostream。
inti
(1),j
(2),k(3),a(10);
if(!
i)
a——;
elseif(j)
if(k)a=5;
else
a=6;
a<
if(i〈j)
if(i!
=3)
if(!
k)
a=1;
elseif(k)
a=5;
a+=2;
〈a<
7.
inti,j,a[8][8];
**a=1;
for(i=1;
i〈8;
**(a+i)=1;
*(*(a+i)+i)=1;
for(j=1;
j〈i;
j++)
*(*(a+i)+j)=*(*(a+i—1)+j-1)+*(*(a+i-1)+j);
for(i=0;
i〈8;
for(j=0;
j〈=i;
〈〈*(*(a+i)+j);
7.1
11
121
1331
14641
15101051
1615201561
172135352171
8。
#include〈iostream.h〉