C程序设计03数据类型、运算符与表达式.ppt

上传人:牧羊曲112 文档编号:5426148 上传时间:2023-07-05 格式:PPT 页数:76 大小:327.99KB
返回 下载 相关 举报
C程序设计03数据类型、运算符与表达式.ppt_第1页
第1页 / 共76页
C程序设计03数据类型、运算符与表达式.ppt_第2页
第2页 / 共76页
C程序设计03数据类型、运算符与表达式.ppt_第3页
第3页 / 共76页
C程序设计03数据类型、运算符与表达式.ppt_第4页
第4页 / 共76页
C程序设计03数据类型、运算符与表达式.ppt_第5页
第5页 / 共76页
点击查看更多>>
资源描述

《C程序设计03数据类型、运算符与表达式.ppt》由会员分享,可在线阅读,更多相关《C程序设计03数据类型、运算符与表达式.ppt(76页珍藏版)》请在三一办公上搜索。

1、C语言程序设计,CS Dept.,WUSE,第三章 数据类型、运算符与表达式,3.1 数据类型,著名计算机科学家沃思提出:程序数据结构算法,所以,存放数据的方式直接反映了一种语言的数据表达能力。数据的存储方式又称之为:数据类型。,举 一个例子:以考生各科成绩及总分排队问题为例。成绩的存放 以数组形式 排队方法 算法,前面已述.C数据类型丰富,分为:,基本类型,构造类型,指针类型,空类型,整型,字符型,实型,单精度,双精度,数组,结构体,共用体,数据有常量、变量之分,均为其中一种类型。,本章先学习基本类型。,枚举,3.2 常量与变量,3.2.1 常量和符号常量,常量 程序运行过程中不能被改变的量

2、。,一般的数据显式写法均表示常量。如程序中:20 整型常量 15.8 实型常量 a 字符常量,例:#define PRICE 30 main()int num,total;num=10;total=num*PRICE;printf(total=%d,total);,还可用一个符号表示一个常量 符号常量,符号常量(一般用大写,以区分变量),再如:=3.1415629#define PAI 3.1415629,#define PRICE 30,变量,程序执行中可以改变的量称为变量。变量包括变量名和变量值。,变量名 用标识符命名,对应一定数量的内存存贮单元,其单元数视变量类型而定。,标识符 由字母、

3、数字、下划线组成且由字母或下划线开头的字符串。,标识符可用来命名变量及作为常量名、函数名、类型名、文件名等,一个程序内不得有重复名。如:_sum,sum,student_name,price等,习惯上,变量名、函数名等用小写字母表示。常量名用大写字母表示(以增加可读性)。,另:需注意标识符长度,视不同系统而定。设允许8个字符。则:student_ name student_ number为同一名字。,C语言中,变量须先定义,后使用 如:int student student=30;则若写成student=30,则未定义,编译时指出其错。,一旦变量被定义,即可在编译时为其分配相应数量的单元。,一

4、旦变量被定义,其类型便确定。则可检查其运算的合法性。,如:a%b 表示a整除以b的余,则a,b必须为整型量。,3.3整型数据,3.3.1 整型常量,整型常量 整型常数,C语言提供了三种形式 十进制 如:256,308,120等,八进制 以数字0开头表示的整数 例:0235,0146 012等.0235=28238515710 014618248610210 012(182)1010,十六进制 以0 x开头的整型数 如:0 x16,0 x28,3.3.2 整型变量,一、分类:分为四种:基本型、短整型、长整型、无符号型,1.基本型:用int定义,2.短整型:用short int或 short定义,

5、3.长整型:用long 或 long int 定义,4.无符号型:不存放符号,则不带符号数.,又分无符号整型,无符号短整型,无符号长整型。,上述各种类型所占内存单元数及取值范围视不同机器而不同。详见P13。,二、定义方法 整型变量分别以下列方式定义,1.基本整型:int a,b,c;,2.短整型 short int 或 short a,b,c;,3.长整型 long int 或 long a,b,c;,4.无符号型 unsigned a,b,c;unsigned short a,b,c;unsigned long a,b,c;,例:main()int a,b,c,d;/*指定a,b,c,d为整

6、型变量*/unsignd u;/*指定u为无符号整型变量*/a=12;b=24;u=10;,c=a+u;d=b+u;printf(a+u=%d,b+u=%dn,c,d);,由此看到:不同类型的整型数据可进行算术运算。但有一定规则,见2.7.,运行结果为 a+u=22,b+u=14,三、关于整型常量 程序中出现的整型常数,系统按以下规则分配变量(内存单元)或赋值给相应变量,1.当常数(量)在 3276832767之间,则可赋给int,long int 变量。,2.若超越,而在21474836482147483647之间,则可赋给 long int 变量。,3.若int,short int 长度相

7、同,则二者皆可赋值。,4.一个非负整数32768 则可赋给 unsigned int。,5.一个常数后加 l,或L,表示长整数.如123l.主要用于函数调用时形、实参数传递。,3.4 实型数据,3.4.1 实型常量,有二种表示形式 1.十进制形式 如:0.126,523.64等,2.指数形式 对于较大或较小的数,可用指数形式 0.0000126 1.26E 5 1260000 1.26E+6 或1.26E6 E,e 均可.,分为单精度型与双精度型.分别为 float x,y,z;(单精度)double a,b,c;(双精度),一般地:单精度占4字节内存单元;双精度占8字节内存单元.,3.4.2

8、 实型变量,注意:不同机器对实型变量的有效数字长度的限制 如:pc机,单精度一般为7位,双精度15位,单精度数值:10381038双精度数值:1030810308,于是:float a;a=123456.789 则实际赋值a123456.7,3.5 字符型数据,用一对单引号括起来的单个字符。如 a,A,二者不一样.,此外,以 开头后接一个字符或n个字符代表了一种特殊字符常量。转义字符。如 n 换行,r 回车,3.5.1 字符常量,其它如下表:,字符形式,n,t,v,b,r,f,ddd,xxh,功能,换行,横向跳格(即跳到下一个输出区),竖向跳格,退格,回车,走纸换页,反斜杠字符“”,单引号(撇

9、号)字符,1到3位8进制数所代表的字符,1到2位16进制数所代表的字符,注意:表示ASCII码字符,三位八进制,如 101 表示字母A,又:x 十六进制ASCII 字符 x 41 表示字母A,其定义方式为:char c1,c2;c1=A;c2=B;字符变量只占一个字节单元。,3.5.2 字符变量,用来存放一个字符的变量.,一个字符存入一个字符变量。其对应单元存放的是其ASCII码,即ASCII码的二进制形式。,由此:字符变量中的数据是一整型数据。输出时既可输出字符,亦可输出整数,且字符变量可作整数运算。,3.5.3 字符数据的实际存放形式,例1:main()char c1,c2;c1=97;c

10、2=98;printf(%c%c,c1,c2),运行结果 a b,看如下几个例子:,例2:main()char c1,c2;c1=a;c2=b;c1=c1 32;c2=c2 32;printf(%c%c,c1,c2),运行结果 A B,例3:main()int i;char c;i=a;c=97;printf(%c,%d n,c,c);printf(%c,%d n,i,i);,运行结果:a,97 a,97,有的系统将一个字节的整型变量的最高位,作为符号。这时对0127之间的字符可输出正整数(ASCII)。但128255字符最高位为1,则作为负数输出。,由此最好用unsigned int 存放字

11、符整数(ASCII)。,注:,用双引号括起来的字符串。例:Good Morning!注意A 与A是不同,字符串存放时,在最后加上“0 空字符。于是:,Good Morning!0,3.5.4 字符串常量,A,A/0,但A,A,注意:1.字符串长度=实际字符个数+1,但最后0不输出.printf(Good Morning!),此处不写 0。自动加上。,2.单个字符的字符串不能赋给字符变量。例:char c;c=a;是错误的。,3.6 变量赋初值,C语言允许定义变量时赋予初值。如:int i=6;float x=8.35;char c=6;,*也可对某个变量赋初值:int a,b,c=6;,*不可

12、能将同初值的变量赋初值时写成:int a=b=c=6;只能:int a=6,b=6,c=6;,定义变量时赋初值实际上是在运行时执行一个赋初值语句:int a=6;相当于:int a;a=6;,3.7 类数值型数据间的 混合运算,C语言允许双精度、单精度、整型及字符数据之间混合运算 10+a+1.58765.1234 b是允许的。,但有一个规则:先转换成同一类型,再计算。,double float,高低,图中“”表示必定转换。如a+b,先转换为int。结果为 int。,转换方法:,long,unsigned,int char,short,即:既使是同一种类型也按 转换。,图中“”:表示低,高型数

13、据运算时,均先转换为高型。,例:10+a+if d/e,其中:i int f float d double e long,10+a:转为int,结果为int,if:转为double,结果为double,+:转为double,d/e:转为double,转为double,则运算时:,3.8 算术运算符与 算术表达式,运算符:运算的符号表示。C语言有丰富的运算功能,先简述之,3.8.1.C运算符,1.算术运算符+,/,%,等,3.逻辑运算符!,&,2.关系运算符,=,=,!=,4.位运算符,&.,5.赋值运算符=及其扩展运算符,6.条件运算符?:,7.逗号运算符,8.指针运算符*,&,11.分量运算

14、符,12.下标运算符,13.其它运算符 如函数的调用(),9.求字节数运算符 sizeof,10.强制类型转换运算符(类型),3.8.2 算术运算符和算术表达式,一、基本算术运算符,+加法 正值 3+6,+3,减法 负值 6 4,5,乘法 38,/除法 8/5,%求余 7%4 的值为3,注:两个整型数据相除(结果为整,一般向零靠拢)。5/3 1,“/”中,有一个 float,则结果为double型,使用时千万注意 int/int 出现数据丢失。,二、算术表达式及算术运算符的优先级与结合性,运算对象:常量、变量、函数等,优先级:(),/,%,+,算术表达式:用算术运行运算符和括号将运算对象连接起

15、来,且符合C语法规则的式子。,结合性:同一优先级,自左向右,为左结合性,反之为右结合性。,例:a b/c 1.5+ad e,当类型不同的数据进行运算时,按2.7介绍的类型转换。,三、可利用强制类型转换运算符将一个算术表达式转换为所需类型,形式:(类型名)(表达式),例如:(double)a 将a转换为double,(int)(x+y)将x+y转换为int,(float)(5%3)将5%3转换为float,注:(int)x括号不能省略。如:intx 会理解为变量intx.,又如:(int)(x+y)若省略括号:(int)x+y会变成将x转成整型.,2.转换后的类型数据由系统分配一个中间变量存放,

16、而原变量类型不变。float x;,(int)x;则x本身仍为实型,而(int)x由一个中间变量(整)存放x的整数部分。,例:main()float x;int i;x=3.6;i=(int)x;printf(x=%f,i=%d,x,i);,则:x=3.600000,i=3.,总结以上类型转换,有二种:1.强制,另:强制类型转换运算优先于算术运算符.,2.系统自动,如:若x为float,则x%3不合法。但可用(int)x%3来解决。(附录III介绍了优先级),四、自增,自减运算符,设有int i=3;,+自增1,自减1,则:+i,i+都会使i变为4,但有区别:,+i:先使i值+1,再使用i值;

17、,i+:先使用i值,再使i值+1.,j=+i;j=4,i=4.(i=i+1;j=i;),j=i+;j=3,i=4.(j=i;i=i+1),同理:i,i,均使i值1,但:,又如:printf(i=%dn,i+);,若:printf(i=%dn,+i);,i:先使i值1,再使用i值;,i:先使用i值,再使i值1,i=3;,结果:i=3,结果:i=4,1.+和 运算法只能用于变量,不得用于常量和表达式.,如 5+,(a+b)+均为不合法.,几点注意:,2.+,的结合性为从右至左,而一般算术运算符为从左至右。如:,i+和+为同一优先级.,i+相当于(i+),若 i=3,则结果为3,i为4.+,主要用于

18、循环变量自增或自减。,1.要慎用+、运算符。,五、有关表达式使用中的问题说明,如:表达式(i+)+(i+)+(i+)(i=3)一般认为:从左至右:3+4+5=12,i6.,但Turbo C.MSC 都是先取三个原值,则:先对i进行3次自加,为6,然后三个i相加为18,而i为6。,相加:i+i+i=9 i6,如果表达式数为:k=(+i)+(+i)+(+i),2.在表达式中,有的运算符为一个字符,有的为两个字符。,一般地:自左至右尽可能多地将若干字符组成一个运算符。,例:i+j,究竟理解为(i+)+j还是i+(+j)?,3.在函数调用时,如:,printf(%d,%d,i,i+);,若i=3,若参

19、数计算从左至右,则输出 3,3,若从右至左,则输出4,3,上述问题看似复杂,最好上机实践.,3.9 赋值运算符和 赋值表达式,符号=为赋值运算符。,2.整型数据赋给实型变量,数值不变,但按实数形式存放.,1.将实型数据(无论单,双精度)赋给整型变量时,舍弃小数.,赋值时,两边类型若不一致,则按以下规则转换:,4.将intlong int,进行符号扩展。即:符号扩展,低16位long 的低16位。,5.long int int 则高16位截断。,3.字符型数据赋给整型变量时:,(2)字符带符号整型变量,则字符高位扩展。,(1)字符无符号整型变量,则存入低8位,高8位补零。,6.将unsigned

20、 int 型long int高位补0。,而位数相同部分赋值 unsigned int int unsigned long long unsigned short short,原值传送,但数据大小不能超值。如:unsigned int a=65535;int b;b=a;则越界。,7.非unsigned 型长度相同的unsigned型数据,原样传送(包括符号位),一、复合赋值运算符:在 号之前加一个其它运算符。,C语言规定:凡是二目运算符均可构成复合运算符。,例:a+=3;相当于 a=a+3 x=y+8;相当于 x=x(y+8)x%=3;相当于x=x%,一般形式:,二、赋值表达式,例:x=10

21、为一赋值表达式 其中又可以是一个赋值表达式。,例:x=(y=10)相当于 y=10;x=y 由于赋值号为右结合性,于是()可省略,即为:x=y=10;,例:a+=a=aa(设a12),又:a=5+(c=6)c=6,a=11 a=(b=4)+(c=6)b=4,c=6,a=10 a=(b=10)/(c=2)b=10,c=2,a=5,进一步,还可用复合赋值运算符作下列运算:,步骤:aa144.a=a a a=a a a=12 144=132 a+=132 a=a+(132)=264,3.10 逗号运算符和逗号表达式,一般形式:表达式1,表达式2,其计算规则:先计算表达式1,再计算表达式2,最后值为表达式2的值。,例:a=35,a 4,则:先计算3 5,a15,a 4=60,结果为60。,又如:(a=35,a 4),a+5,扩展形式:表达式1,表达2,表达式n,结果为20(作为逗号表达式的值),a+5a 即 20a.,3 5=15a,a 4=60(此时a值仍未变),结果为表达式n的值,注意:x=(a=3,63)赋值表达式,x18;,x=a=3,6 a 逗号表达式,x3.,逗号表达式主要用于某些语句中需一次计算多个表达式值的情况。如在循环语句中。,函数调用中的实参之间虽然用的是逗号间隔,但不是逗号表达式。如:printf(%d,%d,%d,a,b,c);,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号