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

c++程序学习记录6

上一篇 / 下一篇  2009-07-08 10:42:17 / 个人分类:TCL

 

问题1 如何计算求模?

100000超过了16位的unsigned short类型的表示范围,编译器对其二进制表示截取低16位,相当于对65536求余(求模,%),得34464。

问题2

(a) "Who goes with F\145rgus?\012" 个人认为非法,此处的问号是啥意思?

习题2.1 int long 和short 类型之间有什么差别?

都表示整形值,存储空间不同。short 定义半个机器字,int 和long 定义一个机器字长,也就是4个字节,32位。

习题2.2 整形数包含带符号的signed 和 无符号的unsigned。前者可以定义正数,负数和O ,后者可以定义0和正数。

习题2.3

如果在某机器上short类型占16位,那么可以赋给short类型的最大数是什么?unsigned short类型的最大数又是什么?

short 默认是signed 类型,为 215-1=32767 ,也就是范围从-32767 ~32768

unsigned 类型只能是正数,最大数为216-1=65535 。也就是范围从0~65535

习题2.4

当给16位的unsigned short对象赋值100000时,赋的值是什么?

16位的unsigned 类型是范围是0~65535 ,赋值为100000时,产生溢出。

100000超过了16位的unsigned short类型的表示范围,编译器对其二进制表示截取低16位,相当于对65536求余(求模,%),得34464。

习题2.5

float类型和double类型有什么差别?

对于float类型来说,存储位数不同,f存储32位, double 存储64位。

所以取值范围不同,精度不同。f 表示6位有效数字,而 d 至少表示10位有效数字。

习题2.7

解释下列字面值常量的不同之处。

(a) ’a’,L’a’,"a",L"a"

(b) 10,10u,10L,10uL,012,0xC

(c) 3.14,3.14f,3.14L

’a’为char型字面值,L’a’为wchar_t型字面值,"a"为字符串字面值,L"a"为宽字符串字面值。

10为int型字面值,10u为unsigned型字面值,10L为long型字面值,10uL为unsigned long型字面值,012为八进制表示的int型字面值,0xC为十六进制表示的int型字面值。

3.14为double型字面值,3.14f为float型字面值,3.14L为long double型字面值。

习题2.8

确定下列字面值常量的类型:

(a) ?10 (b) -10u (c) -10. (d) -10e-2

【解答】

(a) int型

(b) unsigned int型

(c) double型

(d) double型

习题2.9

下列哪些(如果有)是非法的?

(a) "Who goes with F\145rgus?\012" 个人认为非法

(b) 3.14e1L                      (c) "two" L"some"

(d) 1024f                        (e) 3.14UL

(f) "multiple line

comment"

【解答】

(c) 非法。因为字符串字面值与宽字符串字面值的连接是未定义的。

(d) 非法。因为整数1024后面不能带后缀f。

(e) 非法。因为浮点字面值不能带后缀U。

(f) 非法。因为分两行书写的字符串字面值必须在第一行的末尾加上反斜线。

习题2.10

使用转义字符编写一段程序,输出2M,然后换行。修改程序,输出2,跟着一个制表符,然后是M,最后是换行符。

【解答】

输出2M、然后换行的程序段:

// 输出"2M"和换行字符

std::cout << "2M" << ’\n’;

修改后的程序段:

// 输出’2’, ’\t’, ’M’和换行字符

std::cout << ’2’ << ’\t’ << ’M’ << ’\n’;

习题2.11

编写程序,要求用户输入两个数??底数(base)和指数(exponent),输出底数的指数次方的结果。

程序调试出现问题:

0x004048c8指令引用的“0x0046f03c"内存。该内存不能为“written”。

access violation 访问冲突;

 //之前这个句子写错了,删除然后添加下一句话后有结果std::cin>>"please input base and exponent" ;


#include "stdafx.h"
#include <iostream>

int main ()
{
 int bas,exp;
 long result=1;

 //之前这个句子写错了,删除然后添加下一句话后有结果std::cin>>"please input base and exponent" ;

std::cout<<"please input base and exponent" <<std::endl;
 std::cin>>bas>>exp;
 for( int cnt=0;cnt<exp;cnt++)
  result*=bas;
 std::cout<<bas
   <<"raised to the power of "
   <<exp
   <<":\t"
   <<result<<std::endl;

    return 0;
}
   

please input base and exponent
2 10
2raised to the power of 10:     1024
Press any key to continue

习题2.12

区分左值和右值,并举例说明。

左值(lvalue)就是变量的地址,或者是一个代表“对象在内存中的位置”的表达式。

右值(rvalue)就是变量的值,见2.3.1节。

变量名出现在赋值运算符的左边,就是一个左值;而出现在赋值运算符右边的变量名或字面常量就是一个右值。

例如:

val1=val2/8

这里的val1是个左值,而val2和8都是右值。

习题2.14

下面哪些(如果有)名字是非法的?更正每个非法的标识符名字。

(a) int double = 3.14159;  (b) char _;

(c) bool catch-22;          (d) char 1_or_2 =’1’;

(e) float Float = 3.14f;

【解答】

(a) double是C++语言中的关键字,不能用作用户标识符,所以非法。此语句可改为:double dval = 3.14159;。

(c) 名字catch-22中包含在字母、数字和下划线之外的字符“-”,所以非法。可将其改为:catch_22;。

(d) 名字1_or_2非法,因为标识符必须以字母或下划线开头,不能以数字开头。可将其改为:one_or_two;。


 


TAG:

 

评分:0

我来说两句

Open Toolbar