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