第2章 变量和基本类型 课后习题

来源:互联网 发布:c语言编程需要什么软件 编辑:程序博客网 时间:2024/06/06 22:01

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.1

答:int , long, short 都是C++中的内置数据类型,可以把它们理解为固定大小的内存空间的别名,在不同的机器上,不

       同的操作系统中,它们的大小是不同的,short在32位的机器中占2个字节,int 占4个字节,long占4个字节。

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.2

答:unsigned为定义无符号数,singed为定义有符号数,除布尔类型外,整型默认都为有符号数

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.3

答:因为short 在默认情况下都是有符号型 的,固它可以表示的最大数为2的15次方减去1:即:32767

       unsigned   short 时为2的16次方减去1,即:65535

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.4

答:

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.5

答:float  是单精度,double 是双精度, 它们的差别是表示数的精度不同。

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.6

答:我感觉这三者都用double来表示更好,因为这三者的运算都有小数的参加,为了保证精度的不丢失,

        用double来表示更好。

-------------------------------------------------------------------------------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.7

答:(a),  第一个为单个字符char 型 ,第二个宽字符,它们是不同的数据类型;  第三个为字符串型的,编译器在的a的

                      后面默认添上空字符‘\0’, 最后一个为宽字符串型 , 后两者也不同的数据类型。

         (b),第一个普通的整型字面值常量,即:它是有符号,十进制

                  第二个是指定它为无符号型

                 第三个指定它为long类型

                 第四个指定它为long,无符号类型

                第五个为八进制表示

                第六个为十六进制表示

          (c),第一个为普通的浮点类型,默认为double型的

                       第二个指定它们float类型

                        第三个指定它为long类型

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.8

答:第一个为有符号整型 

       第二个为无答题类型

        第三个为有符号浮点类型

        第三个为有符号浮点类型

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.9

答:

c是非法的,因为前后两个类型不一至

d是非法的,因为1024为整型,后面不能再加上f 

e是非法的,因为3.14为浮点型,后面不能再加U

f是非法的,因为如果是一个字符串的话,写成两行,要在第一行的后面加上  \

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.10

答:

#include <iostream>

int main()
{
printf("2M\n");
return 0;
}


修改后:

#include <iostream>


int main()
{
printf("2\tM\n");
return 0;


-------------------------------------------------------------------------------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.11

答:

#include <iostream>

int main()
{
int v1,v2,s=1;
std::cout<<"请输入两个数,第一个为底数,第二个为指数,计算它们的值:"<<std::endl;
std::cin>>v1>>v2;
for(int i=0; i<v2; i++)
{
s*=v1;
}
std::cout<<"最后的值为:"<<s<<std::endl;
return 0;
}

-------------------------------------------------------------------------------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.12

答:左值是出现在赋值语句的左边或右边,右值是出现的赋值语句的右边

        变量是左值,因此可以出现在赋值语句的左边,数字字面值为右值,因此不能被赋值

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.13

答:一个赋值语句中就需要左值,如 int a; a=1;  这里的a就是一个左值。

-------------------------------------------------------------------------------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.14

答:a是非法的,double是C++的关键字,不能用变量名,可以改为:double_a

        c是非法的,变量名只能以字母,数字,下划线组成

        d是非法的,变量名不能以数字开头

-------------------------------------------------------------------------------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.15

答:上述定义是错误的,因为以0打头的话,编译器会认为是八进制数

        要把前面的0去掉 

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.16

答:第一个是非法的,auto 是关键字。

        第三个是非法的,cin>>后面不能定定义

        第四个是非法的,不能用连=

       

-------------------------------------------------------------------------------------------------------------------------------------------------------------



-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.17

答:第一个初始值为一个空串

        第二个如果为一个全局变量,那么它会被默认初始化为0

                   如果为局部变量,那么里面是一个垃圾值

        第三个中,第一个没有被初始化,里面是一个垃圾值

                            第二个初始化为空串

-------------------------------------------------------------------------------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.18

答:第一个为声明一个string 类型的变量,没有给它分配内存空间

        第二个为定义一个string类型的变量,并直接初始化

        第三个可以看作是一个定义的变量name ,即使他前面有关键字extern

-------------------------------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.19

答:100

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.20

答:100     55(错了)     正解为:45

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.21

答:不合法,因为i中是for循环中定义的,它的作用域为语句作用域,当for循环执行完毕时,i就已不存在了,

        最后将i输出,会出现i没有定义的错误。

-------------------------------------------------------------------------------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.22.

答:第一个问题是程序的可读性差,100是什么意思,在上下文中并没有体现出来

        第二个问题是如果程序中出现大是的这个100的值,那么当我们需要把这个100改成200时,程序的可维护性也很差

        

       改善:交100定义为一个可读变量,并为其起一个容易记的名字

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.23

答:a中是定义只读变量,它是定义的时候就要初始化,所以第一个是不合法的

        b中这样定义是合法的

        c中是不合法的,cnt可以++,但只读变量sz是不可以++的

-------------------------------------------------------------------------------------------------------------------------------------------------------------



-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.24

答:b是不合法的,非const引用只能绑定到与该引用同类型的对象 

        a中虽然这样的定义编译可以通的过,但是这样做是不符合规范的

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.25

答:

   我的答案: (错)

        a中的赋值是合法的,因为rval2其实是ival的一个别名,对rval2的新赋值,实际上是对ival的赋值

        b是不合法的,因为const对象不能与普通的引用相关联,必须两者都为const

        c也是不合法的,理由同上

        d是合法的,const引用则可以绑定到不同但相关的类型的对象或绑定到右值


   正确答案:

             d非法,因为rval3是一个const引用,不能进行赋值

       

              合法的赋值解释:

                           a,将一个double型字面值赋给int 型变量ival,发生隐式类型转换,ival得到的值为3

                           b将int值1赋给变量ival

                           c将int 值1赋给变量ival

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.26

答:

第一句:定义一个int 型变量ival,并将它赋初值为0.  

第二句:定义一个const型的引用ri,并赋初值为0.

第三句:将0赋给ival,合法

第四句:试图将0赋给ri,但这是非法的,因为ri是const类型的

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.27

答:10    10    

-------------------------------------------------------------------------------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.28

答:如果没有写分号,编译器会报错的。

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.29

答:如果用class关键字来定义一个类,那么默认情况下是private的,

        通常我们用public来定义操作,用private来定义数据成员

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.30

答:

class Tel_number
{
public:
    //……操作
private:
   std::string country_number;
std::string city_number;
std::string phone_number; 
};

class Address
{
public:
   // ……操作
private:
   std::string country;
std::string city;
std::string street;
std::string number; 


class Employee
{
public:
   // ……操作
private:
   std::string ID:
   std::string name;
char sex;
Address addr;
Tel_number tel; 


class Company
{
public:
    //……操作
private:
   std::string name;
Address addr;
Tel_number tel; 
}

class Address
{
public:
   // ……操作
private:
   std::string ID;
   std::string name;
   char sex;
   std::string dept;
   std::string major;
   Address home_addr;
   Tel_number tel;   

-------------------------------------------------------------------------------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.31

答:

a为定义,定义一个变量ix , 并初始化为1023

b为定义,定义一个变量iy, 但并没有初化化

c为声明,声明一个已定义过的变量 iz ,  并没有给这个变量分配内存空间

c为声明,声明一个引用ri

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.32

答:

a为普通的定义变量,应放在源文件中

b中定义了一个只读变量pi , 并用常量表达式来初始化它,所以它可以放在头文件中

c为定义一人普通的变量, 不能放在源文件中

d为定义一个只读变量,但它并非用常量表达式来初始化的,所以要放在源文件中

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2.33

答:

-------------------------------------------------------------------------------------------------------------------------------------------------------------









0 0
原创粉丝点击