浙江大学C语言总复习题—基本数据类型和运算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第2章基本数据类型和运算
学习和解题要点
1.数据类型
C 语言中的数据类型比别的语言丰富。要学好这部分内容,首先要掌握C 语言的数据在内存中的表示。
整型数据:以二进制的形式表示
(1) int 类型
正数:如 123 (+123)用 16 位二进制(二个字节)表示
原码
最大正整数 215-1=214+213
+23+22+21+20=32767
负数:如–123
原码
反码(符号位不动,其它取反)
补码(补码加
已知补码求原负数符号位不动,其它取反加 1
加
最大负整数
-215=32768 因为 -215 < -(215-1) 所以用 -215而不用 -(215-1)
(2) unsigned (int) 类型
称为无符号整数,它不是指不带“+ 或 -”号的整数,而是指内存表示这类数时没有符号位,16 位二进制都用来表示数,因此
最大数 215+214
+213+2
3+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。
字符型数据:以二进制的形式表示
char 型用 8位二进制(一个字节)表示
如‘a’,在程序中要用单引号表示,输出时无单引号,内存中表示为
6+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。
(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语言中,合法的长整型常数是()。