《d02C语言的基本数据类型与表达式.ppt》由会员分享,可在线阅读,更多相关《d02C语言的基本数据类型与表达式.ppt(38页珍藏版)》请在三一办公上搜索。
1、C语言的基本数据类型常量与变量运算符与表达式数据类型转换,C语言的基本数据类型与表达式,数据类型(Data Type),数据为什么要区分类型?不同类型的数据代表不同的数据表示形式合法的取值范围占用内存空间大小可参与的运算种类,数据类型(Data Type),基本数据类型,int整数,在目前绝大多数机器上占4个字节TC中是2个字节VC中是4个字节float单精度浮点数,一般是4个字节长double双精度浮点数,一般是8个字节长char字符,一般是1个字节长用来表示256个ASCII字符,或者0255的整数,基本数据类型,shortshort int,短整数,一般2个字节长,通常简写为short。
2、longlong int,长整数,一般是4个字节长。通常简写为long。long double,长双精度(高精度)浮点数,一般是10个字节。signed用来修饰char、int、short和long,说明他们是有符号的整数(正整数、0和负整数),通常情况下该修饰符缺省。unsigned用来修饰char、int、short和long,说明他们是无符号的整数(正整数和0)。,何谓类型溢出(Overflow),C语言直接提供的任何类型都有取值范围。当向其赋超过此范围的数值,就会产生数值溢出,得到一个不正确的结果。TC中int的范围是-3276832767如果超出取值范围,给它一个小于-32768或者
3、大于32767的数会如何呢?现场编程测验,小蛇能吞下大象吗?,typeoverflow.c,常量,是指在程序运行中,其数值不能被改变的量,整型常数,int型常量:18、-31(十进制)long int型常量:123456L、123456l、123L、123lunsigned int型常量:123u、123U八进制常量:以数字0开头的整数例如:012=1*81+2*80=10(十进制)十六进制形式:以0 x开头的整数例如:0 x12=1*161+2*160=18(十进制),实型常数,十进制小数形式:123.45、456.78指数形式:1e-2、4.5e3float型常量:123.45f、456.
4、78F、1e-2f、4.5e3Flong double型常量:123.45l、456.78L、4.5e3L缺省为double因为字母l和数字1容易混淆,所以当用l做后缀时,常使用大写形式,字符常数,字符常数的表示方法a,A,5,%,$单引号内只能有一个字符,除非用”开头就是一个普通整数,也可以参与各种数学运算每个字符具有一个0255之间的数值,可从ASCII表查出注意:5和5有本质的区别字符的数学运算在密码学内用得比较多用”开头的字符为转义字符例如:”n”,代表1个字符,其含义是换行,转义字符,一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示。,字符串String常数,用双引号括住的由
5、零个或多个字符组成的字符序列I am a string表示空字符串转义字符也可以在字符串中使用引号只作为字符串开始和结束的标志C语言内部用0表示字符串的结束除注释外,是唯一可以出现中文的地方x和x是不同的里定义了一系列专门的字符串处理函数,符号常量,含义:用标识符定义一个常量,也叫做宏常量,通常用大写字母表示。一旦某个标识符被定义成为一个常量后,以后在程序处理时,该标识符都代表对应的常量值。定义格式:#define 标识符 常量数据#define MAX 1000#define MIX 10#define PI 3.14,计算圆的周长和面积prg2-2.c,#include void main
6、()printf(“circumference=%fn”,2*3.14*3.5);printf(“area=%fn”,3.14*3.5*3.5);,计算圆的周长和面积prg2-2.c,#include#define PI 3.14#define R 3.5void main()printf(“circumference=%fn”,2*PI*R);printf(“area=%fn”,PI*R*R);,变量,是指以标识符为名字,其值可以改变的量定义形式:类型标识符 变量名1,变量名2,变量名3;类型标识符:如int、float、char等变量名:程序员自行确定,符合标识符命名规则即可,约定做到见名
7、知意习惯用下划线和大小写间隔的方式命名标识符user_name:Unix风格UserName:Windows风格变量定义是语句,分号一定不能缺少,变量定义,int a,b,c;int a;int b;int c;float m,n;char s,t;,在C语言程序中,变量必须“先定义,后使用”。变量定义主要是指出变量的名字,确定变量的数据类型。在同一个程序段中,变量不能被重复定义。,注意!,变量赋值,变量定义后只是按照类型分配了所需的存储空间,但是没有具体的值。变量初始化:第一次给变量赋值的过程,这个值称为变量的初值。先定义再赋值int a;a=2;定义的同时赋值int a=2;,变量赋值,i
8、nt a,b,c;a=b=c=3;可以等价为int a=b=c=3;变量初始化后可以再次赋值(即修改变量的值),但是一个变量任何时刻只能有一个值。int a=5;/变量a初始化赋值为5a=12;/变量a的值赋值为12,即发生修改,赋值操作是从右向左进行的变量定义的同时不能连续初始化,注意!,算术运算符,+、-、*、/、%(求余):双目运算符%运算左右两数必须为整型数据5%3=_,6.2%3=_两个整数相除,结果自动取整(向零取整)5/3=_参加运算的两个数中有一个为实数,结果为double型x为double型,y为int型,则x+y的类型的为_字符型数据可以和数值型数据混合运算6+A=_,*自
9、增、自减运算符,单目运算符,也叫做一元运算符使变量的值在当前基础上加1/减1i+/i-:先使用变量i的值,i值再加1/减1+i/-i:i值先加1/减1,再使用变量i的值,int x=3,m,n;m=x+;n=+x;执行后m、n、x的值各是多少?,(1)+i和i+,其本质都可以使i值加1,-同理。(2)+i和i+,求值和使用的先后顺序,-同理。,注意!,*自增、自减运算符,m=x+;,m=x;,x=x+1;,n=+x;,x=x+1;,n=x;,关系运算符,,=,=,=,!=大于,大于等于,小于,小于等于,等于,不等于关系运算符运算得到的结果为0和非00,表示假,即该关系不成立非0,表示真,即该关
10、系成立绝大多数编译器,关系运算得到的非0结果为1,但是不要利用这个1,逻辑运算符,逻辑运算也被称为布尔(Boolean)运算与运算&a&b,当且仅当两者都为真,则结果为真(a b&b c):a大于b并且b大于c或运算|a|b,只要两者中有一个为真,结果就为真(a b|b c):a大于b或者b大于c非运算!a,如果a是0,结果非0;如果a是非0,结果是0并不改变a的值,逻辑运算符prg2-3.c,#include void main()int a=10,b=20,c=30,d;d=+a=20|c+;printf(a=%d,b=%d,c=%d,d=%dn,a,b,c,d);,注意!,逻辑运算的短路
11、特性,实例,判断某一年year是否是闰年的条件是满足下列两个条件之一:能被4整除,但不能被100整除;能被400整除;请用C语言运算符和表达式正确描述上述闰年的条件。(year%4=0)&(year%100!=0)|(year%400=0),赋值运算符,赋值运算符=:将一个数据赋给一个变量赋值表达式:可以是常量、变量或者表达式int a,b=5,m=7,n=8;a=b;a=m+n;优先级:赋值运算符优先级低于算术运算符、关系运算符和逻辑运算符结合性:右结合性,复合赋值运算符,在赋值运算符“=”之前加上其他运算符,构成复合赋值运算符。复合赋值表达式,x+=5;x*=y+8;x%=3;x-=y;,
12、x=x+5;x=x*(y+8);x=x%3;x=x-y;,逗号运算符,一般形式:表达式1,表达式2求解过程先求解表达式1的值,再求解表达式2的值。整个逗号表达式的值是表达式2的值。扩展形式:表达式1,表达式2,表达式n,int x,y=5;x=(y=y+6,y=y/3);则x的值为_,(1)先计算y=y+6的值,y=5+6,y值为11。(2)再计算y=y/3的值,y=11/3,y值为3。所以变量x的值为3。,条件运算符,一般形式:?:运算顺序先求解表达式1的值。如果表达式1的值为真,则求解表达式2的值并把它作为整个表达式的值。如果表达式1的值为假,则求解表达式3的值并把它作为整个表达式的值。,
13、实例1,今天我要出门办事,因为需要外出一整天而这段时间又是多雨的季节,所以我要考虑是否需要携带雨伞。我的判断依据是出门时天阴带伞,反之不带伞。请用条件表达式描述上述判断原则。分析:外出时有两种选择带伞或不带伞,其判别依据为是否天阴。条件表达式描述如下:天阴?带伞:不带伞,实例2,已知符号函数映射关系如下:请用条件表达式给变量y赋值。y=(x=0)?(x 0)?1:0):-1,实例2,y=(x=0)?(x 0)?1:0):-1表达式2:(x 0)?1:0,表达式1,表达式2,表达式3,表达式1,表达式2,表达式3,求字节运算符,一般形式sizeof(变量名):返回变量的字节长度sizeof(类型
14、名):返回类型的字节长度求出的结果为变量或者类型占用的字节数。为什么要用sizeof获得类型或变量的字长?,求字节运算符prg2-4.c,#include void main()printf(Data type Number of bytesn);printf(-n);printf(char%dn,sizeof(char);printf(int%dn,sizeof(int);printf(short int%dn,sizeof(short);printf(long int%dn,sizeof(long);printf(float%dn,sizeof(float);printf(double%d
15、n,sizeof(double);,VC编译器,TC编译器,运算符的优先级,()-.!+-+-*&(类型)sizeof*/%+-=!=&|&|?:=+=-=*=/=%=&=|=,自动类型转换,同种数据类型的运算结果,还是该类型不同种数据类型的运算结果,是两种类型中取值范围更大的那种,强制类型转换prg2-5.c,将变量或表达式转换为指定类型(类型名)(变量或表达式),Prg2-5.c:编程计算3/6的值。#include void main()int x=3,y=6;float z;z=x/y;printf(z=%fn,z);,z=(float)(x)/y;z=x/(float)(y);z=(float)(x/y);,