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