C++习题答案2章.docx
《C++习题答案2章.docx》由会员分享,可在线阅读,更多相关《C++习题答案2章.docx(29页珍藏版)》请在冰豆网上搜索。
C++习题答案2章
第二章C++简单程序设计(习题)
★2-1C++语言有那些主要特点和优点?
解:
C++语言的主要特点表现在两个方面,一是全面兼容C,二是支持面向对象的方法。
C++是一个更好的C,它保持了C的简洁、高效、接近汇编语言、具有良好的可读性和可移植性等特点,对C的类型系统进行了改革和扩充,因此C++比C更安全,C++的编译系统能检查出更多的类型错误。
C++语言最重要的特点是支持面向对象。
★2-2下列标识符哪些是合法的?
Program,-page,_lock,test2,3in1,@mail,A_B_C_D
解:
Program,_lock,test2,A_B_C_D是合法的标识符,其它的不是。
2-3例2.1中每条语句的作用是什么?
#include
voidmain(void)
{
cout<<"Hello!
\n";
cout<<"Welcometoc++!
\n";
}
解:
#include//指示编译器将文件iostream.h中的代码
//嵌入到该程序中该指令所在的地方
voidmain()//主函数名,void表示函数没有返回值
{//函数体标志
cout<<"Hello!
\n";//输出字符串Hello!
到标准输出设备(显示器)上。
cout<<"Welcometoc++!
\n";//输出字符串Welcometoc++!
}
在屏幕输出如下:
Hello!
Welcometoc++!
2-4使用关键字const而不是#define语句的好处有哪些?
解:
const定义的常量是有类型的,所以在使用它们时编译器可以查错;而且,这些变量在调试时仍然是可见的。
★2-5请写出C++语句声明一个常量PI,值为3.1416;再声明一个浮点型变量a,把PI的值赋给a。
解:
constfloatPI=3.1416;
floata=PI;
★2-6在下面的枚举类型中,Blue的值是多少?
enumCOLOR{WHITE,BLACK=100,RED,BLUE,GREEN=300};
解:
BLUE=102
2-7注释有什么作用?
C++中有哪几种注释的方法?
他们之间有什么区别?
解:
注释在程序中的作用是对程序进行注解和说明,以便于阅读。
编译系统在对源程序进行编译时不理会注释部分,因此注释对于程序的功能实现不起任何作用。
而且由于编译时忽略注释部分,所以注释内容不会增加最终产生的可执行程序的大小。
适当地使用注释,能够提高程序的可读性。
在C++中,有两种给出注释的方法:
一种是延用C语言方法,使用"/*"和"*/"括起注释文字。
另一种方法是使用"//",从"//"开始,直到它所在行的行尾,所有字符都被作为注释处理。
2-8什么叫做表达式?
x=5+7是一个表达式吗?
它的值是多少?
解:
任何一个用于计算值的公式都可称为表达式。
x=5+7是一个表达式,它的值为12。
2-9下列表达式的值是多少?
1.201/4
2.201%4
3.201/4.0
解:
1.502.13.50.25
2-10执行完下列语句后,a、b、c三个变量的值为多少?
a=30;
b=a++;
c=++a;
解:
a:
32;b:
30;c:
32;
★2-11在一个for循环中,可以初始化多个变量吗?
如何实现?
解:
在for循环设置条件的第一个";"前,用,分隔不同的赋值表达式。
例如:
for(x=0,y=10;x<100;x++,y++)
2-12执行完下列语句后,n的值为多少?
intn;
for(n=0;n<100;n++)
解:
n的值为100
★2-13写一条for语句,计数条件为n从100到200,步长为2;然后用while和do…while语句完成同样的循环。
解:
(1)for循环:
for(intn=100;n<=200;n+=2);
(2)while循环:
intx=100;
while(n<=200)
n+=2;
(3)do…while循环:
intn=100;
do
{
n+=2;
}while(n<=200);
2-14if(x=3)和if(x==3)这两条语句的差别是什么?
解:
语句if(x=3)把3赋给x,赋值表达式的值为true,作为if语句的条件;语句if(x==3)首先判断x的值是否为3,若相等条件表达式的值为ture,否则为false。
2-15什么叫做作用域?
什么叫做局部变量?
什么叫做全局变量,如何使用全局变量?
解:
P125-126
作用域是一个标识符在程序正文中有效的区域。
局部变量,一般来讲就是具有块作用域的变量;全局变量,就是具有文件作用域的变量。
2-16已知x、y两个变量,写一条简单的if语句,把较小的值赋给原本值较大的变量。
解:
if(x>y)
x=y;
else//y>x||y==x
y=x;
2-17修改下面这个程序中的错误,改正后它的运行结果是什么?
#include
voidmain()
inti
intj;
i=10;/*给i赋值
j=20;/*给j赋值*/
cout<<"i+j=<
return0;
}
解:
改正:
#include
intmain()
{
inti;
intj;
i=10;//给i赋值
j=20;/*给j赋值*/
cout<<"i+j="<
return0;
}
程序运行输出:
i+j=30
2-18编写一个程序,运行时提示输入一个数字,再把这个数字显示出来。
解:
源程序:
#include
intmain()
{
inti;
cout<<"请输入一个数字:
";
cin>>i;
cout<<"您输入一个数字是"<
return0;
}
程序运行输出:
请输入一个数字:
5
您输入一个数字是5
2-19C++有哪几种数据类型?
简述其值域。
编程显示你使用的计算机中的各种数据类型的字节数。
解:
源程序:
#include
intmain()
{
cout<<"Thesizeofanintis:
\t\t"<cout<<"Thesizeofashortintis:
\t"<cout<<"Thesizeofalongintis:
\t"<cout<<"Thesizeofacharis:
\t\t"<cout<<"Thesizeofafloatis:
\t\t"<cout<<"Thesizeofadoubleis:
\t"<return0;
}
程序运行输出:
Thesizeofanintis:
4bytes.
Thesizeofashortintis:
2bytes.
Thesizeofalongintis:
4bytes.
Thesizeofacharis:
1bytes.
Thesizeofafloatis:
4bytes.
Thesizeofadoubleis:
8bytes.
★2-20打印ASCII码为32~127的字符。
解:
#include
intmain()
{
for(inti=32;i<128;i++)
cout<<(char)i;
return0;
}
程序运行输出:
!
"#$%G'()*+,./0123456789:
;<>?
@ABCDEFGHIJKLMNOP_QRSTUVWXYZ[\]^'abcdefghijklmnopqrstuvwxyz<|>~s
2-21运行下面的程序,观察其输出,与你的设想是否相同?
#include
intmain()
{
unsignedintx;
unsignedinty=100;
unsignedintz=50;
x=y-z;
cout<<"Differenceis:
"<x=z-y;
cout<<"\nNowdifferenceis:
"<return0;
}
解:
程序运行输出:
Differenceis:
50
Nowdifferenceis:
4294967246
【注意】:
第二行的输出并非-50,注意x、y、z的数据类型。
★2-22运行下面的程序,观察其输出,体会i++与++i的差别。
#include
intmain()
{
intmyAge=39;//initializetwointegers
intyourAge=39;
cout<<"Iam:
"<cout<<"Youare:
"<myAge++;//postfixincrement
++yourAge;//prefixincrement
cout<<"Oneyearpasses...\n";
cout<<"Iam:
"<cout<<"Youare:
"<cout<<"Anotheryearpasses\n";
cout<<"Iam:
"<cout<<"Youare:
"<<++yourAge<<"yearsold\n";
cout<<"Let'sprintitagain.\n";
cout<<"Iam:
"<cout<<"Youare:
"<return0;
}
解:
程序运行输出:
Iam39yearsold
Youare39yearsold
Oneyearpasses
Iam40yearsold
Youare40yearsold
Anotheryearpasses
Iam40yearsold
Youare41yearsold
Let'sprintitagain
Iam41yearsold
Youare41yearsold
2-23什么叫常量?
什么叫变量?
解:
所谓常量是指在程序运行的整个过程中其值始终不可改变的量,除了用文字表示常量外,也可以为常量命名,这就是符号常量;在程序的执行过程中其值可以变化的量称为变量,变量是需要用名字来标识的。
2-24变量有哪几种存储类型?
解:
变量有以下几种存储类型:
auto存储类型:
采用堆栈方式分配内存空间,属于一时性存储,其存储空间可被若干变量多次覆盖使用;
register存储类型:
存放在通用寄存器中;
extern存储类型:
在所有函数和程序段中都可引用;
static存储类型:
在内存中是以固定地址存放的,在整个程序运行期间都有效。
2-25写出下列表达式的值:
1.2<3&&6<9
2.!
(4<7)
3.!
(3>5)||(6<2)
解:
1.true2.false3.true
2-26若a=1,b=2,c=3,下列各式的结果是什么?
1.a|b-c
2.a^b&-c
3.a&b|c
4.a|b&c
解:
1.-12.13.34.3
2-27若a=1,下列各式的结果是什么?
1.!
a|a
2.~a|a
3.a^a
4.a>>2
解:
1.12.-13.04.0
★2-28编写一个完整的程序,实现功能:
向用户提问"现在正在下雨吗?
",提示用户输入Y或N。
若输入为Y,显示"现在正在下雨。
";若输入为N,显示"现在没有下雨。
";否则继续提问"现在正在下雨吗?
"
解:
源程序:
#include
#include
voidmain()
{
charflag;
while
(1)
{
cout<<"现在正在下雨吗?
(YesorNo):
";
cin>>flag;
if(toupper(flag)=='Y')//toupper把小写字母转化为大写字母,包含在stdlib.h中
{
cout<<"现在正在下雨。
";
break;
}
if(toupper(flag)=='N')
{
cout<<"现在没有下雨。
";
break;
}
}
}
程序运行输出:
现在正在下雨吗?
(YesorNo):
x
现在正在下雨吗?
(YesorNo):
l
现在正在下雨吗?
(YesorNo):
q
现在正在下雨吗?
(YesorNo):
n
现在没有下雨。
或:
现在正在下雨吗?
(YesorNo):
y
现在正在下雨。
★2-29编写一个完整的程序,运行时向用户提问"你考试考了多少分?
(0~100)",接收输入后判断其等级,显示出来。
规则如下:
解:
#include
voidmain()
{
inti,score;
cout<<"你考试考了多少分?
(0~100):
";
cin>>score;
if(score>100||score<0)
cout<<"分数值必须在0到100之间!
";
else
{
i=score/10;
switch(i)
{
case10:
case9:
cout<<"你的成绩为优!
";
break;
case8:
cout<<"你的成绩为良!
";
break;
case7:
case6:
cout<<"你的成绩为中!
";
break;
default:
cout<<"你的成绩为差!
";
}
}
}
程序运行输出:
你考试考了多少分?
(0~100):
85
你的成绩为良!
★2-30实现一个简单的菜单程序,运行时显示"Menu:
A(dd)D(elete)S(ort)Q(uit),Selectone:
"提示用户输入,A表示增加,D表示删除,S表示排序,Q表示退出,输入为A、D、S时分别提示"数据已经增加、删除、排序。
"输入为Q时程序结束。
(1)要求使用if…else语句进行判断,用break、continue控制程序流程。
解:
#include
#include
voidmain()
{
charchoice,c;
while
(1)
{
cout<<"Menu:
A(dd)D(elete)S(ort)Q(uit),Selectone:
";
cin>>c;
choice=toupper(c);
if(choice=='A')
{
cout<<"数据已经增加."<continue;
}
elseif(choice=='D')
{
cout<<"数据已经删除."<continue;
}
elseif(choice=='S')
{
cout<<"数据已经排序."<continue;
}
elseif(choice=='Q')
break;
}
}
程序运行输出:
Menu:
A(dd)D(elete)S(ort)Q(uit),Selectone:
a
数据已经增加.
Menu:
A(dd)D(elete)S(ort)Q(uit),Selectone:
d
数据已经删除.
Menu:
A(dd)D(elete)S(ort)Q(uit),Selectone:
s
数据已经排序.
Menu:
A(dd)D(elete)S(ort)Q(uit),Selectone:
q
(2)要求使用Switch语句。
解:
源程序:
#include
#include
voidmain()
{
charchoice;
while
(1)
{
cout<<"Menu:
A(dd)D(elete)S(ort)Q(uit),Selectone:
";
cin>>choice;
switch(toupper(choice))
{
case'A':
cout<<"数据已经增加."<break;
case'D':
cout<<"数据已经删除."<break;
case'S':
cout<<"数据已经排序."<break;
case'Q':
exit(0);
default:
;
}
}
}
程序运行输出:
Menu:
A(dd)D(elete)S(ort)Q(uit),Selectone:
a
数据已经增加.
Menu:
A(dd)D(elete)S(ort)Q(uit),Selectone:
d
数据已经删除.
Menu:
A(dd)D(elete)S(ort)Q(uit),Selectone:
s
数据已经排序.
Menu:
A(dd)D(elete)S(ort)Q(uit),Selectone:
q
★2-31用穷举法找出1~100间的质数,显示出来。
分别使用while,do-while,for循环语句实现。
解:
<源程序>
(1)使用while循环语句:
#include
#include
voidmain()
{
inti,j,k,flag;
i=2;
while(i<=100)
{
flag=1;
k=sqrt(i);
j=2;
while(j<=k)
{
if(i%j==0)
{
flag=0;
break;
}
j++;
}
if(flag)cout<
i++;
}
}
(2)使用do…while循环语句:
#include
#include
voidmain()
{
inti,j,k,flag;
i=2;
do{
flag=1;
k=sqrt(i);
j=2;
do{
if(i%j==0)
{
flag=0;
break;
}
j++;
}while(j<=k);
if(flag)cout<
i++;
}while(i<=100);
}
(3)使用for循环语句:
#include
#include
voidmain()
{
inti,j,k,flag;
for(i=2;i<=100;i++)
{
flag=1;
k=sqrt(i);
for(j=2;j<=k;j++)
{
if(i%j==0)
{
flag=0;
break;
}
}
if(flag)
cout<
}
}
程序运行输出:
2是质数.
3是质数.
5是质数.
7是质数.
11是质数.
13是质数.
17是质数.
19是质数.
23是质数.
29是质数.
31是质数.
37是质数.
41是质数.
43是质数.
47是质数.
53是质数.
59是质数.
61是质数.
67是质数.
71是质数.
73是质数.
79是质数.
83是质数.
89是质数.
97是质数.
2-32比较Break语句与Continue语句的不同用法。
解:
Break使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句,不能用在别处;
continue语句结束本次循环,接着开始判断决定是否继续执行下一次循环;
★2-33定义一个表示时间的结构体,可以精确表示年、月、日、小时、分、秒;提示用户输入年、月、日、小时、分、秒的值,然后完整地显示出来。
解:
#include
usingnamespacestd;
structtime
{
intyear;
intmonth;
intday;
inthour;
intminute;
intsecond;
};
voidmain()
{
timenow;
cout<<"请输入年、月、日、时、分、秒:
";
cin>>now.year>>now.month>>now.day>>now.hour>>now.minute>>now.second;
cout<"<"<}
2-34