C语言设计张捷第三章数据类型、运算符和表达式.ppt_第1页
C语言设计张捷第三章数据类型、运算符和表达式.ppt_第2页
C语言设计张捷第三章数据类型、运算符和表达式.ppt_第3页
C语言设计张捷第三章数据类型、运算符和表达式.ppt_第4页
C语言设计张捷第三章数据类型、运算符和表达式.ppt_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1,第三章 数据类型、运算符和表达式,2,3.1 C语言数据类型,3.1.1 C语言数据类型 整型 字符型 实型(浮点型) 枚举类型 数组 结构体类型 共用体类型,单精度型 双精度型,基本类型,构造类型,指针类型,空类型,数据类型,3,3.1 C的数据类型,4,3.2 常量与变量,3.2.1常量 1.定义:在程序执行期间,其值不可改变的量称为常量 2.类型: 数值常量 例如:10,3 , 2.68等 符号常量 即用一个符号代表一个常量 例如: #define PI 3.1415926 main( ) float r,l,s; r=2; l=2*PI*r;s=PI*r*r; printf(“l=%d, s=%d”, l,s); ,5,说明:,符号常量必须先定义后才能用它表示一个数值。 符号常量的值在其作用域内不能改变,也不能再被赋值。 符号常量名习惯用大写字母表示。,6,3.2.2变量,1. 定义:程序执行期间值可以改变的量。 2.命名规则: 变量名由标识符表示,只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。 例如:下列标识符中,不合法的变量名有: M.D.John , 12%gf , 1add , _ce36 ,age (每个变量分配 4个 字节),3,a,7,在C语言中,变量必须强制定义,其目的: 1、凡未被事先定义的,不作为变量名。 2、每一个变量被指定为一确定的类型,在编译时就能为 其分配相应的存储单元。 3、指定每一个变量为一确定的类型,在编译时据此检查 该变量所进行的运算是否合法。 例如:如果变量 a,b 是整型类型,则可以进行求余运算: a%b 而两个实数类型的变量求余是不允许的。,8,* 选变量名时,要做到“见名知意” 例如:name st_age xm nl class sum * 大小写字母是两个不同的字符,C变量名习惯 用小写字母表示。 * 建议变量名的长度不要超过8个字符。,请 注 意,9,3.3整型数据,3.3.1整型常量的表示法 十进制整数 :由数字(0-9)和正负号表示 例如:123、-456、0 等 八进制整数:以0开头数是八进制数 例如: 0123 即(123)8 =( 83) 10 (123) 8=182+2 81+3 80 =( 83) 10 十六进制整数:以0x或0X开头, 例如: 0x123 即 (123) 16 =( 291) 10 -0x12 即 (-12) 16 =( -18 ) 10,10,3.3.2 整型变量 整型数据在内存中的存放形式(补码表示法:便于加减运算) int i; i=10; 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,11,2整型变量的分类,基本型:以 int 表示 短整型:以 short int 或 short 表示 1.类型 长整型:以 long int 或 long 表示 (123l、 123L) 无符号基本型(unsigned int) 无符号型 无符号短整型(unsigned short) 无符号长整型(unsigned long),(-3276832767),一个无符号整型变量中可以存放的正数的范围比一般整型变量中正数的范围扩大一倍。 int a; /* 变量a 的数值范围: -3276832768 */ unsigned int b; /* 变量b的数值范围:065535 */,12,整型变量的字长 short型字长16位(2个字节)。 long 型字长32位(4个字节)。 int 型随编译程序而定(可以是2个字节,也可以是4个字节) C要求 long型数据长度不短于int型, short型不长于int型。( short=int=long) long 型可以得到大范围的数据,但同时会降低运算速度,因此除非不得已,不要随便使用long型。,13,整型数据的溢出: main() int a,b; a=32767; b=a+1; printf(“”%d,%d”,a,b); 运行结果:32767,-32767 改进:将变量a和b改成long型,并按 %ld 格式输出。,14,整型数据的数据范围 请看P43表。 注意: 1、 在一个整数常量后面加一个字母l或L, 则认为是long 型常量。 2、在一个整数常量后面加一个字母u或U, 则认为是unsigned int 型常量。,15,3.4实型数据,3.4.1实型常量 表示形式有如下两种: 十进制数形式:由数字和小数点及正负号组成。 (注意:必须有小数点) 例如:23.678 .678 23. 指数形式:由数字、小数点、字母e或E及正负号组成。 (注:e或E之前必须有数字,且后指数必须为整数) 例如:3.5E-5 2e3 错误:E2 3.6e3.5 .e6 e,16,3.4.2 实型变量 实型变量可分为: 单精度(float型) 如: float x , y ; 双精度型(double型) 如:double a , b , c ; 说明: 1. float 型变量在内存中占4个字节;double 型变量在内存中占8个字节。 2. 单精度实数提供7位有效数字;双精度实数提供1516位有效数字。 3. 一个实型常量不分float 和 double 型, 一个实型常量 可以赋给一个float 型或 double 型变量,并根据变量的类型截取实型常量中相应的有效位数字。 例如: float a; double b; a=123456.789e5 ; b=123456.789 ;,17,main() float a,c ; double b; a=123456.789e5 ; b=123456789111111.789 ; c=a+20; printf(“a=%f,b=%f,c=%fn ”, a,b,c); 输出结果: a=12345678848.000000,b=123456789111111.781000, c= 12345678848.000000 (避免将一个很大的数与一个很小的数相加,以免出现舍入误差),18,3.5字符型数据,3.5.1字符常量 1 .字符常量:用单引号括起来的一个字符。 例如: a A $ ! 注:a与A是 的字符常量,不同,2. 转义字符:以一个开头的字符序列 例如: n 换行 t 横向跳格(水平制表) b 退格 v 竖向跳格(垂直制表) r 回车 f 走纸换页 a 报警 0 空字符,19,说明:,1、“ddd” 与“xhh”分别表示用八进制数或十六进制数表示一个字符。 例: 101代表ASCII码(十进制)为65的字符A . 系统中所有字符都有ASCII值(见374页) 2、由于 ”在C语言中都有了特殊的意义,故要想在字符串中使用它们,须在其前面再加上一个反斜线。 例如: 反斜线 单引号 ” 双引号 3、除了前面介绍的特殊转义字符外,字母 代表字母本身。如c 代表字母 c。,20,判断下列字符串的长度: “ 054 ” “x56”cta ” “ntbab”,21,22,3.5.2字符变量,定义形式: char 标识符1,标识符2, ,标识符n 例如: char c1, c2, c3, ch ; c1=a ; c2=b ; c3=c ; ch= d ; 说明: 1、字符变量在内存中占一个字节。 2、在内存中,是把字符对应的ASCII码值放到存储单元中. 3、字符型数据与整型数据之间可以通用.,。,6,6,23,main() char c1,c2; c1=97;c2=98; printf(“%c %cn”,c1,c2); printf(“%d %dn”,c1,c2); 输出结果: a b 97 98,main() int i; char c; i=a; c=97; printf(“%c,%dn”,c,c); printf(“%c,%dn”,i,i); 输出结果: a, 97 a, 97,24,3.5.4字符串常量,1.定义:括在一对双引号之内的字符序列或转义字符序列称为字符串常量。 例如:“How are you!” “a” “*abcnt” 2.存储:字符串中的字符依次存储在内存中一块连续的区域内,并且把空操作字符 0自动附加到字符串的尾部作为字符串的结束标志。故字符个数为n的字符串在内存中应占n+1个字节。 例:c=“china”,c h i n a 0,25,b 与B是否相同? b 与“b”是否相同?,b为98,B为66 b是字符常量,“b“是字符串常量,26,3.6变量赋初值,1.初始化:在定义变量的同时为变量赋初值 2.形式: 类型标识符 变量名=常量或常量表达式 例如: int x=10 ; char ch=a ; 变量赋初值允许使用符号常量 例如: #define PI 3.1415926 .float x=PI ; . 可对被定义的变量的一部分赋初值 例如: int a , b, c=1, d=2; float r=2 ,l, s; 可对几个变量赋以同一个初值 例如: int a=6, b=6, c=6; 或可写为: int a=b=c=6;,27,3.7 各类数值型数据间的混合运算,一、运算过程:,先自动转换成同类数据,再进行运算。,二、转换规则:,低字长类型转换成高字长类型。,28,3.7各类数值型数据间的混合运算,形式: 隐式转换 (由系统自动进行) 显式转换 (强制类型转换) 隐式转换的转换规则: int unsigned int long int unsigned long int double short , char float,(1) float 型数据一律转换成double 型数据。 (2) char 和short int 型数据一律转换成 int 型数据 以上两条转换原则说明:即使两个操作数类型相同,但只要它们同属 char , short int 或 float 类型,则转换一定发生。,29,例:若有: int i ; float f ; double d ; long e ; 试判断表达式 3 +b +i*f - d/e 的类型,int unsigned int long int unsigned long int double short , char float,double型,30,C语言使用的基本表达式有: 赋值表达式,如:a=3 算数表达式,如:3+4*2 关系表达式,如:32 逻辑表达式,如:35&a=b 条件表达式,如:ab?a:b 逗号表达式,如:a=3,b=4,c=5,31,3.8算术运算符和算术表达式,1、基本的算术运算符: + - * / % 说明: ()上述运算符均为双目运算符(即有两个操作数) (2)在“”运算中,若操作数均为整数,则执行整除运算,舍去小数部分。例如:5/3= (3)“”要求两侧均为整数,“”运算不能用于float 和 double 型数据 例如: 2,32,2、算术表达式和运算符的优先级与结合性,(1)算术表达式:用算术运算符和括号将操作数连接起来的,符合语法规则的式子。 例如: a + b + a*b/c +2.8 (2)优先级: 高于 (3)结合性: “自左至右的结合方向” 例如:a - b + c 3、强制类型转换 形式:(类型名)(表达式) 例如:( double) (a+b),33,说明: ()表达式应用括号括起 例如:(int)(x+y) ; 若要得到 x/2 的小数部分,应写为: (float)x/2 还是 float (x/2) ()在强制类型转换时,得到一个所需类型的中间变量,原来变量类型未发生变化。 例如: float x=8.6 ; int y; y=(int)x ;,34,请看下面程序段:,main( ) float x; int i; x=3.6; i=(int)x; printf(“x=%f, i=%d”,x,i); ,输出结果: x=3.600000, i=3,注意:强制类型转换后并不改变原来变量的类型,35,4、自增、自减运算符 (、),作用:使变量的值增或减,如: i , i (使用之前,先使i的值加(减)1) i, i (使用之后,使i的值加(减)1) +i 先执行i=i+1,再使用i的值 i+ 先使用i的值,再执行i=i+1 例如:int a=1 , b; b=+a ; b=a+ ;,举例: int j,i=3; j=+i; /*j的值为4,i为4*/ j=i+; /*j的值为4,然后i的值变为5 */ j=-i+; /*j的值-5,然后i的值变为6 */,36,说明: (1)为单目运算符 (2)+ 、只能用于变量,而不能用于常量或表达式。 例如:,(x+y)+ ,+a, b+ 中合法的为: (3)自增、自减运算符为右结合性(即自右至左)。 例如:a+ (a+),4、自增、自减运算符 (、),错误的结合(-a)+,37,练习题,设a=2, 则执行语句 k=+a+a+ 后的 k值为多少?(k=6, a=4) a=(i+)+(i+)+(i+) ? printf(“%d,%d”,i, i+) ?,请避免这种写法,38,3.9 赋值运算符和赋值表达式,1、 赋值运算符(=) 形式:变量名=常量或表达式 作用:将右边常量或表达式的值赋给左边的变量 例如: b=c+d,要求:如果表达式类型与左边的变量的类型不 匹配,自动进行类型转换。,39,2、类型转换的原则,(1) 将实型数据赋给整型变量时,舍弃实数的小数部分 如:若a为int型变量, 执行a=3.56后,则a的值3,(2) 将整型数据赋给实型数据时,数值不变,但以浮点 形式存储到变量中。 如:若b为float型变量,执行b=35后,则b为35.00000,(3) 整型数据赋给字符型变量时, 只将低8位原封不动地送到字符变量中(即截断)。,40,(4) 字符型数据赋给整型变量时, 将字符数据(8位)放到整型变量低8位中。高8位则需要依据“符号扩展”来决定。,41,(5) 将带符号数据赋给长度相同的无符号型变量, 原样照赋。 (6)double 赋给 float 时,截取前面7位有效数字。,42,43,44,P66 (3.11) 写出下面赋值的结果。格中写了数值的是要将它 赋给其它类型的变量,将所有空格添上赋值后的数值。,int 9 9 100 76 53 68 42 -1,char c d L 5 D * X,unsigned int 99 100 76 53 68 42 65535,float 99.000000 100.000000 76.000000 53.65 68.000000 42.000000 65535.000000,long int 99 100 76 53 68 42 65535,45,3、复合赋值运算符 复合赋值运算符:在赋值符“=”之前加上其它运算符 共有10种复合赋值运算符 += ,=, ,&, =

温馨提示

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

评论

0/150

提交评论