C语言程序设计基础 第2章 基本数据及其运算_第1页
C语言程序设计基础 第2章 基本数据及其运算_第2页
C语言程序设计基础 第2章 基本数据及其运算_第3页
C语言程序设计基础 第2章 基本数据及其运算_第4页
C语言程序设计基础 第2章 基本数据及其运算_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2.1 基本类型数据,C语言中,基本数据有三种: 整数:整数是不带小数点和指数符号的数据。例如:29 浮点数:浮点数是带有小数点或指数符号的数值数据。例如:3.6 5.6e+02 字符:字符型数据表示一个字符,占用一个字节(8个二进制位)。 例如:a,2.1.1 整型数据,按其数值范围大小划分成三种: 1. 基本型:用 int 标记 2. 短整型:用 short int 标记,简写为 short 3. 长整型:用 long int 标记,简写为 long 按值内部的最高位不同理解又有两类: 1.带符号:存储单元最高位作为符号位 2.不带符号:存储单元中全部二进位用作存放数据本身,而没有符号位。

2、 表示方法: unsigned int、 unsigned short、 unsigned long,例如 int i, j; /* 定义带符号的整型变量 */ unsigned short k; /* 定义无符号短整型变量 */ long m, n; /* 定义带符号的长整型变量 */ 注意:同一类型在不同版本占用字节数不同,不特殊说明的指的都是TC,类型,版本,出错指数:,ANSI 标准定义的整数类型 类型 比特数 取值范围 int 16 -3276832767 short 16 -3276832767 long 32 -21474836482147483647 unsigned int

3、16 065535 unsigned short 16 065535 unsigned long 32 04294967297,整型变量的定义 对变量强制类型定义的目的:让编译为其分配内存单元。 各种变量的定义一般在函数的开始部分 例 #include void main( ) int a,b,c,d; unsigned int u; /*变量强制类型定义 a=12; b=-24; u=10; c=a+u; d=b+u; printf(“a+u=%d,b+u=%dn”,c,b+u); 运算结果:a+u=22, b+u=-14 由此可见:不同类型的整型数据可以进行混合运算,出错指数:,整型常量的

4、书写形式, 十进制整数:如 0,123,-45。 八进制整数:以数字0开头,并由07组成的数字符序列。如:0123表示八进制整数,其值等于十进制整数为:1*82 + 2*81 + 3 = 83 十六进制整数:以0 x(或0X)开头,并由十六进制数的数字符组成的数字符序列。表示十六进制数的数字符有 16 个:09 和 A、B、C、D、E、F,其中六个字母也可以小写。 如:0 x123表示十六进制整数,其值等于十进制整数为:1*162 + 2*161 + 3 = 291;0 xabc,其值等于10*162 + 11*161 + 12 = 2748。, 长整型整数和无符号整数的表示, long 型整

5、数:在整型常数后加字母 L 或 l,即为long 型整型常数。 例如:0L、132L 等。 不带符号的整型:在整型常数后加字母 U 或 u,即为 unsigned 型整型常数。例如:1U、122U 等。 不带符号的 long 型整数:在整型常数后同时加上字母 U 和 L,表明该整型常数是 unsigned long 型。例如: 22UL、35LU 等。,出错指数:,2.1.2 浮点型数据,按数值范围大小和精度不同分成三种: 1. 单精度型:用 float 标记-在内存中占用4个字节(32个二进位),7个十进位有效数字,能表示绝对值约为10-371038。 如: float x, y; 2. 双

6、精度型:用 double 标记-在内存中占用8个字节(64个二进位),16个十进位有效数字,能表示绝对值约为10-307 10308。 如: double result; 3. 长双精度实型:用 long double 标记- long double型数据一般占用比double型数据更多的字节,通常为16个字节。但在VC中,也只占用8个字节。 如:long double z;,浮点数的一般书写格式 正负号 整数部分.小数部分 指数部分,注意: (1)整数部分和小数部分可以任选,但不可同时没有。 (2)小数点和指数部分不可以同时都没有。 (3)指数部分是以一个字母e或E(代表10)开头,后跟一个

7、整数。 例如:合法的浮点常数:7.、.457、1E5、1.5e-6 不正确的浮点常数: E4、.E5、4.0E,出错指数:,(4) 在浮点数后加f表示float;加L(或l)表示long double 型,在浮点数的最后不加任何字母,C系统认为此数是 double 型。 例如: 1.5 表示double型 1.5f 表示float型 1.5L表示long double型,出错指数:,注意要点:,(2)浮点数运算有一定的计算误差 例如:要判别两个浮点型变量x和y是否相等 正确:fabs(x-y)1e-6/* x与y非常接近则认为相等*/ /* fabs()是求绝对值的函数*/ 错误:x = y

8、/* x与y不可能完全相等 */,(1)接受的浮点数与书写会有一定的误差 例如: float x = 1.23456789; 因x只能存储约7位有效数字,浮点数1.23456789所对应的二进制形式中,超出存储位数的那些位不会被存储。,出错指数:,(3)未加说明,系统将实型常量作为双精度处理 float f; f=2.45678*4532.65 系统将两数按双精度运算,然后将前7位赋给实型变量f, 缺点:浪费系统资源,降低运算速度; 解决的办法:在数的后面加f,如2.45678f,系统将其按单精度数运算。,(4)实型常量赋给float或double类型变量时,根据变量的类型截取实型常量的有效位

9、。 #include void main( ) float f1; double f2; f1=111111.111; f2=111111.111111; printf(“f1=%fnf2=%lfn”,f1,f2); 输出结果:,f1=111111.109375 f2=111111.111111,2.1.3 字符型数据,字符型数据用于表示一个字符值。 字符型数据的内部表示是字符的ASCII代码(以二进制形式)。 例如:A的ASCII值为65,内存中存的是:1000001 字符型数据的类型符用char来标记。 如:char c1, c2; 字符型数据可看作是-128127或0255的一个整数。,

10、普通字符常量,普通字符常量:用单引号括住的一个字符。例如:a、B、$ 例 字符型数据与整型数据通用的示例程序。 #include void main() char c1, c2; c1 = 97; c2 = c1+1; /* 字符型数据与整型数据混合运算 */ printf(c2 = %c, c2s ASCII code = %d n, c2, c2); ,c2 = b, c2s ASCII code = 98,转义字符常量,转义字符常量:用 字符 或 字符列 来标记。 例如: r :回车符 光标位置移到当前行首 t :制表符 使输出位置横向跳至下一个输出区开始列。屏幕自 左向右每8列为一个输

11、出区。,.,一个制表位,b退格(Backspace键) n换行符,光标位置移到下一行首 反斜杠符 单引号符 双引号符 0字符串结束符 dddddd为1至3个8进制数字 如,12也能表示换行符n xhhhh为1至2个16进制数字 如,x41也能表示大写字母A,需要牢记:,例: #include void main ( ) printf (“ ab ct derftgn”); printf (“htibbj kn”); 运行结果: f gde h j k,注意:t在跳到下一制表位的过程中用 填充它经过的位置,字符串常量,字符串常量:用双引号括起来的一串字符。 例如:I am a student.、

12、China、a 普通字符与字符串的区别,出错指数:,注意要点:字符型与字符串常量的区别,例如:char c=a char c= a 又如:字符串“China”在内存中的存储形式(需要6个字节),出错指数:,2.2 数据运算, 运算符的优先级 优先级用来标志运算符在表达式中的运算顺序。优先级高的先运算,优先级低的后运算。 如:x-y*z 相当于 x-(y*z) 运算符的结合性 在优先级相同情况下,表达式的计算顺序由结合性来确定。大多数运算符的结合性是从左至右,只有单目、三目和赋值运算符的结合性是从右至左的。 如:x=a+b-c; a=b=c=1.5;,x=(a+b-c),a=(b=(c=1.5)

13、,出错指数:,2.2.1 赋值运算,简单赋值形式: 变量 = 表达式 赋值表达式的结果是等号左边变量的值 (1)计算表达式,并将计算的值赋给变量; (2)如表达式类型与变量类型不一致,将表达式值的类型自动转换成变量的类型; (3) 将表达式的值赋给变量。 说明:赋值运算符的结合性是“自右至左”。,出错指数:,2.2.1 赋值运算,例1:int x; double y; y = x = 3.5; 例2:i=4+(j=7); 例3:i=(j=3)+(k=8);,x的值为3, y的值为3.0 表达式的值为3.0,使j值为7,i值为11,表达式的值为11,使j值为3,k为8,i为11,表达式的值为11

14、,变量赋初值 定义的同时给变量赋初值 如:int a=3; float b=3.1415; char c=x; 2.定义变量时,可以对其中的一部分变量赋初值 如: int a=3, b, c, d=8; 3.把一个常量赋给不同变量时,最好分别进行。 如:int a=b=c=3; 错误 而应写为:int a=3,b=3,c=3; 4.初始化是在程序运行时,执行本函数时赋以初值的。 如:int a=3; 相当于:int a; a=3;,赋值运算复合赋值运算,在赋值运算符“=”之前加上其他运算符,可构成复合运算符。 复合运算符: +=、-=、*=、/=、%=、=、 b=(a+=a-=a*a); pr

15、intf (“a=%d, b=%dn”,a,b); ,运算结果: a= -264,b= -264 a + = a- = a*a a=a-a*a 12-12*12 -132 a=a+(-132) -132+(-132) -264,出错指数:,2.2.2 算术运算一般运算符,单目运算符:+(取正)、-(取负) 双目运算符:+(加)、-(减)、*(乘)、/(除)、%(求余) 说明:(1) 两个整数相除结果为整数(取整),若有一个数为浮点数,则结果为浮点数。 (2) 求余运算符(%): 要求参与运算的两个分量均为整型数据,如 5 % 3 = 2。求余运算所得结果的符号与被除数的符号相同。如: -5 %

16、 3 = -2 , 5 % -3 = 2 。 (3)加、减、乘、除和求余运算都是双目运算符,结合性都是从左至右的。取正(+)、取负(-)是单目运算符,结合性是从右至左。优先级:+(取正)、-(取负)高于*、/、%高于+(加)、-(减)。,出错指数:,例:整型数据除法运算 #include void main ( ) int a,b,c; a=5; b=3; c=a/b; printf(“c=%dn”,c); ,出错指数:,运算结果:c=1,例 实型数据除法运算 #include void main ( ) float a,b,c; a=5; b=3; c=a/b; printf (“%fn”,

17、c); ,运算结果:1.666667,算术运算自增和自减运算符,+i前缀形式,表示在引用变量i之前,先使i加1,以加1后的i值为运算结果; -i前缀形式,表示在引用变量i之前,先使i减1,以减1后的i值为运算结果; i+后缀形式,表示在引用变量i之后,才使i加1,即以增1前的i值为运算结果; i-后缀形式,表示在引用变量i之后,才使i减1,即以减1前的i值为运算结果。,自增/自减运算符例,例如: i = 4; j = +i; i = 4; j = i+; i = 4; j = -i; i = 4; j = i-;,i结果为5,j的结果为5,i结果为5,j的结果为4,i结果为3,j的结果为3,i

18、结果为3,j的结果为4,例 #include void main( ) int i,j; i=3;j=i+; printf (“i=%d,j=%dn”,i,j); 说明: 1.+,-运算符只能用于变量,而不能用于常量和表达式。 如a+,b-是正确的,而5+,(x+y)-却是错误的。 2.+,- -运算符的结合方向是从右向左,与-运算符优先级相同,出错指数:,运算结果:i=4,j=3,有关表达式使用中的问题说明 (1)C中的运算符和表达式: 又如i=3,表达式: (i+) + (i+) + (i+) 有的系统的求值顺序是先求第一个,再求第二个最后求第三个子表达式,其结果是: 3+4+5=12,

19、最后i的值为6 而在Turbo C中却有所不同:,例 #include void main( ) int i=3,j=3,k,q; k=(i+)+(i+)+(i+); q=(+j)+(+j)+(+j); printf (“i=%d,j=%d,k=%d,q=%dn”,i,j,k,q); ,运算结果:i=6,j=6,k=9,q=18,出错指数:,VC+环境下连续自增(自减)运算规则(补充): 1、 在一般表达式中和在函数参数中计算的结果相同(这一点与Turbo C环境不同); 2、 后缀:同表达式中Turbo C的情况相同:先统一取值后依次自增,如: int a,i=5; a=i+i+i+; a=

20、15, i=8. 3、 前缀:前两个自增同Turbo C,即依次自增后统一取值,后面的每个自增后即取值,如: int a, i=5; a= +i +(+i)+(+i); a=22, i=8.,(2)在C语言中运算符的确定 在由多个字符组成的表达式中,应尽可能多地从左向右将若干个字符组成一个运算符。 如:i+j 其结合性是:(i+) +j 而不是:i+(+j) 。 (3)printf 函数输出实参的顺序 如:int i=3; printf (“%d,%dn”,i,i+); 有的系统按从左到右的顺序求值,输出结果是:3,3 而Turbo C 是按从右到左顺序求值,输出结果是:4,3 结论:不写别人

21、甚至自己都看不懂的程序,也不写那些不知道系统会怎样运行的程序,2.2.3 关系运算和逻辑运算,关系运算符:、=、=、!= 关系运算符用于对两个值进行关系比较,判定比较条件是否满足。在语言中,条件满足的值为1;条件不满足为 0。 (1) 优先级:、= 高于 =,!= 如:表达式 x y = c y) = (c u+v 等价于 x (u+v) (3) 关系运算符的结合方向是自左至右的 如: i=1,j=2,k=3 则表达式 kji 的值为,0,出错指数:,2.2.3 关系运算和逻辑运算,逻辑运算符 计算 +a | +b float y=2; double z=4; printf(int=%d, f

22、loat=%d, double=%dn“, sizeof x, sizeof (float), sizeof z); 结果:int=4, float=4, double=8,2.2.5 其他运算符 位运算,位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息结果。 位运算符按优先级从高到低依次为: (位反)、 int i; x=3.6; i=(int) x; printf(“x=%f,i=%d”,x,i) 注意:(int)(x + y) 与 (int)x + y 含义不一样,类型名(表达式),TC中不承认这种写法,认为是错误的,

23、注意!,输出结果为:x = 3.600000 , i=3,章节试题 1) 写出语句b=(a=6,a*3);执行后整型变量b的值是( ) 6 (B) 18 (C) 24 (D) 语法出错,正确答案: B,章节试题 2) 设a,b,c,t为整型变量,初值为a=3,b=4,c=5,执行完语句 t=!(a+b)+c-1 printf(“%d ”,(i+1,i+j,j+1); printf(“%d ”,i+1,i+j,j+1); (A) 5 3 (B) 6 3 (C) 无定值 3 (D) 5 不合法,正确答案: (A),数的进制(补充内容) 常用的进制 日常生活中使用的数制有很多种,通常在计算机中采用的

24、是二进制。由于二进制与八进制和十六进制有特殊的关系,所以在计算机中常常根据需要使用八进制或十六进制。 (1)十进制数:逢十进一,由数码09组成 (2)二进制数:逢二进一,由数码0、1组成 (3)八进制数:逢八进一,由数码07组成 (4)十六进制:逢十六进一,由数码09、字母af或AF 组成,第2章 基本数据及其运算,进制转换(补充内容) (1)十进制与其他进制之间的转换 转换规则:整数部分除以对应进制的基数逆序取余,小数部分则乘以相应进制基数顺序去整。 例 (67)10 = (1000011)2 基 余数 2 67 1 2 33 1 2 16 0 2 8 0 2 4 0 2 2 0 2 1 1 0,逆序取余数,例 (65)10 =(41)16 基 余数 16

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论