第一章_C++概述
1. C++语言的标准有哪些?它有哪些编程方法?结构化程序设计的结构有哪些?
答案:标准:C++国际标准ISO/IEC 14882:1998,常被称为C++98、标准C++
或ANSI/ISO C++;C++标准第二版(ISO/IEC 14882:2003)。
3种编程方法:以C语言为子集的结构化程序设计模式、以类为核心的面
向对象程序设计模式以及以模版为机制的通用编程模式。
结构化程序设计的结构:顺序结构、选择结构和循环结构。
2. 面向对象的程序设计有3个主要特征,他们分别是什么?试举例说明。 答案:3个主要特征:封装、继承和多态。
封装:封装是将数据和代码捆绑到一起,避免了外界的干扰和不确定性。
例如C++中的类,它定义了该集合中每个对象所共有的属性和方法。
继承:继承是让某个类型的对象获得另一个类型的对象的特征。例如:
C++中子类对父类的继承,子类具有父类的特性,同时还可以拥有自己的新特性。
多态:多态是指不同类型的对象接收相同的消息时产生不同的行为。多态
机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减小代码的复杂度。例如函数的重载。
3. C++是以编译方式实现的高级语言,它的编译过程可分为3个子过程,它们分别是什么?
答案:创建、编译和连接。
4. 参照本章示例,编写1个C++程序:输入圆的半径,输出其周长。 答案:
#include
double r, area;
cout<<\输入圆的半径: \ cin>>r;
area=2*3.14159*r;
cout<<\圆的周长为:\ return 0; }
第二章 数据类型和基本输入/输出
1. 下列常量表示在C++中是否合法?若不合法,指出原因;若合法,指出常量的数据类型。
答案:32767:合法,int
35u:合法,无符号整形
1.25e3.4:不合法,e后面的数字必须是整数
1
3L:合法,长整形
0.0086e-32:合法,实数
?\\87?:不合法,八进制数中不应该出现8 “Computer System”:合法,字符串 “a”:合法,字符串 ?a?:合法,字符
?\\96\\45?:不合法,?96? ?\\45?分别为字符类型 .5:合法,double
2. 字符常量与字符串常量有什么区别?指出下列哪些表示字符?哪些表示字符串?哪些既不表示字符也不表示字符串?
?0x66? China “中国” “8.42” ?\\0x33? 56.34 “\\n\\t0x34” ?\\r? ?\\\\? ?8.34? “\\0x33” ?\\0?
答案:字符: ?\\\\?, ?\\0?, ?\\r?
字符串:“中国”, “8.42”, “\\n\\t0x34”, “\\0x33”
非字符亦非字符串:?0x66?, China,?\\0x33?,56.34, ?8.34?
3. 定义两个变量a和b,初值分别为8和10,若要a和b的值互换,即a为10,b为8,如何实现(可用另外一个变量t作为过渡)?如不用中间变量又如何实现?
答案:用变量temp作为过渡 #include
int a=8,b=10; int temp; temp=a; a=b; b=temp;
cout<<\ return 0; }
不用中间变量方法一: #include
int a=8,b=10; a=a^b; b=b^a; a=a^b;
cout<<\ return 0; }
2
不用中间变量方法二: #include
int a=8,b=10;
cout<<\ a=a+b; b=a-b; a=a-b;
cout<<\ return 0; }
4. 用enum定义4个枚举常量Flase、FALSE、TRUE、True,使其值分别等于bool类型中的false、false、true、true。想一想这样做的好处是什么?若使用const来定义,则如何进行?并比较这两种定义的优缺点。 答案:enum {False=false,FALSE=false,TRUE=true,True=true};
好处:因为VC++中对大小写是敏感的,为了防止用户输入中大小写出错
的情况,所以分别又定义了表示true和false的两种形式。
const bool False=false; const bool FALSE=false; const bool TRUE=true; const bool True=true;
优缺点:用enum一次可以定义多个整型标识符变量,而const定义的标识符常
量由其数据类型决定;
另外,用const定义看不出其关联性。 5. 用const常量代替圆周率3.1415926,分别输入半径40和928.335,求圆面积。要求先输出圆周率和半径,再输出其面积。 答案:
#include
const double PI=3.1415926; int main() {
double radius1=40,radius2=928.335; double area1,area2;
area1=PI*radius1*radius1; area2=PI*radius2*radius2;
cout<<\圆周率: \半径: \面积: \ cout<<\圆周率: \半径: \面积: \ return 0; }
3
6. 设学生人数是一个常数50,编程输出下列结果(双引号也要输出): “How many students in your class?” “50” 答案:
#include
cout<<'\\\ cout< cout<<'\\\ return 0; } 7. 设有语句: char c1, c2, c3; cin>>c1>>c2>>c3; 若在执行过程中,输入: ?a? ?b? ?c? 则cin执行后,c1、c2、c3的值分别是什么?若输入: abcdef 则cin执行后,c1、c2、c3的值又分别是什么? 答案:输入?a? ?b? ?c?后,c1的值为 ? , c2的值为a , c3的值为 ? 输入abcdef后,c1的值为 a , c2的值为b , c3的值为 c 8. 设有语句: int a, b, c; cin>>hex>>a>>oct>>b>>dec>>c; cout< a、b、c的值分别是18,10和12 第三章 运算符和表达式 1. 将下列代数式写成C++的表达式: (1) (sin(x))a?b2.5=sqrt(pow(sin(x),2.5)) (2)2mex2h=((a+b)*h)/(2*m) (3)2?=exp(x*x)/sqrt(2*3.1415926) 4 2. 求出下列算数表达式的值: (1) 5+7/3*4=13 (2) 23.5+9/5+0.5=25.0 (3) 8+2*9/2=17 (4) ?a? +23=97+23=120 (5) 设x=2.5,y=4.7,a=7 x+a%3*(int)(x+y)%2/4 =2.5+1*int(7.2)%2/4=2.5+7%2/4=2.5+1/4=2.5 (6) 设x=3.5,y=2.5,a=2,b=3 (float)(a+b)/2-(int)x%(int)y=2.5-1=1.5 (7) 设x=8 ?a?+x%3+5/2-?\\24?=97+2+2-20=81 3. 在下列表达式中,哪些是合法的赋值表达式?哪些不是?为什么? (a,b,c,x,y都是已定义的int 型变量) (1) a=b=4.5+7.8 是 (2) c=3.5+4.5=x=y=7.9 不是,因为4.5是常量不能作为左值 (3) x=(y=4.5)*45 是 (4) a=x++=++y 不是,x++不能作为左值 4. 写出下面表达式运算后a的值,设原来的a都是10. (1) a+=a <=> a=a+a=20 (2) a%=(7%2) <=> a=a%(7%2)=10%1=0 (3) a*=3+4 <=>a=a*(3+4)=70 (4) a/=a+a <=>a=a/(a+a)=10/20=0 (5) a-=a <=>a=a-a=0 (6) a+=a-=a*=a <=>a+=a-=100 =>a+=0 =>a=0 5. 设m,n的值分别为10,8,指出下列表达式运算后a,b,c,和d的值。 (1) a=m++ + n++=10+8=18 (2)b=m++ + ++n=10+9=19 (3)c=++m + ++n=11+9=20 (4)d=m-- + n++=10+8=18 6. 设a,b,c的值分别为5,8,9;指出下列表达式运算后x ,y和z 的值 (1) y=(a+b,c+a)=(13,14)=14 (2) x=y=a,z=a+b x=5 y=5 z=13 (3) y=(x=a*b , x+x , x*x)=(x=40,80,1600)=1600 x=40 (4) x=(y=a ,z=a+b)=(y=5,z=13)=13 y=5 z=13 7. 设有变量: float x, y; int a ,b; 指出运算下列表达式后x , y, a和b的值。 (1)x=a=3.523 x=3 y为null a=3 b为null (2)a= x =3.523 x=3.523 y为null a=3 b为null (3)x=a=y=3.523 x=3.0 y=3.532 a=3 b为null 5