C语言数据类型、运算符与表达式.ppt_第1页
C语言数据类型、运算符与表达式.ppt_第2页
C语言数据类型、运算符与表达式.ppt_第3页
C语言数据类型、运算符与表达式.ppt_第4页
C语言数据类型、运算符与表达式.ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

数据类型、运算符与表达式数据类型、运算符与表达式 C C语言程序设计语言程序设计 1 3.1 C的数据类型 数据类型 基本类型 构造类型 指针类型 空类型 整型 字符型 实型(浮点型) 单精度型 双精度型 枚举类型 数组类型 结构体类型 共同体类型 2 常量 在程序运行过程中,其值不能被改变的量称为常量,常量分为以下 两类。可以从字面形式判别的是字面常量或直接常量;可以用一个 标识符代表一个常量,称符号常量。 符号常量的使用: #define RATE 8.54 void main( void ) float result; result = 1000.0 * RATE; printf( “result is %f n”, result ); 3 变量 n 变量名和变量值: 3 a 变量名 变量值 存储单元 n 标识符:标识变量名、符号常量名、函数名、类型名、文件名的 有效字符序列。 n C语言对标识符的规定: 1、只能由英文字母、数字字符、下划线构 成,且第一个字符必须是英文字母(大写或小写)或下划线。2、在C语言中, 力求简洁,做到“见名知义”,Turbo C允许32个字符。 n C语言对变量的规定:做到先定义,后使用。 4 整型数据 整型常量的表示方法 整型常量即整型常数 十进制整数 八进制整数(以0开头的数) 十六进制整数(以0x开头的数) 整型变量的分类 整型变量总体上可以分为有符号数和无符号数两类 整数类类型 位数 定义类义类 型字 表示数的范围围 有 符 号 基本型 16into -32768+32767 短整型 16short into -32768+32767 长长整型 32long into -231(231-1 ) 无 符 号 基本型 16unsigned into065535 短整型 16unsigned short 065535 长长整型 32unsigned long 0(232-1) 5 整型数据 整型数据在内存中的存放形式 整型数据在内存中以二进制形式存放,确切的说是以 补码的形式表示的。 一个正数的补码和原码形式相同,而负数的补码是将该数的绝对 值的二进制形式,按位取反再加1。 111111111111111 1111111111111111 整型数 无符号整型数 表示-1的补码 表示数值65535 1 6 整型数据 n 整型变量的定义 对变量的定义,一般是放在一个函数的开头部分的声明部分。 main( ) int a, b, c, d; /* 定义整型变量 */ unsigned u; a = 12; b = -24; u = 10; c = a + u; d = b + u; printf( “a + u = %d t b + u = %d n”, c, d ); n 整型数据的溢出 如果一个整型变量存放的值,超出它所允许的范围,将会产生溢出 ,例如一个into型变量,如果其值为32767,再加1就会产生溢出 ,变成-32768。但运行时并不报错。 7 整型数据 整型常量的类型 注意: 1、一个整型常量,如果其值在-32768+32767范围内, 认为它是into型,它可以赋给into型和long int型变量。 2、一个整型常量,如果其值超过了上述范围,而在- 2147483648+2147483647范围内,则认为它是long int 型。 3、一个整常数后面加一个字母u或U,认为是unsigned int 型。 4、一个整常数后面加一个字母l或L,认为是long int型常数 。 8 实型数据 实型常量的表示方法 1、十进制小数形式:.123 23.1 2、 指数形式:123e3 1.234e34(e前必须有数字,e后指数 必须为整数) 实型变量的分类 单精度(float): 4B 10-381038 67 双精度(double):8B 10-30810308 1516 长双精度: 16B 10-4931104932 1819 实型数据在内存中的存放形式 一个实型数据一般在内存中占四个字节,系统把一个实型数分成 小数部分和指数部分,分别存放采用规范化的指数方式示,如: 数符小数指数符号指数 +0.123456-2 小数部分指数部分 9 实型数据 实型变量的定义示例: float x,y; /*指定x、y为单精度实数*/ double z; /*指定z为双精度实数*/ 实型数据应用中的误差问题(error.c) main() float a,b;double c,d; a=123456.789e5;c=123456.789e5;b=a+20; d=c+20; printf(“n%fn“,a);printf(“%fn“,b); printf(“%fn“,c);printf(“%fn“,d); 应避免将一个很大的数和很小的数直接作加、减运算,否则 就会“丢失”小的数。 10 实型数据 实型常量的类型 1 c编译系统将实型常量作为双精度来处理,若按照单精度来处理 ,应该在实型常量的后面加字母f或F。 2 实型常量赋值给实型变量的规则:根据实型变量的类型来截取 实型常量中相应有效位数字(able.c)。 main() float a; double b; a=123456.789876e5;b=12345.789876e5; Printf(“%f,%fn”,a,b); 11 字符型数据 字符常量 C语言的字符常量是用单引号括起来的一个字符 ,如a,X,A 。C语言还有一些特殊字符的常量,如下表 字符形式功能 n换换行 t横向跳格(即跳到下一个输输出区) v竖竖向跳格 b退格 r回车车 f走纸换页纸换页 反斜杠字符 单单引号 ddd1到3位八进进制数所代表的字符 xhh1到2位十六进进制数所代表的字符 12 字符型数据 字符型变量 字符变量用来存放字符常量, 字符变量的定义形式如下: char c1,c2; 可以用下面的语句对c1、c2赋值: c1=a; /*c1=97*/ c2=b; /*c1=98*/ printf(“%c,%c,%d,%d”,c1,c2,c1,c2); 字符数据的存放 以字符的ASCII码存放在存储单元中 97980110000101100010 C1 C2 C1 C2 13 字符型数据 例子 大小写字母的转换 main( ) char c1,c2; c1=a;c2=b; c1=c1-32;c2=c2-32; printf(“%c %c”,c1,c2); 注意:1、字符型数据和整形数据是通用的。但字符数据只能 存放0255范围内的整数。 2、字符数据与整数可以直接进行算术运算。 3、字符数据与整型数据可以相互赋值 4、Turbo C将字符数据处理成带符号的整数,如果不想 按有符号处理,可将字符变量定义为unsigned char类型。 main() into i; char c; i=a;c=97; printf(“%c,%dn”,c,c); printf(“%c,%dn”,i,i); 14 字符串常量 字符串常量 字符常量是用一对双引号括起来的字符序列。 如:“How do you do .“ “CHINA“ “a“ “$135.45“ 用printf语句输出一个字符串常量:printf(“How do you do .n“); 在内存中字符串是以字符0结束的,字符0是“字符串结束标 志”,其ASCII码为0,以此判断字符串是否结束。 注意:字符常量与字符串常量的区别: “a“ a a0a 15 变量赋值 先定义后赋值:int a; a=21; 定义变量同时,使用变量初始化:int a=21; 使被定义变量的一部分赋初值:int a,b,c=5; 对几个变量同时赋初值:int a=3,b=3,c=3; 例子:fuzhi2.c 这两种初始化方式都对吗:char c1=a; char c2=“addff”; 16 各类数值型数据间的混合运算 看例子:3+6*8.7-12表达式 123+23.4*b-2+a表达式是合法的。 数据类型转换 整型、实型、字符型数据间可以混合运算。 在运算时,不同类型的数据要先转换成同一类型,然后 进行运算。转换的规则如下所示: 高 double float long unsigned 低 int char,short 17 算术运算符和算术表达式 C运算符简介 C语言的运算符有以下几类 1.算术运算符(+ - * / % + -) 2.关系运算符( = = | j = i+; 注意 1、上述两种运算只能用于变量,而不能用于常量或表达式。 2、上述两种运算的结合方向是“自右至左”。 例子:若i=3 , 则printf(“%d”, -i+) 输出结果为-3,然后 i增值为4 21 算术运算符和算术表达式 有关表达式使用中的问题说明 1、表达式中包含自增或自减运算时,很容易出错。 例如:(i+)+(i+)+(i+) 不同系统处理的不同,如i为3,可为3+4+5,也可为3+3+3,为 避免歧义性,如果想得到12,可以写成如下: i=3: a=i+; b=i+; c=i+; d = a+b+c; 2、C语言中有的运算符为一个字符,有的运算符由两个字符组成 ,在表达式中尽可能多的“自左而右”组成一个运算符 。如: i+j应解释为(i+)+j,而不是i+(+j)。 3、在调用函数时,实参数的求值顺序,标准C中并没有统一规定 。如:设i的初值为3,下面的函数调用 printf( “%d %dn”, i, i+ ) 在有的系统中,从左到右求值,输出“3,3”。在多数系统中,是 从右到左求值,输出“4,3”。在vc和turbo c中输出顺序都是从 右到左。 22 赋值运算符和赋值表达式 赋值运算符 赋值符号“=”就是赋值运算符 ,它的作用就是把一个数据赋给一 个变量。 类型转换 如果等号两侧的类型不一致,但都是数值型或字符型时,在赋值 时要进行类型转换。 1、将实型数据赋给整型变量时,舍去实数的小数部分。 2、将整型数据赋给单、双精度变量时,数值不变;但以浮点 数形式存储到变量中。 3、将一个double型数据赋给float变量时,截取其前面7位有 效数字,但注意数值范围不能溢出。 4、字符型数据赋值给整型变量 ,有两种情况如果所用系 统将字符处理为无符号的量,则将字符的8位放到整型变量低8位 ,高8位补0。如果所用系统将字符处理为带符号的量,则进行 符号扩展。图3.11 5、将一个into、short、long型数据赋给一个char型变量时, 只将其低8位原封不动的送到char变量。图3.12 23 赋值运算符和赋值表达式 6、将带符号的整型数据(int)赋值给长整型(long int)变量时 ,要进行符号扩展。反之若将长整型数据赋值给一个整型 变量,只将长整型数据中低16位原封不动送到整型变量(截 断)。图3.13、3.14 7、将无符号整型数据(unsigned int)数据赋值给长整型(long int)变量时,不存在符号扩展的问题,只需将高位补0即可 。 8、将无符号unsigned类型数据赋给一个占字节数相同的整型 变量时,若数据范围超过,则会出现数据错误。图3.15 9、将有符号型赋值给长度相同的unsigned型变量,原样照赋 (连符号位也作为数值一起传送)。图3.16 24 赋值运算符和赋值表达式 复合赋值运算符 在等号之前加上其它运算符,可以构成复合的运算符。例如 a += 3 等价于 a = a + 3 x *=y+8 等价于 x = x * ( y + 8 ) C语言规定可以使用十种复合赋值符,即 += -= *= /= %= = a = ( b = 5 ) ; a = 5+(c = 6); a=(b=10)/(c=2); a+=a-=a*a ; printf(“d%”,a=b); 25 逗号运算符和逗号表达式 逗号运算符(运算级别最低,自左向右结合性) 它将两个表达式连接起来。其一般形式为 表达式1,表达式2 逗号表达式的求解过程是先求表达式1,再求表达式 2。整个逗号表达式的值是表达式2的值。例如 3+5,6+8 其值为14; a=3*5,a*4 其值为60。 逗号表达式的一

温馨提示

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

评论

0/150

提交评论