数据类型、运算符和表达式(1).ppt_第1页
数据类型、运算符和表达式(1).ppt_第2页
数据类型、运算符和表达式(1).ppt_第3页
数据类型、运算符和表达式(1).ppt_第4页
数据类型、运算符和表达式(1).ppt_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

本章学习C语言的基础知识:数据类型、运算符与表达式。 房间内存单元 房号单元地址 预定房间定义变量,int a,b; 入住客人变量赋值,a=3;,第三章 数据类型、运算符和表达式,掌握C的数据类型及其定义方法-P37 掌握C运算符种类、运算优先级、结合性-P365 掌握不同类型数据间的转换与运算-P54 掌握C表达式类型和求值规则,3.1 C的数据类型,3.2 常量与变量,一、常量 1. 什么是常量? 常量是在程序运行过程中,其值不能被改变的量。 2. 常量的分类?,例1:(直接常量) main( ) int r; float l,s; r=10; l=2*3.14159*r; s=3.14159*r*r; printf(“l=%fn”,l); printf(“s=%fn”,s); ,3. 符号常量的特点,符号常量的实际值易于修改。,符号常量意义较明确,属准常数。,二、变量,1. 什么是变量? 变量是指程序在运行过程中,其值会发生改变的量。int a;后 a=4;a=8; ?a 发生了变化 2.变量的属性 变量的属性:变量名、变量类型、变量值,3.变量的使用 C语言中,对所有用到的变量作强制定义,即“先定义,后使用”。,变量名的书写规则: 由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。 例如:下列标识符中,不合法的变量名有: M.D.John , 12%gf , 1add , _ce36 ,age& ,5thclass, lotus-1-2-3 , cd*ef , float 选变量名时,要做到“见名知意” 例如:name st_age sum 大小写字母是两个不同的字符,C变量名习惯用小写字母表示。建议变量名的长度不要超过8个字符。 变量名的含义:变量名实际上是一个符号地址,代表内存单元的地址。,3.3 整型数据 一、整型常量 1. 十进制整数。如123、-456、0,可以为负数 2. 八进制整数。以0开头,如0123表示八进 制数123, 即(123)8,等于十进制数83。 即: (123)8 = 182+281+380=83 3. 十六进制整数。以0x开头,如0x123代表 16进制数123,即 (123)16=1162+2161+3160=291 (6c)16=6 161 +12160 =108,二、整型变量 (一)整型变量的分类,基本型:以 int 表示 短整型:以 short int 或 short 表示 1.类型 长整型:以 long int 或 long 表示 (123l、 123L) 无符号基本型(unsigned int) 无符号型 无符号短整型(unsigned short) 无符号长整型(unsigned long),(-3276832767),short int long,数制转换基本概念 10进制:逢10进1,数码0 1 2 3 4 5 6 7 8 9 2进制:逢2进1,数码0、1 计算:1+1=? 101+111=? 8进制:逢8进1,数码0 1 2 3 4 5 6 7 计算:7+2=? 13+17=? 16进制:逢16进1,数码0 1 2 3 4 5 6 7 8 9 A B C D E F 计算:5+6=? A2+51=? 10 2进制:除2取余。 计算:8 10 8进制:除8取余 计算:8 10 16进制:除16取余 计算:18 ,数制转换基本概念 10进制:逢10进1 数码0 1 2 3 4 5 6 7 8 9,位权为103 102 101 100 故每位的数为相应数码*位权,1234为 1*103+2*102 +3*101 +4*100=1234(十进制表示) 2进制:逢2进1 数码0、1,位权为23 22 21 20 故每位的数为相应数码*位权,1101为 1*23+1*22 +0*21 +1*20=13 (十进制表示) 8进制:逢8进1 数码0 1 2 3 4 5 6 7 ,位权为83 82 81 80 故每位的数为相应数码*位权,0017为 0*83+0*82 +1*81 +7*80=15(十进制表示) 16进制:逢16进1 数码0 1 2 3 4 5 6 7 8 9 A B C D E F 故每位的数为相应数码*位权,00A3为 0*163+0*162 +10*161 +3*160=163(十进制表示),与2进制对应 0 0000 000 0000 0 1 0001 001 0001 1 2 0010 010 0010 2 3 0011 011 0011 3 4 0100 100 0100 4 5 0101 101 0101 5 6 0110 110 0110 6 7 0111 111 0111 7 8 1000 1000 8 9 1001 1001 9 10 1010 1010 A 11 1011 1011 B 12 1100 1100 C 13 1101 1101 D 14 1110 1110 E 15 1111 1111 F,2.整型数据在内存中的存放形式(补码表示法:便于加减运算) int i; i=10;也可用8421法处理 10=(1010)2,2,10,2,5,2,2,2,1,0,余数,0,1,0,1,首位,8421法介绍(基本原理:15=23+22+21+20) | | | | 8 4 2 1 如:11的2进制=? 16 的2进制=? 反之,如已知1101是二进制数,求10进制数。,二进制只有0、1,为何不出现2?逢2进1 八进制只有0 1 2 3 4 5 6 7,逢8进1 十六进制只有09,10以后要占两位,必须用ABCDEF。 F是多少?能出现G吗?逢16进1 通用性的转换方法:除H取余,正向。*权后相加,反向。 思考:用二进制进行过渡。16进制对应4位,8进制对应3 (17)10=1 0 0 0 1=0001,0001=(11)16 (1A)16 =0001,1010=16+8+0+2+0=(26)10 八进制呢?同样方法。 (17)10=16 8 4 2 1 =1 0 0 0 1=010,001=(21)8 (17)8 =001,111=8+4+2+1=(15)10,2.整型数据在内存中的存放形式(补码表示法:便于加减运算) int i; i=10;也可用8421法处理 10=(1010)2,2,10,2,5,2,2,2,1,0,余数,0,1,0,1,首位,0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0,0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0,1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1,1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0,10的原码,取反,取反后再加1,得-10的补码,10的表示法,正数的补码等于它的原码,-10,一个无符号整型变量中可以存放的正数的范围比一般整型变量中正数的范围扩大一倍。只需一般了解。 int a; /* 变量a 的数值范围: -3276832767 */ unsigned int b; /* 变量b的数值范围:065535 */,(二)整型变量的字长 Turbo C:short和 int是2个字节、long 是4个字节,(三)整型数据的数据范围 请看P43表。 注意: 整型常量在给整型变量赋值的时候, 一定要与其数据类型相匹配。 整数常量后加字母l或L,则是long 型常量。 整数常量后加字母u或U,则是unsigned int 型常量,无符号性常量不可能为负数,3.4 实型数据P45,一、实型常量(实数或者浮点数) 1. 十进制数小数形式 如:0.123、123.0、.123、123.、0.0等。 由整数、小数点、小数三部分组成。(必须有小数点)。 2. 指数形式 如:123e3(相当于123x103),或写成 123E3 由尾数、e(或E)和指数三部分表示组成 e或者E前面必须有数字,且e或者E后面的指数必须为整数 如: e3 2.1e3.5 .e3 e 思考:为何错?,二、实型变量,(一)实型变量的分类 C实型变量分为单精度、双精度、长双精度。 float 型 : 字长32位(4个字节) double型 :字长64位(8个字节) long double型:字长128位(16个字节) (二)实型变量的定义 单精度(float型) 如: float x , y ; 双精度型(double型)如:double a=10 , b , c ;,例2.3 main() float a; double b; a=1234.111111 ; b= 1234.111111; printf(“a=%f,b=%f”, a,b); 输出结果: a=1234.111, b=1234.111111 注意: float型的有效位数达到7位 double型的有效位数达到16位,3.5 字符型数据,一、字符常量 1. 单引号括起来的一个字符: T , 7 ,! 2. 转义字符 :指不能用符号直接表示的字符常量。将反斜杠()后面的字符转变成另外的意义。如n中的 n 不代表字母n而作为“换行”符。,例如: n 换行 ,将当前位置移到下一行的开头 t 横向跳格(水平制表,占8列) b 退一格 r 回车,将当前位置移到本行的开头 a 报警 0 空字符 j 代表字符 j 单撇号字符 “ 双撇号字符 ddd 1到3位八进制代表的字符-要会8进制 (165-11710-u) xdd 1到2位十六进制代表的字符-要会16进制 (x6c-10810-l) 反斜杠(字符)考试“n”,出n,main() printf(“12345678901234567890n“); printf(“c tlanguagsberCn“);t跳8格,b退1格,r回本行头 printf(“is tusef165x6c“);165是u,x6c是l ,C language is useful,二、字符型变量 (一)字符变量的定义形式 char c1,c2; (二)字符的长度:1个字节 字符型变量用来存放一个字符常量。实际在内存中存放的是该字符的ASCII码值。,输出结果:i=a,c=a i=97,c=97,字符型数据和整型数据(0255)之间可以通用。,c=c+2;,ASCII(298)=*(*的ASCII是298),0 0 0 0 0 0 0 1 0 0 1 0 1 0 1 0,ASCII(42)=*,298%256=42,main() char beep=a; printf(“beep=%d%cn”,beep,beep); ,beep=7,还会有一声警告音,三、字符串常量,用双引号括起来的一串字符序列。 如: “ascii“,“7y677“ ,“8757gjn“,要点:,注意:a和“a”是完全不同的 。,字符串常量必须由双引号括起。,字符串常量的末尾有一个ASCII码为0 的 字符(字符0),作为字符串结束标志。,字符串常量的存储,存储:字符串中的字符依次存储在内存中一块 连续的区域内,并且把空操作字符 0自动 附加到字符串的尾部作为字符串的结束标志。 故字符个数为n的字符串在内存中应占n+1个字 节。后面讲字符数组时要用到。 例:c=“china”,c h i n a 0,3.6 运算符和表达式的简介,一、什么是运算符和表达式?,1 + 2,C语言的表达式是由常量、变量、调用函数通过运算符连接起来的式子。,二、C运算符 C的运算符见55页 按运算量的数量来分,C语言的运算符分为单目运算符、双目运算符和三目运算符。,三、C表达式,C语言使用的基本表达式有: 赋值表达式,如:a=3 算术表达式,如:3+4*2 关系表达式,如:32 逻辑表达式,如:35&a=b 条件表达式,如:ab?a:b 逗号表达式,如:a=3,b=4,c=5,四、表达式的求值规则,1. 在有多个运算符的表达式中,按照运算符优先级的高低进行运算。(优先级见附录365页) 2. 对于优先级相同的表达式中,按照运算符的结合性来确定运算的次序。,a=b+d/3*8,3.7 算术运算符和算术表达式P55,1、基本的算术运算符: + - (求正与求负) * / % (乘、除、求余) + - (加与减) 说明: a=-b; (1)在“”运算中,若操作数均为整数,则执行整除运算,舍去小数部分。例如:5/3=1 (2)“”要求两侧均为整数,“”运算不能用于float 和 double 型数据 例如: 2,2、 各类数值型数据间的混合运算,一、运算过程:,先自动转换成同类数据,再进行运算。,二、转换规则:,低字长类型转换成高字长类型。,P54例:若有 int i; float f; double d; long double e; 判断表达式:10 +a +i*f - d/e的类型(a的ASCII是97) 原则:向精度高的看齐。请思考: 3/4 ? 3.0/4 ? 1/2*15*20 ? 1.0/2*15*20? char 8位,int 16位 float 32位,double 64位,long double 128位,int unsigned int long int unsigned long int double short , char float,系统自动转换,3、强制类型转换运算符,一般形式:(类型名)(表达式) 例如:(double) a+b; (int) (x+y) 功能把表达式的的值转换成指定的类型。,输出结果: x=3.600000, i=3,注意:强制类型转换后并不改变原来变量的类型 请看下面程序段: main( ) float x,y; int i,j,k; x=3.6; i=(int)x; j=(int)x+5; k=(int)(x+3.6); printf(“x=%f, i=%d”,x,i); ,3.8 赋值运算符和赋值表达式 P59,一、赋值运算符“=”,赋值表达式的格式 = 如:num=5+3,功能:将该运算符右侧表达式的值赋给 左侧变量。,要求:如果表达式类型与左边的变量的类型不 匹配,自动进行类型转换。 结合方向(自右向左)P365: x=y=a+b 等价 x=(y=a+b),复合运算符: 在赋值符“=”之前加上其他运算符,可以构成复合的运算符。,复合赋值运算符优点:书写简洁,如: a+=3 等价于 a=a+3 x*=y+8 等价于 x=x*(y+8) x%=3 等价于 x=x%3,常见复合赋值运算符: +=, =,*=,/=,%=,复合赋值运算 的功能:与左边的变量进行复合运算后再赋给左边变量。,赋值运算 的顺序:自右向左。,a=-180,运算符说明: + + 自增, 变量值加 1 自减, 变量值减 1,3.9 自增、自减运算符P57,i=i+1; i+; i=i-1; i- -;,自增运算符的另一种用法: + + i、 i 先使i的值加(减)1, 再使用i i + +、 i 在使用i之后, 使i的值加(减)1 记忆:+ i + (前加 i 后加) 前加代表:用前加 后加代表:用后加 例:int i=5 , j; j=+i; j=? i=? j=i+; j=? i=?,举例: int j,i=3; j=+i; /*j的值为4*/ j=i+; /*j的值为4,然后i的值变为5 */ j= -i+; /*j的值-5,然后i的值变为6 */自右向左 i+; /* i=i+1; i为7*/ j-; /* i=i-1; */ printf(“i=%d”,i+); printf(“i=%d”,+i);, 自增、自减运算符只能用于变量,不能用 于表达式。,注意:,如: (a+b)+ 5+ (-i)+,使用时,应避免歧义性。,3.10 逗号运算符和逗号表达式P65,表达式1,表达式2,表达式3,表达式n,一、逗号表达式的一般形式,二、逗号表达式的求解原则,依次求式1、式2,直至表达式n,逗号表达式的值为式n的值。,三、逗号运算符的优先级,优先级最低。 其他运算全部完成后才进行逗号运算。,例:逗号表达式,其值为最后一项的值,main() int x1,x2,a; x1=(a=3,6*3); x2=a=3,6*3; printf(“x1=%d x2=%dn“,x1,x2); ,输出结果:x1=18 x2=3,main() for( i=5, j=6; i

温馨提示

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

评论

0/150

提交评论