C语言基本数据类型与表达式1.ppt_第1页
C语言基本数据类型与表达式1.ppt_第2页
C语言基本数据类型与表达式1.ppt_第3页
C语言基本数据类型与表达式1.ppt_第4页
C语言基本数据类型与表达式1.ppt_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

主讲 陆加木,解放军信息工程学院,C语言程序设计,第二章 C语言的基本数据类型与表达式,2.1 C语言的语法基础 2.2 C语言的基本数据类型 2.3 常量和变量 2.4 运算符与表达式 2.5 数据类型转换,计算机中数的表示及进制转换 数码、基与权 数码:表示数的符号 基:数码的个数 权:每一位所具有的值 数制 二进制 八进制 十进制 十六进制,2.0 预备知识,各种进制之间的转换,二进制、八进制、十六进制转换成十进制 方法:按权相加,各种进制之间的转换(整数) 二进制、八进制、十六进制转换成十进制 方法:按权相加,十进制转换成二进制、八进制、十六进制 原理:,方法:连续除以基,从低到高记录余数,直至商为0,二进制与八进制之间的转换 二进制转换成八进制:从右向左,每3位一组(不足3位左补0),转换成八进制 八进制转换成二进制:用3位二进制数代替每一位八进制数,例 (1101001)2=(001,101,001)2=(151)8,例 (246)8=(010,100,110)2=(10100110)2,000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7,各种进制之间的转换(整数),二进制与十六进制之间的转换 二进制转换成十六进制:从右向左,每4位一组(不足4位左补0),转换成十六进制 十六进制转换成二进制:用4位二进制数代替每一位十六进制数,例 (11010101111101)2=(0011,0101,0111,1101)2=(357D)16,例 (4B9E)16=(0100,1011,1001,1110)2=(100101110011110)2,0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 A 1011 B 1100 C 1101 D 1110 E 1111 F,各种进制之间的转换(整数),十进制:4956= 410+910 +510+610,二进制:1011=12+02 +12+12,十六进制:81AE=816+116 +1016+1416,八进制:4275=48+28 +78+58,各种进制之间的转换(整数),原码: 最高位为符号位,其余各位为数值本身的绝对值 反码: 正数:反码与原码相同 负数:符号位为1,其余位对原码取反 补码: 正数:原码、反码、补码相同 负数:最高位为1,其余位为原码取反,再对整个数加1,数值的表示方法原码、反码和补码,负数补码转换成十进制数:最高位不动,其余位取反加1,例 补码:11111001 取反:10000110 加1: 10000111=-7,数值的表示方法原码、反码和补码,2.1 语言的语法基础,特殊符号:通常由12个符号组成,主要用来表示运算符。,2.1.1 C语言字符集,C语言的基本符号可分4个类,归纳如下:,英文字母:大小写各26个,共计52个;,阿拉伯数:0、1、2、3、4、5、6、7、8、9 共10个数字;,下划线: _ ;,运算符:,算术运算符:+ - * / % + -,关系运算符: = = = !=,逻辑运算符: & | !,位运算符: & | ,条件运算符: ?: 和赋值运算符:=,其他分隔符: ( ) . , ;,2.1.2 标识符(*),概念: 就是用来标识变量名、符号常量名、函数名、类型名、文件名等的有效字符序列。,标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。,定义规则:,如: _1 year month student_name sum0 M.D.Jones $123 #a 3b ?c a=b,在C语言中,大小写字母不等效。因此,a和A,I和i,Sum和sum,分别是两个不同的标识符。,用户自定义的标识符不能与保留字(关键字)同名。,定义规则:,2.1.3 关键字,概念: 就是具有特定含义的标识符,用户不能用来作自定义标识符。,C语言中的关键字较少,由ANSI标准推荐的关键字有32个。,与数据类型有关的(14): char int float double signed unsigned short long void struct union typedef enum sizeof,与程序控制结构有关的(12): do while for if else switch case default goto continue break return,与存储类别有关的: auto extern register static,2.1.3 关键字,2.2 基本数据类型,5,整型数据,值为5,算术运算,0.5,实型数据,值为0.5,算术运算,int,float,C语言的数据类型:,基本数据类型,整型,字符型,实型,有,无,说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例:,2.3 常量和变量,2.3.1 常量,概念:在程序运行中,其数值不能被改变的量 分类:直接常量和符号常量 直接常量:是在程序中直接引用的数据。,分为:整型、实型、字符型、字符串,三种表现形式:,十进制形式:与数学上的整数表示相同。 例如: 12, -100, 0,八进制形式:在数码前加数字0 。 例如: 012=1*81+2*80=10(十进制),十六进制形式:在数码前加0X(数字0和字母X,大小写均可)。 例如: 0x12=1*161+2*160=18(十进制),直接常量(整型),十六进制的数码除了数字0-9外, 还使用英文字母a-f (或A-F)表示10-15。 如:0x1e、0Xabcdef、0x1000 但:0X2defg、0x100L都是错误的。,注意事项:,八进制的数码范围为0-7; 则:018、091、0A2 都是错误的数据表示方法。,直接常量(整型),二种表现形式:,十进制形式:由数字和小数点组成;,指数形式:由“十进制小数” + “ e(或E)” + “十进制数整数” 三部分组成。,例如: 3.4 4. .3,例如: 12.5e-6 表示12.510-6,十进制小数,e(或E),十进制数整数,直接常量(实型),注意事项:,小数点不能单独出现;,e或E的两边必须有数,且其后面必须为整数;,如:0. = .0 = 0 = 0.0 .,如: 6E0.2 e5 6E,直接常量(实型),二种表现形式:,用单引号括起来的一个字符;,用单引号括起来的由反斜杠()引导的转义字符。,如:A、 1、? 等。,如: n 101 x41,直接常量(字符型),转义字符表,字符形式,功能,n,换行,t 、V,横向跳格、,b 、r,坚向跳格,退格、,f,回车,、“,8进制数表示的ASCII码对应的字符,反斜杠、单引号、双引号,ddd,换页,xhh,16进制数表示的ASCII码对应的字符,一个字符的多种表示方法:,65D(十进制)=41H(十六进制)=101Q(八进制) 字符A可以表示为A、x41、101、65、0x41、0101。,要避免的错误:,表示单引号: 表示双引号:“ 表示斜线: ,直接常量(字符型),main( ),printf(”abc tde rf tg n“);,printf(“h ti b bjk“);,/* 注代表空格*/,设一个输出区占8列,试分析输出结果。,例:,直接常量(字符型),字符常量与字符串常量不同,定义:用双引号(“”)括起来的字符序列 存储:每个字符串尾自动加一个 0 作为字符串结束标志,例: char ch; ch=“A”;,注意:C语言中没有专门的字符串常量,如果想将一个字符串存放在变量中以便保存,必需使用字符数组,数组中的每个元素存放一个字符,将在数组一章中作介绍。,直接常量(字符串),特点:在程序中不能给它赋值。,概念:是用标识符来表示一个数据。,定义形式:,#define 标识符 常量数据,例如: #define PI 3.14159,如:2*2.3*PI 就等价于 2*2.3*3.14159。,符号常量,。,习惯上,符号常量名用大写,变量名用小写,以示区别。 使用符号常量的好处: 含义清楚 在需要改变一个常量时能够做到“一改全改”。,#define PRICE 30 main( ) int num, total; num =10; total = num* PRICE; printf(“total = %d”, total); ,例,符号常量,概念:其值可以改变的量 变量名与变量值 变量定义的一般格式: 数据类型 变量1,变量2,变量n;,例: int a,b,c; float data;,决定分配字节数 和数的表示范围,合法标识符,2.3.2 变量,变量初始化:定义时赋初值,例: int a=2,b,c=4; float data=3.67; char ch=A; int x=1,y=1,z=1; int x=y=z=1;,变量的使用:先定义,后使用,例1 int student; statent=19; /Undefined symbol statent in function main,例2 float a,b,c; c=a%b; /Illegal use of floating point in function main,变量定义位置:一般放在函数开头,“先定义,后使用”的目的: 凡未被事先定义的,不作为变量名,这保证了程序中变量名使用的正确性。 每个变量被指定为一确定类型,在编译时就能为其分配相应的存储单元。 指定每一变量属于一个类型,这就便于在编译时,检查该变量所进行的运算是否合法。,“先定义,后使用”的目的: 凡未被事先定义的,不作为变量名,这保证了程序中变量名使用的正确性。 每个变量被指定为一确定类型,在编译时就能为其分配相应的存储单元。 指定每一变量属于一个类型,这就便于在编译时,检查该变量所进行的运算是否合法。,2.3.2 变量,整型变量 占字节数随机器不同而不同,一般占一个机器字 shortintlong 可用sizeof(类型标识符)测量,实型变量 float:占4字节,提供7位有效数字 double:占8字节,提供1516位有效数字,字符型变量 字符变量存放字符ASCII码 char与int数据间可进行算术运算,例 float a; a=111111.111; /* a=111111.1*/ double b; b=111111.111; /* b=111111.111*/,例 a=D; /* a=68; */ x=A+5; /* x=65+5; */ s=!+G /* s=33+71; */,没有字符串变量,用字符数组存放,有符号基本整型 signed int 无符号基本整型 unsigned int 有符号短整型 signed short int 无符号短整型 unsigned short int 有符号长整型 signed long int 无符号长整型 unsigned long int,2.3.2 变量,例 #define PRICE 12.5 main() int num=3; float total; char ch1,ch2=D; total=num*PRICE; ch1=ch2-A+a; printf(“total=%f,ch1=%cn”,total,ch1); ,运行结果: total=37.500000, ch1=d,2.3.2 变量,例 求圆的面积 #define PI 3.14159 main( ) float s, r; scanf(“%f“, /* 输出变量s 的值(面积) */ ,2.3.2 变量,变量的溢出,main() int a, b, c, d; unsigned u; a=12; b=-24; u=10; c=a+u; d=b+u; printf(“a+u=%d,”,c); printf(“b+u=%d”,d); 运行结果: a+u= 22,b+u=-14,main() int a b; a=32767; b=a+1; printf(“%d, %d”, a, b); 运行结果: 32767,-32768 原因:超出整型变量范围,溢出 解决:将a,b变量改为long型整数,小 结,1、数据类型的引入及意义,2、符号常量的定义形式和引入符号常量的意义,3、变量的定义、赋值、初始化,运算符的分类,分类依据:运算符的功能,分类:,算术运算符,关系运算符,逻辑运算符,赋值运算符,按位运算符,其它运算符,表达式:,是由操作数和运算符组成的序列。,2.4 运算符与表达式,+:加法,-:减法,*:乘法,/:除法,%:取余或模,3+5=8 1+1=2 +3,3-5=-2 1-1=0 3.-5=-2.0,3*5=15 ab a.b ,3/5=0 3./5=0.6 3/5.=0.6,3%5=3 a%b=a-n*b a、b必须为整数 5%(-3) =5-(-1)*(-3)=2 (-12)%(-5) =(-12)-2*(-5)=-2,算术运算符,2.4.1 算术运算符和算术表达式,定义 用算术运算符和括符将操作数连接起来的式子。,优先级:,( ),* / %,+ -,结合性,自左向右,与数学上一致。,表达式的值:,数值型:int、long、unsigned、double,算术表达式,结合性是指同级运算时运算符的结合方向。 如 a#b#c (#代表某一运算符) 若先运算a#b,再将其结果与c运算, 称为左结合性;从左至右运算规则 若先运算b#c,再将a与其结果运算, 则称右结合性。从右至左运算规则,例2-4:已知: float a=2.0; int b =6,c =3; 求解: a*b/c-1.5+ A +abs(-5)=?,12.0/3,4.0 - 1.5,2.5,+65(int),67.5,5,72.5,算术表达式,+i,-i,先增(减)1,再使用i,i+,i-,先使用i,再增(减)1,单独使用时,+i;,等 价,i+;,等 价,i=i+1;,j=+i;,j=i+;,i=4; j=4;,i=4; j=3;,自增与自减运算符 (难点),若i的初始值为3,结合性:,自右向左,例:,i = 2; j = -i+;,分析: +、-、+(正号)、-(取负)是同级运算符,结合方向:自右向左。,-i+等价于-(i+),对于括号内的自增运算,又要先使用i,再使i增加1。,运算结果: i的值为3,j的值为-2。,自增与自减运算符 (难点),: 小于 ,53, 35,=: 小于等于,5=3,3=5,与数学上()不同,: 大于,53,35,=: 大于等于,5 =3,3 =5 ,与数学上()不同,=:等于,5=3 ,与数学上(=)不同,!=: 不等于,5!=3 ,与数学上()不同,2.4.2 关系运算符和关系表达式,关系运算符,关系运算概念:比较运算,比较两个操作数, 看是否满足给定的关系。,用关系运算符将表达式连接起来的式子,优先级, =,高 低,= !=,结合方向:,自左向右,表达式的值,关系成立,即为真,结果为1;,关系不成立,即为假,结果为0;,算术 运算符,高 低,C语言中,真:非0值,假:0值,关系表达式,2.4.2 关系运算符和关系表达式,! 逻辑非,一元运算符,运算规则:取反,真,假,假,真,& 逻辑与 ,又称逻辑乘。,运算规则:两个操作数均为真,结果为真。,| 逻辑或 ,又称逻辑加。,运算规则:只要两个操作数有一个为真,结果为真。,逻辑运算符,2.4.3 逻辑运算符和逻辑表达式,用逻辑运算符将表达式连接起来的式子。,优先级,关系运算符,&逻辑与,高 低,算术运算符,高 低,!逻辑非,高 低,|逻辑或,高 低,结合性,!:自右向左,&、|:自左向右,逻辑表达式,逻辑表达式,逻辑运算真值表,C语言中 运算量: 0表示“假”, 非0表示“真”; 运算结果: 0表示“假”, 1表示“真”。,int a=5; float b=3.5;,!a,0,!b,0,a&b,1,a|b,1,!a&!b,0,例2-5:,逻辑表达式,注 意:,在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。,逻辑表达式,例2-6:,a=0; b=1; c=2; d=a+,d=(a+),运算结果: d=0,a=1,b=1,c=2,a & b & c,求解方法:只有a为真(非0),才需要判断b的值,只有a和b都为真,才需要判断c的值。只要a为假,就不必判断b和c,运算立即中止。,a | b | c,求解方法:只要a为真(非0),就不必判断b和c;只有a 为假,才判断b;a和b都为假,才判断c。,例2-7:,a=0; b=1; c=2; d=a+|b+|- -c;,d=(a+)|(b+)|(- -c);,运算结果: d=1,a=1,b=2,c=2,赋值运算符,定义:= (数学上的等号),功能:将一个表达式的值赋给一个变量。,赋值表达式,用赋值运算符将变量和表达式连接起来的式子,形式: =,求值规则: 将“=”右边表达式的值赋给左边的变量。,结合性:自右至左,2.3.4 赋值运算符和赋值表达式,例2-8:,(1) x=(y=12)/4,y值为12,x值为3,表达式的值为3,(2) x=y=12/4,y值为3,x值为3,表达式的值为3,(3) x=(y=12/4),y值为3,x值为3,表达式的值为3,(4) (x=y)=12/4,该赋值运算符左边不是变量,而是一个表达式 ,赋值表达式,复合赋值运算符,*=、/=、%=、+=、-=、=、&=、=、=,共10个 由赋值运算符与算术、位移、位逻辑运算符组成。,复合运算符是一个运算符,但功能上,是两个运算符功能的组合。,例2-9:,a+=b 相当于 a=a+b,a*=b+c 相当于 a=a*(b+c),a=2; a+=a*=a;,条件运算符,有两个符号:?、:,它与三个操作数组成三元运算,一般形式:, ? :,求值规则和表达式的值:,求解表 达式1,真(非0),求解表达式2,假(0),求解表达式3,表达式 的值,其它运算符,优先级:,逻辑 条件 赋值,结合性:,自右至左,例2-10:,int max,a=5,b=3; max=ab?a:b,条件运算符,逗号运算符,形式:,逗号表达式1,逗号表达式2,逗号表达式n,求值规则:,从左至右依次计算各表达式的值,优先级:,最低,结合性:,自左至右,表达式的值:,最后一个表达式的值。,例2-11: a b y 逗号表达式 y=a=4,b=5,a+b; 4 5 4 9 y=(a=4,b=5,a+b); 4 5 9 9 y=(a=4,b=5),a+b; 4 5 5 9 y=a=(4,b=5),a+b; 5 5 5 10,注意:,C语言常用逗号作为分隔符, 例如:,int a=3,b=4,c=5;,printf(“%d,%d,%d“,(a,b,c);,printf(“%d,%d,%d“,a,(a,b,c),c);,逗号运算符,求字节运算符,形式:,sizeof 变量名 sizeof (类型名),功能:,求得变量或某种数据类型所需的字节数。,运算结果:,整型数,例 2-13:,int a;float x;,sizeof a,sizeof x, sizeof(int),sizeof(float),C语言允许整型、实型、字符型数据进行混合运算。,有3种转换方式:,自动转换,赋值转

温馨提示

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

评论

0/150

提交评论