有时候,当我孤独地坐着等待生命大门关闭时,一种与世隔绝的感觉就会像冷雾一样笼罩着我。远处有光明、音乐和友谊,但我进不去,命运之神无情地挡住了大门。我真想义正词严地提出抗议,因为我的心仍然充满了热情。但是那些酸楚而无益的话语流溢在唇边,欲言又止,犹如泪水往肚里流,沉默浸透了我的灵魂。然后,希望之神微笑着走来对我轻轻耳语说:“忘我就是快乐。”因而我要把别人眼睛所看见的光明当作我的太阳,别人耳朵所听见的音乐当作我的乐曲,别人嘴角的微笑当作我的快乐。

c++程序学习7

上一篇 / 下一篇  2009-07-16 11:13:59 / 个人分类:TCL

 

(a)int ival = 1.01; 是否合法?合法,把double 型子面值腹给int 型变量,发生隐性类型变幻,ival 得到的值为1

习题2.15 下面两个定义是否同?有何不同?

     int month = 9,day = 7;

         int month = 09,day = 07;

如果上述定义有错的话,那么应该怎么更正呢?

第一个定义了2个10进制的数,分别是9 和 7;

第二个定义了一个07,是八进制的数,还有一个是09 ,这个在8进制中是不存在的。

修改成011 ,这个数字转换成十进制的时候,为1 * 80= 1  1 * 81=8 ,加起来就是9

 

八进制就是逢8进1。

八进制数采用 0~7这八数来表达一个数。

八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方……

所以,设有一个八进制数:1507,转换为十进制为:

用竖式表示:

 

1507换算成十进制。

 

第0位 7 * 80= 7

第1位 0 * 81= 0

第2位 5 * 82= 320

第3位 1 * 83= 512   +

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

              839

同样,我们也可以用横式直接计算:

7 * 80+ 0 * 81+ 5 * 82+ 1 * 83 =839

结果是,八进制数 1507 转换成十进制数为 839

 

习题2.16 假设calc是一个返回double对象的函数。下面哪些是非法定义?改正所有的非法定义。

(a)int car = 1024,auto = 2048;

(b)int ival = ival;

(c)std::cin >> int input_value;

(d)double salary = wage = 999.99;

(e)double calc = calc();

 

a 非法。auto 是关键字,不可以使用。

c 》 运算符后不能进行变量定义

d 同一语句中不同的变量初始化应该分开定义:

double salary = 999.99

wage = 999.99;

b 没有语法错误,但是ival 还是没有数值。

 

习题2.17 下列变量的初始值(如果有)是什么?

std::string global_str;

intglobal_int;

intmain()

{

   intlocal_int;

   std::string local_str;

   // …

   return0;

}

 

global_str 和 local_str 是空字符串,global_int 是0

local_int 没有初始值。

 

习题2.18 解释下列例子中name的意义:

extern std::string name;

std::string name(“exercise 3.5a”);

extern std::string name(“exercise 3.5a”);

 

声明std::string 变量name在其他地方定义;

定义std::string 变量name ,并初始化为exercise 3.5a;

定义std::string 变量name ,并初始化为exercise 3.5a,name 是一个全局变量;

 

习题2.19 下列程序中j的值是多少?

inti = 42;

intmain()

{

   inti = 100;

   intj = i;

   //…

}

解答:局部变量i=100屏蔽了全局变量i=42,j的值是100

 

习题2.20 下列程序段将会输出什么?

inti = 100,sum = 0;

for(inti =0; i!= 10; ++i)

   sum += i;

std::cout << i <<" "<< sum << std::endl;

解答:for语句中定义的变量i在退出for循环后就不可见,最后输出的I值仍然是100For循环改变了sum的值,输出从09的和45。所以输出结果为100 45

 

习题2.21 下列程序合法吗?

intsum = 0;

for(inti =0; i!= 10; ++i)

   sum += i;

std::cout <<"Sum from 0 to "<< i <<" is "<< sum << std::endl;

因为i的作用域在语句中,输出i不合法。

 

习题2.22 下列程序虽然合法,但是风格很糟糕。有什么问题呢?怎样改善?

for(int i = 0; i < 100; ++i )

   // process i

问题是程序的可读性差,100的具体含义不清楚;程序的可维护性差。无法修改

因为出现魔数,修改为const int a=100

在i< 100 中修改为 i < a ;

 

习题2.23 下列哪些语句合法?对于那些不合法的,请解释为什么不合法?

(a)const int buf;

(b)int cnt = 0;

const int sz = cnt;

(c)cnt ++; sz ++;

 

a 定义const 变量(常量)时必须进行初始化,而buf 没有;

b 合法

c sz 是常量,无法修改数值。

 

 

习题2.24 下列哪些定义是非法的?为什么?如何改正?

(a)int ival = 1.01;    (b) int &rval1 = 1.01;

(c)int &rval2 = ival;  (d) const int &rval3 = 1;

 

b 引用必须用与该引用同类型的对象初始化。int &rval1 =ival;

 

习题2.25 在上题给出的定义下,下列哪些赋值是非法的?如果赋值合法,解释赋值的作用。

(a)rval2 = 3.14159;    (b) rval2 = rval3;

(c)ival = rval3;       (d) rval3 = ival;

 

d  rval3是一个const 引用,不能进行赋值。

 

 

 

习题2.26 (a)中的定义和(b)中的赋值存在哪些不同?哪些是非法的?

(a)<

TAG:

 

评分:0

我来说两句

Open Toolbar