浙江大学c语言总复习题—基本数据类型和运算 (1)

浙江大学c语言总复习题—基本数据类型和运算 (1)
浙江大学c语言总复习题—基本数据类型和运算 (1)

第2章 基本数据类型和运算

学习和解题要点

1. 数据类型

C 语言中的数据类型比别的语言丰富。要学好这部分内容,首先要掌握C 语言的数据在

内存中的表示。

整型数据:以二进制的形式表示

(1) int 类型

正数: 如 123 (+123)用 16 位二进制(二个字节)表示

原码 反码(原码同)

补码(原码同)

最大正整数 215-1=214+213+212+211+210+29+2827+26+25+24+23+22+21+20=32767

负数:如 –123

原码

反码(符号位不动,其它取反)

补码(补码加 1)

已知补码求原负数 符号位不动,其它取反加 1

取反 加1 最大负整数

-215=32768 因为 -215 < -(215-1) 所以用 -215 而不用 -(215-1)

(2) unsigned (int) 类型

称为无符号整数,它不是指不带“+ 或 -”号的整数,而是指内存表示这类数时没有符

号位,16 位二进制都用来表示数,因此

最大数 215+214+213+21211109876543+22+21+20=65535

最小数 0 (3) long (int) 类型 用 32 位二进制(四个字节)表示,其他同 int 型

(4) short 类型

有的计算机(小型、中型、大型机)int 即是 long ,而short 用16 位二进制(二个

字节)表示。因此C 语言中,short 一定是短整型,long 一定是长整型,而int 因不同的系

统而不同。PC 586 机int 即short ,所以一般不用short 。

(5) 在C 语言中,整型常量有三种形式的写法:

十进制整数(0 - 9)表示。通常整数的写法。

八进制整数(0 - 7)表示。在整数的前面加数字0。

十六进制整数(0 - f )表示。在整数的前面加0x 。

长整型常量表示方法:在整数的后面加L 或 l 。

0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1

符号位0表示正

0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

1 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 符号位1表示负

1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 0

1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

字符型数据:以二进制的形式表示

char 型 用 8位二进制(一个字节)表示

如 ‘a ’ ,在程序中要用单引号表示,输出时无单引号,内存中表示为 26+25+20=97 即ASCII 码 97 实型数据:以二进制的形式表示

(1) float 类型

如 123.45 (+123.45)用 32 位二进制(四个字节)表示为 0.12345×103 不同的系统,n 的位数有不同,n 长,精度高,但可表示的指数小,能表示的数的范围

小。反之,则能表示的数的范围大,但精度低。float 类型又称为“浮点” 类型,把实数

的小数点都看成在第一位,而用指数位“浮动”小数点。

(2) double 类型

与float 同只不过用 64 位二进制(八个字节)表示。因此精度高,称双精度。

2. 变量的概念

C 语言中的变量可以理解成计算机内存的一个空间,它必须有一个名字(标识符),可

放什么样的数据类型(如定义时前面加int 、float 、char 等),它是开辟在内存的一般

数据区(又称静态数据区)还是开辟在内存的堆栈区(又称动态数据区),这可由程序中用

static 或auto(可缺省)来规定。同时,一个变量有它的有效的使用范围,称之为作用域。

最后,每个变量都有地址,这在指针类型时要用到。变量可以一边定义一边赋初值,在程序

运行时可以使它发生变化,因此称之为变量。

3. 运算符的注意事项

(1) 双目运算符 % 的两边一定是要整数,运算结果是整除后的余数,也是整数,注意

2%5 得2而不是 0。

(2) 双目运算符 / 的两边如果是整数,则结果也是整数,5/2 结果为 2而不是 2.5 ,

即使是 float x; x=1/2; x 中也只有 0.0 , 要人为的写成 x=1/2.0 或 x=1.0/2 ,x 中

才是0.5 。

(3) 单目运算符 ++ -- 放在运算对象的前面时,称为“先加(减) 1,后使用”,这

一般不会搞错。当放在运算对象的后面时,称为“先使用,后加(减) 1”,这时要注意什

么时候“使用”。

如 i=3; (i++)+(i++)+(i++) 结果是9而不是12,这里,三个i 相加是“使用”,使用

后才三次加1,i 成为6,“使用”是以整个表达式为准。

而 i=3; (++i)+(++i)+(++i) 结果是18而不是15,这里,三个i 依次加1 成为6,然

后再“使用”。也是以整个表达式为准。

又如 i=1; if(i--) printf(“%d ”,i); 输出是0而不是1。这是因为if()中i-- 是整个

表达式,先用i 为1,用于“判断”成立,这算“使用”了,然后i 减1成为0,输出时i

已为0。同理 char c=’A ’; switch(c++) { case ‘A ’: printf(“%c ”,c);break;………},

输出为B 。

0 1 1 0 0 0 0 1

0 .12345 的二进制表示 0 3的二进制表示

数符 小数部分 指数符 指数

+ 0.12345 + 103 32位

32-n 位

n 位

(4). 算术自反赋值运算符中,注意 = 赋值号右边是一个整体,如 c%=a-3 是c=c%(a-3)而不是 c=c%a-3。

(5). 关系运算符中,注意等于比较运算符“==”与赋值运算符“= ”容易疏忽,二者是绝然不同的,不然会引起很大的错误。如:i=0; if(i==1) 判断得结果应该是不成立,若写成:if(i=1)则变成给i赋予1,赋值表达式的结果也是1,判断结果是成立的。

(6). 应该熟记运算符及其优先级汇总表,熟记运算符之间的运算次序及结合方向。4.表达式注意的问题

(1). 在算术表达式中应注意各类数值型数据间的混合运算问题,如下:

double float float 型一定先转换成double型参加运算。

long

运算对象不同时转换方向。

unsigned

int char, short char, short型一定先转换成int型参加运算。

(2). C语言无“真假值”,判断成立则结果为1,不成立则结果为0。而当表达式的值为非0则认为“真”,当表达式的值为0则认为“假”。

(3). 关系表达式中,数学上的 0

(4).在“&&”连接的逻辑表达式中,当左边表达式的值为0,则C语言不再计算右边表达式,因为无论右边表达式的值为什么,整个逻辑表达式的值都为0。同样,在“||”连接的逻辑表达式中,当左边表达式的值为非0,则C语言不再计算右边表达式,因为无论右边表达式的值为什么,整个逻辑表达式的值都为1 。

如:int a=b=m=n=1; (m=a!=b)&&(n=a!=b) a!=b不成立为0,m得0,n仍为1

int a=b=m=n=0; (m=a==b)||(n=a==b) a==b成立为1,m得1,n仍为0

(5). C语言中,赋值号“=”,逗号“,”都是运算符。a=10是赋值表达式,a=10;是赋值语句,sum=0,i=0是逗号表达式,它是由二个赋值表达式用逗号运算符连起来的逗号表达式。

练习题

一、单项选择题

1.下列数据中属于“字符串常量”的是()。

A.”a” B. {ABC} C. ’abc\0’ D. ’a’

2.下列数据中属于“字符串常量”的是()。

A.ABC B. “ABC” C. ’abc’ D. ’a’

3. 在PC机中,’\n’在内存占用的字节数是()。

A. 1

B. 2

C. 3

D. 4

4. 在PC机中,”a\xff”在内存占用的字节数是()。

A. 5

B. 6

C. 3

D. 4

5.字符串”ABC”在内存占用的字节数是()。

A. 3

B. 4

C. 6

D. 8

6.字符串”\”ABCD\””在内存占用的字节数是()。

A. 4

B. 6

C. 7

D. 8

7. 在C语言中,合法的长整型常数是()。

A. 0L

B. 4962710

C. 0.054838743

D. 2.1869e10

8.在C语言中,合法的短整型常数是()。

A. OL

B. 0821

C. 40000

D. 0x2a

9.下列数据中不属于“字符常量”的是()。

A. ‘\a’

B. ‘\160’

C. ‘070’

D. 070

10.char型常量在内存中存放的是()。

A. ASCII代码值

B. BCD代码值

C. 内码值

D. 十进制代码值11.设整型变量m,n,a,b,c,d均为0,执行(m=a==b)||(n=c==d)后,m,n的值是()。

A. 0,0

B. 0,1

C. 1,0

D. 1,1

12.设整型变量m,n,a,b,c,d均为1,执行“(m=a>b)&&(n=a>b)”后,m,n的值是()。

A. 0,0

B. 0,1

C. 1,0

D. 1,1

13.设a为2,执行下列语句后,b的值不为0.5的是()。

A. b=1.0/a

B. b=(float)(1/a)

C. b=1/(float)a

D. b=1/(a*1.0) 14.设a为5,执行下列语句后,b的值不为2的是()。

A. b=a/2

B. b=6-(--a)

C. b=a%2

D. b=a>3?2:2

15. 执行语句“x=(a=3,b=a--)”后,x,a,b的值依次为()。

A. 3,3,2

B. 3,2,2

C. 3,2,3

D. 2,3,2

16. int b=0,x=1; 执行语句“if(x++) b=x+1;”后,x,b的值依次为()。

A. 2,3

B. 2,0

C. 3,0

D. 3,2

17.设有语句int a=3;,则执行了语句a+=a-=a*a;后,变量a的值是()。

A. 3

B. 0

C. 9

D. -12

18.设有语句int a=3;,则执行了语句a+=a-=a*=a;后,变量a的值是()。

A. 3

B. 0

C. 9

D. -12

19. int a=4,b=3,c=-2,d=2; 逻辑表达式a>0&&b&&c<0&&d>0的值是()。

A. 1

B. 0

C. -1

D. 出错

20.在以下一组运算符中,优先级最高的运算符是()。

A. <=

B. =

C. %

D. &&

21.设整型变量i的值为3,则计算表达式i---i后表达式的值为()。

A. 0

B. 1

C. 2

D. 表达式出错

22.设整型变量i,j=3; 则计算表达式i=j+++j后i,j的值为()。

A. 4,4

B. 6,6

C. 4,6

D. 6,4

23.设整型变量a,b,c均为2,表达式a+++b++c++的结果是()。

A. 6

B. 9

C. 8

D. 表达式出错

24.设整型变量i值为2,表达式(++i)+(++i)+(++i)的结果是()。

A. 6

B. 12

C. 15

D. 表达式出错

25.设整型变量i,j值均为3,执行了“j=i++,j++,++i”后,i,j的值是()。

A. 3,3

B. 5,4

C. 4,5

D. 6,6

26.若已定义x和y为double类型,则表达式;x=1,y=x+3/2的值是()。

A. 1

B. 2

C. 2.0

D. 2.5

27.sizeof(double)的结果值是( )。

A.8 B. 4 C. 2 D. 出错

28. 表达式“1?(0?3:2):(10?1:0)”的值是()。

A. 3

B. 2

C. 1

D. 0

29.设a=1,b=2,c=3,d=4,则表达式:a

A. 4

B. 3

C. 2

D. 1

30.设a为整型变量,不能正确表达数学关系:10

A. 10

B. a==11||a==12||a==13||a==14

C. a>10&&a<15

D. !(a<=10)&&!(a>=15)

31.int a=0; if(a=1) a+=10; 结果的值是()。

A. 0

B. 11

C. 10

D. 出错

32.下列表达式中符合C语言语法的赋值表达式是()。

A. a=7+b+c=a+7

B. a=7+b++=a+7

C. a=(7+b,b++,a+7)

D. a=7+b,c=a+7

33.设f是实型变量,下列表达式中不是逗号表达式的是()。

A. f=3.2,1.0

B. f>0,f<10

C. f=2.0,f>0

D. f=(3.2,1.0)

34.下列表达式中,不正确的表达式是()。

A. a=1,b=1

B. y=int(x)

C. a=b=5

D. i++

35.若有以下定义:char a、int b、float c、double d,则表达式a*b+d-c值的类型是()。

A. float

B. int

C. char

D. double

36.int n; float f=13.8; 执行“n=((int)f)%3”后,n的值是()。

A. 1

B. 4

C. 4.333333

D. 4.6

37.用十进制数表示表达式“12|012”的运算结果是()。

A. 1

B. 0

C. 14

D. 12

38.设有整型变量a=35,表达式“(x&15)&&(x|15)”的值是()。

A. 0

B. 1

C. 15

D. 35

39.设字符型变量a=3,b=6,计算表达式c=(a^b)<<2后c的二进制值是()。

A. 00011100

B. 00000111

C. 00000001

D. 00010100

40.设a,b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中值为0的是()。

A. ’a’&&’b’

B. a<=b

C. a||b+c&&b-c

D. !((a

41.设a是char型变量,其值字符为’1’,则把其值变成整数1的表达式是()。

A. (int)a

B. int(a)

C. a=a-48

D. a/(int)a

42.设a是int型变量,其值为3,则把其值变成字符’3’的表达式是()。

A. (char)a

B. a=3

C. a=a-48

D. a=a+48

43.设ch是char型变量,其值为’A’,则下面表达式的值是()。

ch=(ch>=’A’&&ch<=’Z’)?(ch+32):ch

A. A

B. a

C. Z

D. z

44.设有整型变量i、j、k,i值为3,j值为6。计算表达式“k=i^j<<3;”后,k的值是()。

A. 56

B. 51

C. 40

D. 27

45.设有无符号短整型变量i、j、k,i值为013,j值为0x13。计算表达式“k=~i|j>>3;”后,k的值是()。

A. 06

B. 0177776

C. 066

D. 0177766

46.设有无符号短整型变量a值为331, 计算表达式“a=(a>>4)&~(~0<<4)”后,a的值是()。

A. 0

B. 15

C. 015

D. 017

二、填充题

1.在内存中存储“A”要占用个字节,存储‘A’要占用个字节。2.C语言中的逻辑值“真”是用表示的,逻辑值“假”是用表示。逻辑表达式值为“真”是用表示的,逻辑表达式值为“假”是用表示的。3.符号常量的定义方法是。

4.说明变量时,若省略存储类型符,系统默认其为 存储类别,该存储类别的类型

符为: 。

5.无符号基本整型的数据类型符为 ,双精度实型数据类型符为 ,字符

型数据类型符为 。

6.定义变量的完整语句格式是 。

7.变量的作用域主要取决于变量 ,变量的生存期既

取决于变量 ,又取决于变

量 。

8.从变量的存储类型来说, 变量不允许初始化。 变量、 变 量和 变量可以初始

化。其中变量如果不进行初始化,则 变量和 变量的初值不

确定,而 变量初值为0。

9.设下列运算符:<<、+、++、&&、<=,其中优先级最高的是 ,优先级最低的

是 。

10.设二进制数A 是00101101,若想通过异或运算A^B 使A 的高4位取反,低4位不变,

则二进制数B 应是 。

11.设a=3,b=2,c=1,则a>b 的值为 ,a>b>c 的值为 。

12.若已知a=10,b=20,则表达式!a

13.设x 和y 均为int 型变量,且x=1,y=2,则表达式1.0+x/y 的值为 。

14.设整型变量x,y,z 均为5:

① 执行“x-=y-z ”后x= ,

② 执行“x%=y+z ”后x= ,

③ 执行“x=(y>z)?x+2:x-2,3,2”后x= 。

15.能表述“20

16.请写出数学式 的C 语言表达式 。

17.C 语言中运算结果可以当成逻辑值使用的表达式有: 表达式、 表达式、 表达式、 表达式、 表达式和 表达式。

第2章 基本数据类型和运算

练习题答案

一、单项选择题

1

2 3 4 5 6 7 8 9 10 A

B A

C B C A

D C A 11

12 13 14 15 16 17 18 19 20 C

B B

C C A

D B A C 21 22 23 24 25 26 27 28 29 30

b ×

c a

A D A C

B

C A B

D A

31 32 33 34 35 36 37 38 39 40

B C D B D A C B D D

41 42 43 44 45 46

C D B B D C

二、填充题

1. 2 1

2.非0 0 1 0

3. #define 符号常量常量

4.动态 auto

5. unsigned double char

6.存储类型符数据类型符变量名1=初值1………变量名n=初值n ;

7.内部变量或是外部变量内部变量或外部变量存储类型

8.外部参照型自动型寄存器型静态型自动型寄存器型静态型

9. ++ &&

10.11110000

11.1 0 (a>b>c a>b 为 1 1>c 假为 0 )

12.1 (先求 !a 为 0 0

13.1.0 (x/y 为0 整除)

14.(1) 5 (2) 5 (3) 3

15.(20

16.a/(b*c)

17.关系算术条件赋值逗号

相关主题