谭浩强C语言课件第3章.ppt

上传人:牧羊曲112 文档编号:6609945 上传时间:2023-11-17 格式:PPT 页数:74 大小:234KB
返回 下载 相关 举报
谭浩强C语言课件第3章.ppt_第1页
第1页 / 共74页
谭浩强C语言课件第3章.ppt_第2页
第2页 / 共74页
谭浩强C语言课件第3章.ppt_第3页
第3页 / 共74页
谭浩强C语言课件第3章.ppt_第4页
第4页 / 共74页
谭浩强C语言课件第3章.ppt_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《谭浩强C语言课件第3章.ppt》由会员分享,可在线阅读,更多相关《谭浩强C语言课件第3章.ppt(74页珍藏版)》请在三一办公上搜索。

1、第三章 数据类型、运算符、表达式,数据结构+算法=程序,C语言提供的数据类型:,C语言中,数据有常量和变量之分,它们分别属于以上这些类型。在程序中对用到的所有数据都必须指定其数据类型,3.2 常量与变量,3.2.1 常量(Constant)与符号常量,常量:在程序运行过程中,其值不能被改变的量。如:12、3、0、-3为整型常量,4.6、-1.23为实型常量a,d为字符常量这种常量也称为字面常量或直接常量,符号常量:代表常量的标识符(符号),一个标识符代表一个常量。例3.1#define PRICE 30/*PRICE即为符号常量,代表30*/main()int num,total;num=10

2、;total=num*PRICE;printf(total=%d,total);,3.2.2 变量(Variable),变量:在程序运行过程中,其值可以被改变的量。,说明:,1、在源程序中,变量用标识符表示(标识符只能由字母、数字、下划线组成,且第一个字符必须为字母或下划线)。在C语言中,大写字母和小写字母是两个不同的字符,一般变量名用小写字母表示。2、变量在内存中占据一定的存储单元。不同类型的变量,所占据的内存单元数不同。,3、变量名的类型表明存储单元的数量(例如,整型变量int,占2字节存储单元。单精度实数float占4字节);4、变量名是一个符号地址,可以用运算符&取得存储单元的地址。,

3、5、程序设计中变量的命名:,(1)必须满足C语言的语法规定。(以字母、下划线开始,只能由字母、数字、下划线构成)。(2)应该“见名知意”。(3)变量名的长度:C语言中未统一规定,随不同开发系统而变。Turbo C 2.0缺省允许的变量名长度为8。,例如:合法变量名:,sum averageclass daymonthStudent_name_abovelotus_1_2_3 basic,不合法的变量名:$123#33 3D64 ab,6、C语言对变量的要求:“先定义、后使用”,3.3 整型数据,3.3.1 整型常量C语言中数值常量的表达方式:,3.3.2 整型变量,一、整型变量的分类:,二、整

4、型数据在内存中以补码形式存放例如:int i;i=10;数据在内存中实际存放的情况如图所示:,i,若i=-10,i,ANSI标准定义的整数类型(方括号中的signed可省略),三、整型变量的定义,例如:int a,b;/*指定变量a、b为整型*/unsigned short c,d;/*指定变量c、d为无符号短整型*/long e,f;/*指定变量e、f为长整型*/程序在函数的开头部分定义变量。,例3.2,main()int a,b,c,d;/*指定变量a、b、c、d为整型*/unsigned u;/*指定变量u为无符号整型*/a=12;b=-24;u=10;c=a+u;d=b+u;print

5、f(a+u=%d,b+u=%dn,c,d);程序运行显示:a+u=22,b+u=-14,三、整型常量的类型,1、整型常量的值在-32768+32767范围内,编译器认为是int类型。2、整型常量的值超过上述范围,而在-2147483648+2147483647范围内,编译器认为是long类型。3、在整型常量的值后面加字母L(大写L或小写l),则告诉编译器,把该整型常量作为long类型处理。例:123L、0L。4、一个整型常量后面加一个字母u,认为是unsigned 型。如-12345u,则将其转换成补码53191,然后按无符号数存储。,例3.3,main()int a,b;a=32767;b=

6、a+1;printf(“%d,%d”,a,b);运行结果:32767,-32768出现问题的原因:溢出解决办法:将b定义为long int,即得结果32768,3.4 实型数据,实数(real number)又称为浮点数(float),有两种表达方式:1、十进制小数形式。由数字和小数点组成。(必须有小数点)如:0.123、.123、123.0、123.、0.02、指数形式。字母e(或E)之前必须有数字,且e后面的指数必须为整数。如123e3或123E3、123E-2规范化的指数形式:在字母e或E之前的小数部分中,小数点左边应有一位且只能有一位非零的数字。,3.4.2 实型变量,1、实型数据在内

7、存中的存放形式 实型数据在内存中占4个字节,按指数形式存储。如实数3.14159在内存中的存放形式:一般编译系统以24位表示小数部分(包括符号),8位表示指数部分。,2、实型变量的分类:,例:,float x,y;/*指定x、y为单精度实型变量*/double z;/*指定z为双精度实型变量*/long double t;/*指定t为长双精度实数*/实型常量不分float和double。一个实型常量可以赋给予一个float型、double型或long double变量。,3、实型数据的舍入误差,例如:Main()float a,b;a=123456.789e5;b=a+20;printf(“%

8、f”,b);结果:b 的结果和a相等。,3.5 字符型数据,3.5.1 字符常量用单引号(撇号)括起来的一个字符。如:a、x、D、?、$。注意,a和A是不同的字符常量。以开头的字符序列,称为“转义序列”,“”使其后面的字符变为另外的意义。见下表。,转义序列主要用来控制打印机和屏幕输出。例:printf(n sum is%dnn,sum);012代表换行0或000代表“空操作”字符。,例3.5,main()printf(“ab ct derftgn”);printf(“htibbj k”);打印机上程序运行结果:fab c gdeh jik,3.5.2 字符变量,char c1,c2;/*定义c

9、1、c2为字符变量*/c1=a;c2=b;字符变量在内存中占1字节。,3.5.3 字符数据在内存中的存储形式及其使用方法,字符在内存中以ASCII码存放。,例3.4,main()char c1,c2;c1=97;c2=98;printf(%c%c,c1,c2);该例的输出是:a b,字符以ASCII码存储,其存储方式与整数类似。从而,C语言允许字符和整数之间进行运算。,main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(%c%c,c1,c2);,3.5.4 字符串常量,字符常量:单引号括起来的一个字符。字符串常量:双引号括起来的字符序列(0N

10、个字符)。如:How do you do.,CHINA,a,$123.45字符串常量在内存中的存放:每一个字符均以其ASCII码存放,且最后添加一个“0”。,例:字符串常量“CHINA”存放在内存中的情况是:(6字节存储,不是5字节),因此,字符a和字符串a的区别是:字符a:1字节(a)字符串“a”:2字节(a和0),3.6 变量赋初值,在定义变量的同时指定其初值。例、int a=3;float f=3.56;char c=a;int a,b,c=5;/*指定c的初值为5,未指定ab的初值*/注意:多个变量指定相同的初值。int a=b=c=3;int a=3,b=3,c=3;,指定初值是在程

11、序运行时完成的(不是在编译时完成)。,3.7 各类数据混合运算,整型、实型(包括单、双精度)、字符型数据可以混合运算。例、10+a+1.5-8765.1234*b混合运算时,先转换成同一种类型,然后进行运算。转换规则如下:,例:,int数据可以转换为unsigned数据;float数据可以转换为double数据;int数据可以转换为double数据,(直接转换,不需先转换为unsigned,long,再转换为double)。,例:,int i;float f;double d;long e;10+a+i*f-d/e,3.8 算术运算符和算术表达式,3.8.1 C运算符简介,3.8.2 算术运算

12、符和算术表达式,一、基本的算术运算符,注:-5/3=-1(余-2)或-2(余+1),Turbo C 取-1结果(“向零取整”)。,二、算术表达式和运算符的优先级与结合性,算术表达式:用算术运算符和括号将运算对象连接起来式子。如:a*b/c-1.5+a优先级:先乘除、后加减;先括号。结合性:左结合。,例:a-b+c,由于算术运算符为左结合,故先执行a-b,再执行加c的运算。,赋值运算符=为右结合。,例:a=b+c由于赋值运算符=为右结合,先执行右边的b+c,再赋值给a。,三、强制类型转换,运算符两侧的数据类型不同时,先自动进行类型转换,再运算。程序员可以强制进行某种转换。强制类型转换的一般形式是

13、:(类型名)(表达式)例:(double)a;/*将a转换为double类型*/(int)(x+y);/*将x+y的值转换为int类型*/(float)(5%3);/*将5%3的值转换为float类型*/,区别:,四、自增、自减运算符 自增:使变量的值加1;自减:使变量的值减1。,例:,j=3;j=+i;/*先使i加1,再赋给j。执行后j=4,i=4*/j=3;j=i+;/*先把i赋给j,再使i加1。执行后:j=3,i=4*/,注意:(1)+和-只能用于变量,不能用于常量和表达式。例:5+;(a+b)+;#define ONE 1;ONE+;,(2)+和-的结合方向为“右结合”。例:,五、有关

14、表达式使用中的问题说明,1.在表达式中使用+或-,容易出错。,2.出现多个运算符时,编译器在处理时尽可能多的(从左到右)将若干个字符组合成一个运算符。例:,3.Turbo C中,调用函数时,实际参数的处理顺序是从右到左(称为C调用约定。)例:,3.9 赋值运算符和赋值表达式,一、赋值运算符:=作用:将一个表达式的值赋给变量。例a=3;/*常数3赋给变量a。常数是特殊的表达式*/a=b+c+1;,二、赋值时的类型转换,当赋值运算符两侧的类型不同,但都是数值型或字符型时,在赋值前进行类型转换。1、float、double int:舍弃小数(截断)。2、int float、double:值不变。3、

15、char(1字节)int(2字节),三、复合的赋值运算符,四、赋值表达式,一般形式:例:赋值表达式:a=5赋值语句:a=5;,赋值表达式中的“表达式”也可以是赋值表达式。,例:a=(b=5)/*b的值等于5,表达式b=5的值等于5,因此a的值等于5*/a=b=5/*与上述表达式的意义相同*/例:a=5+(c=6)/*c=6,a=11*/a=(b=4)+(c=6)/*c=6,b=4,a=10*/a=(b=10)/(c=2)/*c=2,b=10,a=5*/a+=a-=a*a/*先a=a-a*,再a=a+a*/,3.10 逗号运算符和逗号表达式,逗号运算符:,逗号表达式:用逗号运算符把两个表达式连接

16、起来的表达式。其一般形式为:表达式1,表达式2,例:,3+5,6+8/*是一个逗号表达式*/逗号表达式的值等于“表达式2”的值,但C语言中使用逗号表达式的一般目的是分别获得两个表达式的值,因此,逗号运算符又称为“顺序求值运算符”。逗号表达式可以扩展为更一般的形式:表达式1,表达式2,表达式3,.,表达式n,例、,a=3*5,a*4/*a的值为15,表达式的值为60*/(a=3*5,a*4),a+5/*表达式的值为20*/区别:(逗号运算符在所有运算符中优先级最低)x=(a=3,6*3)/*赋值表达式*/x=a=3,6*a/*逗号表达式*/区别:(逗号可以作运算符,也可以作分隔符)printf(

17、%d,%d,%d,a,b,c);/*逗号做分隔符*/printf(%d,%d,%d,(a,b,c),b,c);,本章要求,本章有关常量、变量、运算符、表达式的细节非常多,它们不是程序设计的最重要的内容,但细节错误也导致程序最终错误,因此,还是要引起注意。细节不能死记,要注意本质概念;对于无把握的细节,要在Turbo C中进行测试。,作业:,P66 3.3,3.6,3.8(上机练习)3.9,3.10,3.12(作业本上)上机要求:1、进一步熟悉Turbo C环境。2、测试教材中的例题和布置的作业。,补充练习:,1、下面四个选项中,均是非法常量的选项是:A)as-0fff 0 xaB)01 12.

18、456C)-0 x18 01177 0 xfD)0 xabc 0“a”,A,2、以下选项中合法的用户标识符是(),A)long B)_2Test C)3Dmax 4)A.dat3、以下选项中合法的实型常数是()A)5E2.0 B)E-3 C).2E0 D)1.3E4、已知大写字母A的ASCII码的码值是65,小写字母a的ASCII码值是97,则用八进制表示的字符常量101是()A)字符A 度 B)字符a C)字符e D)非法的字符常量,B,C,A,5、若a 是int 型变量,则表达式(a=4*5,a*2),a+6的值为()6、若a是int型变量,且a 的初值为6,则计算表达式后a 的值为()a+=a-=a*a 7、假设m是一个三位数,从左到右用a,b,c表示各位的数字,则从左到右各个数字是bac 的三位数的表达式是什么?,26,-60,m/10%10*100+m/100*10+m%10,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号