第3章基本数据类型与数据运算.ppt

上传人:sccc 文档编号:5635072 上传时间:2023-08-04 格式:PPT 页数:61 大小:1.41MB
返回 下载 相关 举报
第3章基本数据类型与数据运算.ppt_第1页
第1页 / 共61页
第3章基本数据类型与数据运算.ppt_第2页
第2页 / 共61页
第3章基本数据类型与数据运算.ppt_第3页
第3页 / 共61页
第3章基本数据类型与数据运算.ppt_第4页
第4页 / 共61页
第3章基本数据类型与数据运算.ppt_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《第3章基本数据类型与数据运算.ppt》由会员分享,可在线阅读,更多相关《第3章基本数据类型与数据运算.ppt(61页珍藏版)》请在三一办公上搜索。

1、程序设计基础,基于C语言,管科系:周长红,第3章 基本数据类型与数据运算,第3章 基本数据类型与数据运算,3.1 基本标识符,#define PI 3.14159#include/编译预处理文件包含#include void main()float r,s;r=1.0;s=PI*pow(r,2);/计算圆面积s printf(半径R=%f时,面积S=%fn,r,s);,常量名。,预处理命令名。,数据类型名。,变量名。,函数名。,标识符,在一个C程序中,每个标识符必须是唯一的,即不能出现同一标识符代表两个实体的情况。,3.1 基本标识符,3.1 基本标识符,3.1 基本标识符,由程序员在程序中定

2、义的合法标识符。,3.1 基本标识符,判断下面的标识符是否是合法的自定义标识符。,Intinta-ba_bx1 x2my.age9City-abc 变量1god(x)StuAge,自定义标识符要尽量做到“见名知意”。应采用英文单词。而且避免使用易混淆字符。如0与O。通常符号常量名全部采用大写字母,如PI;而其它变量名、函数名等通常采用小写。,构造类型,基本类型,3.2 数据类型,为什么要有数据类型?,123,12365537,3.1415925,1.414,78,a,n,“Good Morning”,9,23.410-3,1,2,3,4,5,整数,Monday,Tuesday,Thursday

3、,“Tom”,21,”Software 2008-2”,”Shandong Qingdao”,实数,字符,1.符合我们认识事物的习惯。,3.2 数据类型,为什么要有数据类型?,2.规定每个数据占用内存大小。,每个内存单元只有1B。存储一个字符,使用ASCII码,需要_个字节。存储整数123,需要_个字节。存储整数32768,如果是无符号数,需要_个字节,如果是有符号数,需要_个字节。存储IEEE 32位格式的实数,需要_个字节,而64位格式的实数,需要_个字节。,1,1,2,3,4,8,问题:变量如何确定占用多少个字节?,3.2 数据类型,为什么要有数据类型?,3.规定数据可以参与的运算。,一

4、个整数和实数可以进行算术运算、比较运算;一个字符可以进行比较运算;一个字符串可以进行比较运算,但是不能进行算术运算;一个不知道什么类型的变量是无法得知可以参与什么运算的。,3.2 数据类型,C语言的数据类型,短整型、基本整型、长整型,单精度数、双精度数,3.2 数据类型,表3.1 ANSI C标准中的数据类型,类型,符号,关键字,数的表示范围,所占位数,整型,字符型,实型,有,无,有,有,说明:数据类型所占字节数随机器硬件不同而不同。,/*可以用sizeof()来求一个变量或者数据类型占用的字节数*/#include void main()printf(size of short is%d.n

5、,sizeof(short);printf(size of int is%d.n,sizeof(int);printf(size of long is%d.n,sizeof(long);printf(size of char is%d.n,sizeof(char);printf(size of float is%d.n,sizeof(float);printf(size of double is%d.n,sizeof(double);,运行结果:size of short is 2.size of int is 4.size of long is 4.size of char is 1.siz

6、e of float is 4.size of double is 8.,3.3 常量与变量,/*给定半径,求圆的面积*/#define PI 3.14159#include/编译预处理文件包含#include void main()float r,s;r=1.0;s=PI*pow(r,2);/计算圆面积s printf(半径R=%f时,面积S=%fn,r,s);,常量,常量是指那些在程序执行过程中其值保持不变的量。,常量,常量通常用于定义具有如下特点的数据:1.在程序中保持不变的量:如圆周率、自然对数之底等;2.在程序内部频繁使用的量。3.需要用比较简单的方式替代的某些值。,3.3 常量与变

7、量,常量,3.3 常量与变量,常量,分类符号常量:用标识符代表常量,定义格式:#define 符号常量 常量举例:#define TRUE 1#define FALSE 0#define STAR*#define MY_NAME“Zhou”注意:符号常量的标识符也必须是合法的,而且一般采用全部大写字母表示。,/*给定半径,求圆的面积*/#define PI 3.14159#include#include void main()float r,s;r=1.0;s=PI*pow(r,2);/计算圆面积s printf(半径R=%f时,面积S=%fn,r,s);,3.3 常量与变量,常量,分类符号常

8、量:用标识符代表常量直接常量:直接使用数值表示的常量。,整型常量实型常量字符常量字符串常量,3.3 常量与变量,常量,整型常量(整常数)三种形式:十进制整数:由数字09和正负号表示。如 123,-456,0八进制整数:由数字0开头,后跟数字07表示。如0123,011十六进制整数:由0 x开头,后跟09,af,AF表示。如0 x123,0Xff,整型常量的类型根据其值所在范围确定其数据类型。默认是有符号数。在整常量后加字母l或L,认为它是long int 型常量在整常数后加字母u或U,则理解为无符号数。,问题:0123=()100 x123=()100Xff=()10,例 30000 为int

9、型 32768 为long int型 65536 为long int 型,83,291,255,例 12 与 12L,-1 与-1U,#define PRICE 30#include void main()int num,total;int i,j;num=10;total=num*PRICE;printf(total=%d,%x,%on,total,total,total);i=-1;j=-1L;printf(%d,%un,i,j);printf(%d,%d,i,j);,运行结果:total=300,12c,454-1,4294967295-1,-1,3.3 常量与变量,常量,实型常量(实数

10、或浮点数)表示形式:十进制数形式:(必须有小数点)如0.123,.123,123.0,0.0,123.指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3,123E2,1.23e4,e-5,1.2E-3.5,实型常量的类型默认double型在实型常量后加字母f或F,认为它是float 型,3.3 常量与变量,常量,转义字符:反斜线后跟一个字符或ASCII码值表示。字符常量定义:用单引号括起来的单个普通字符或转义字符。字符常量的值:ASCII码值。可见:一个字符相当于一个有符号整数,因此在程序中,字符常量可以参与算术运算,其值为所表示字符的ASCII码值。,如 a A?n 101,A

11、101 x41 65,#include void main()printf(101 x42 Cn);printf(I say:How are you?n);printf(C Programn);printf(Turbo Cn);printf(“%c,%cn”,A,A+32);,运行结果:A B CI say:”How are you?”C ProgramTurbo CA,a,3.3 常量与变量,常量,字符串常量定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个 0 作为字符串结束标志。字符常量与字符串常量不同。,例:char ch;ch=“A”;,#include void m

12、ain()char c1=a,c2;C2=98;printf(“%d,%dn”,c1,c2);,结果:97,98,#include void main()char c1=“a”,c2;c2=98;printf(“%d,%dn”,c1,c2);,结果:56,98若让c1分别等于“U”、“ABC”、“A”结果不变,3.3 常量与变量,常量,分类符号常量:用标识符代表常量直接常量:直接使用数值表示的常量。,整型常量实型常量字符常量字符串常量枚举常量(见10.4),3.3 常量与变量,/*给定半径,求圆的面积*/#define PI 3.14159#include/编译预处理文件包含#include

13、void main()float r,s;scanf(“%f”,变量,变量是指那些在程序执行过程中其值可以改变的量。,变量,3.3 常量与变量,变量,变量名与变量值,#define PI 3.14159#include#include void main()float r,s;scanf(“%f”,r,s,1.0半径R=1.000000时,面积S=3.141590,1.0,3.14159,变量名:实质上代表的是变量在内存中的地址,即相当于给这个地址起了个名字。变量值:存放在内存中的值。,3.3 常量与变量,变量,变量定义变量定义的一般格式:数据类型 变量1,变量2,变量n;,已有的合法类型,合

14、法标识符,例:int a,b,c;float data;,变量初始化:定义时赋初值。,变量定义的位置:一般放在函数开头。,变量的使用:先定义,后使用。,例1 int student;stadent=19;/Undefined symbol statent in function main,例2 float a,b,c;c=a%b;/Illegal use of floating point in function main,例:int a=2,b,c=4;float data=3.67;char ch=A;int x=1,y=1,z=1;int x=y=z=1;错误,在编译后/运行时,对变量操

15、作前,它(们)的初始数值是随机的;因此程序员一定要在访问前对变量进行初始化。,说明:在C语言中,变量必须强制定义,其目的:1、凡未被事先定义的,不作为变量名。2、每一个变量被指定为一确定的类型,在编译时就能为其分配相应的存储单元。3、指定每一个变量为一确定的类型,在编译时据此检查该变量所进行的运算是否合法。例如:如果变量 a,b 是整型类型,则可以进行求余运算:a%b 而两个实数类型的变量求余是不允许的。,3.3 常量与变量,变量,整型变量占字节数随机器不同而不同,一般占一个机器字shortintlong可用sizeof(类型标识符)测量,实型变量float:占4字节,提供7位有效数字doub

16、le:占8字节,提供1516位有效数字,字符型变量字符变量存放字符ASCII码,在内存中占一个字节char与int数据间可进行算术运算,例 float a;a=111111.111;/*a=111111.1*/double b;b=111111.111;/*b=111111.111*/,例 a=D;/*a=68;*/x=A+5;/*x=65+5;*/s=!+G/*s=33+71;*/,特别注意:没有字符串变量,用字符数组存放,C,3.3 常量与变量,变量,整型数据在内存中的存放形式int i;/*定义i为整型变量*/i=10;/*给i赋以整数10*/i:i:数值10的补码表示:-10的原码:取

17、反:加得10的补码:,10,整型变量,ANSI C标准中基本整型变量在内存中占2个字节,补码,3.3 常量与变量,变量,整型变量的分类,1、基本型,以int表示。2、短整型,以 short int 表示,或以 short表示。3、长整型,以 long int 表示,或以 long 表示。4、无符号型;其中无符号型又分为无符号整型,无符号短整型和无符号长整型,分别以unsigned int,unsigned short 和 unsigned long表示 如果不指定unsigned或指定signed,则存储单元中最高位代表符号(0为正,1为负)。如果指定unsigned,存储单元全部二进制位用作

18、存放数本身,而不包括符号。无符号变量只能存放不带符号整数C语言标准没有具体规定以上各类数据所占内存字节数,各种机器处理上有所不同,一般以一个机器字存放一个int型数据,而long型数据的字节数应不小于int 型,short型不大于int 型,具体可以用sizeof来求知。,3.3 常量与变量,变量,C,说明:无符号型变量只能存放不带符号的整数,如123,4678等,而不能存放负数,如-123,-3。一个无符号整型变量中可以存放的正数的范围比一般整型变量中正数的范围扩大一倍。,3.3 常量与变量,变量,例:#include void main()int a,b;/若sizeof(int)=2 a

19、=32767;b=a+1;printf(%d,%d,a,b);,整型数据的溢出,运行结果:32767,32768,?循环记数,3.3 常量与变量,变量,实型变量,3.3 常量与变量,变量,实型变量的定义 float x,y;double z;long double temp;实型数据的舍入误差 有效位以外的数字将被舍去,3.3 常量与变量,变量,说明:C编译系统将实型常量作为双精度(占64位)来处理,若在数的后面加字母f或F,这样编译系统就会按单精度(32位)处理。一个实型常量可以赋给一个float型、double型或long double型变量。根据变量的类型截取实型常量中相应的有效位数字。

20、如:float a;a=111111.111;由于float型变量只能接收7位有效数字,因此最后两位小数不起作用。如果a改为double型,则能全部接收上述9位有效数字并存储在变量a中。,3.3 常量与变量,变量,例:#include void main()float a,b;a=123456.789e5;b=a+20;printf(na=%fnb=%fn,a,b);,运行结果:a=12345678848.000000 b=12345678848.000000,结论:应当避免一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数。,3.3 常量与变量,变量,字符型变量用来存放字符常量

21、,但只能存放一个字符。所有编译系统都规定一个字节来存放一个字符。,字符型变量,3.3 常量与变量,变量,字符变量的定义形式 char c1,c2;字符变量的赋值 c1=a;c2=1;c3=b;c4=2;,字符数据在内存中的存储形式及使用方法 字符常量放到字符变量中是将该字符的相应ASCII代码放到存贮单元中。,97,49,98,50,01100001,00110001,01100010,00110010,字符数据以ASCII码存储就与整数存储形式类似,因此C语言使字符型数据和整型数据之间可以通用,变量,3.3 常量与变量,c1 c2 c3 c4,例:向字符变量赋以整数#include void

22、 main()97的存储如下:char c1,c2;c1=97,c2=98;printf(%c,%cn,c1,c2);printf(%d,%dn,c1,c2);,01100001,思考:如果上述程序改为int c1,c2,其余不变,会有什么区别?,运行结果:a,b 97,98,变量,3.3 常量与变量,3.3 常量与变量,变量,#define PRICE 12.5void main()int num=3;float total;char ch1,ch2=D;total=num*PRICE;ch1=ch2-A+a;printf(“total=%f,ch1=%cn”,total,ch1);,运行结

23、果:total=37.500000,ch1=d,特别说明:在C语言中没有专门的字符串变量,如果想将一个字符串存放在变量中,以便保存,必须使用字符数组,即用一个字符型数组来存放一个字符串,数组中的每一个元素存放一个字符。,3.3 常量与变量,变量,3.4 基本数据类型的转换,自动类型转换,又称为隐式转换什么情况下发生运算转换不同类型数据混合运算时赋值转换把一个值赋给与其类型不同的变量时输出转换输出时转换成指定的输出格式函数调用转换实参与形参类型不一致时转换运算转换规则:不同类型数据运算时先自动转换成同一类型,自动类型转换,3.4 基本数据类型的转换,自动类型转换,int i;float f;do

24、uble d;long c;,double,double,double,double,double,double,double,int,int,3.4 基本数据类型的转换,强制类型转换,强制类型转换,又称为显式转换格式:(类型名)(表达式)举例:(int)(x+y)(int)x+y(double)(3/2)(int)3.6,区别是什么?,#include void main()float x;int i;x=3.6;i=(int)x;printf(x=%f,i=%d,x,i);,运行结果:x=3.600000,i=3,编译结果:warning C4305:=:truncation from c

25、onst double to float,精度损失问题,不论是隐式转换还是显式转换,都是临时性的,并不改变表达式的原有类型。如j=(int)i;只是将i变为整数后赋值给j,但是i的数据类型在执行后依然是原来的类型。,3.4 基本数据类型的转换,强制类型转换,/一个有意思的例子#include void main(void)signed short positive=32767;signed short negative=-32768;printf(%dn,positive+1);printf(%d,negative-1);,运行结果:32768-32769,提示:1.signed short的

26、范围-3276832767。2.常数1是int型的。,/一个有意思的例子#include void main(void)short positive=32767;short negative=-32768;short a=1;printf(%dn,positive+a);printf(%dn,negative-a);,运行结果:32768-32769,/一个有意思的例子#include void main(void)short positive=32767;short negative=-32768;short a,b;a=positive+1;b=negative-1;printf(%dn,

27、a);printf(%dn,b);,运行结果:-3276832767,3.5 运算符和表达式,算术运算符:+、-、*、/、%、+、-,关系运算符:、=、!=、=,赋值运算符:=、+=、-=、*=、/=,逻辑运算符:!、&、|,位操作运算符:、&、|、,条件运算符:?:,逗号运算符:,,求字节数运算符:sizeof,C语言的运算符,学习运算符应注意:运算符功能与运算量关系要求运算量个数要求运算量类型运算符优先级别:运算符的执行顺序。结合方向:相同优先级的多个运算符的运算顺序。结果的类型,常数,变量,函数,3.5 运算符和表达式,把自然语言描述问题的方式转换为C语言的形式表达给计算机,规则,在C语

28、言中,一个表达式也是有值的。,双目算术运算符+-*/%结合方向:从左向右。优先级:*、/、%+、-说明:对于除法运算,当两个操作数都是整数时,做整除运算。取余运算的两个操作数,必须都是整数。而且结果的符号与被除数的符号相同。在C的表达式中,*是不能省略的。如:2a应表示为2*a。,算术运算符,3.5 运算符和表达式,5/2=2-5/2.0=-2.5,5%2=1-5%2=-11%10=15%1=05.5%2(),自增、自减运算符+-作用:使变量值加1或减1种类:前置+i,-i(先执行i+1或i-1,再使用i值)后置 i+,i-(先使用i值,再执行i+1或i-1),单目算术运算符+-结合方向:从右

29、向左。优先级:-、-、+*、/+、-说明:“-”有两个作用:求负、减法。两者的结合性和优先级不同。自增、自减运算符的前缀和后缀使用方法的作用不同。前缀使用时,先执行运算,再使用变量的值;而后缀使用时则恰好相反。自增和自减运算符只能用于单个变量,不能用于常量和表达式。,算术运算符,3.5 运算符和表达式,j=3;k=+j;j=3;k=j+;j=3;printf(“%d”,+j);j=3;printf(“%d”,j+);a=3;b=5;c=(+a)*b;a=3;b=5;c=(a+)*b;,i=3;printf(“%d”,-i+);printf(“%d”,-+i);,赋值运算符,3.5 运算符和表达

30、式,简单赋值运算符格式:=功能:将表达式的值赋给变量名。注意:与数学中使用的等号的区别。举例:a=3;d=func();c=d+2;复合赋值运算符种类:+=、-=、*=、/=、%=、=、&=、=、|=格式:=功能:等价于=(),赋值运算符,3.5 运算符和表达式,赋值运算符结合方向:自右向左运算符左侧必须是一个变量,不能是常量或者表达式。赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型。赋值表达式的值与变量值相等,且可嵌套。,3=x-2*y;a+b=3;,int i;i=2.56;/结果i=2;,float f;int i;i=10;f=i;/f=10.000000,例:a=b=c

31、=5 a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2),/表达式值为5,a,b,c值为5,/b=5;a=5,/表达式值11,c=6,a=11,/表达式值10,a=10,b=4,c=6,/表达式值5,a=5,b=10,c=2,例:a=12;a+=a-=a*a,例:int a=2;a%=4-1;a+=a*=a-=a*=3;,/a=-264 等价于a=a+(a=a-(a*a),/a=0 等价于a=a+(a=a*(a=a-(a=a*3),注意:C语言的很多语法非常灵活,但是编程时一定要注意提高可读性,所以这里给出的两个例子在实际编程时不提倡使用。比如:i=3;j=

32、(i+)+(i+)+(i+),关系运算符,3.5 运算符和表达式,关系运算符种类:=!=结合方向:自左向右关系表达式的值:是逻辑值“真”或“假”,用1和0表示,ca+b/c(a+b)ab!=c/(ab)!=ca=bc/a=(bc),int a=3,b=2,c=1,d,f;ab(ab)=cb+cbf=abc,/表达式值1,/表达式值1,/表达式值0,/d=1,/f=0,关系运算符,3.5 运算符和表达式,需注意问题做区间判断时,不可连续使用比较运算。应避免对实数作相等或不等的判断注意区分“=”和“=”,若a=0;b=0.5;x=0.3;则 a=x=b的值为,0,1.0/9.0*9.0=1.0 结

33、果为可改写为:fabs(1.0/9.0*9.0-1.0)1e-6,0,int a=0,b=1;if(a=b)printf(“a equal to b”);else printf(“a not equal to b”);,逻辑运算符,3.5 运算符和表达式,逻辑运算符种类:!&|逻辑运算真值表C语言中,运算量0表示“假”,非0表示“真”;运算结果0表示“假”,1表示“真”。优先级:与、或、非结合性:!从右向左,&、|自左向右。,a=4;b=5;!aa&ba|b!a|b4&0|253&2|84-!0c&d,值为1,值为0,值为1,值为1,值为1,值为1,值为1,逻辑运算符,3.5 运算符和表达式,

34、逻辑运算符短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。,a则:(m=ab)&(n=cd),m=0,n=1,条件运算符,3.5 运算符和表达式,条件运算符一般形式:expr1?expr2:expr3功能:,b0?a+b:a-b(a=b)?Y:N(x%2=1)?1:0(x=0)?x:-x(c=a&c0?1:(x0?-1:0),逗号运算符,3.5 运算符和表达式,逗号运算符格式:表达式1,表达式2,表达式n功能:按照从左到右的顺序逐个求解表达式,而整个逗号表达式的值就是表达式n的值。逗号表达式的值:等于表达式n的值,#

35、include void main()int x,y=7;float z=4;x=(y=y+6,y/z);printf(x=%dn,x);,运行结果:x=3,位运算符,3.5 运算符和表达式,位运算符种类:、&、|功能:按照二进制表示方法(补码),逐位执行所给定的运算。,#include void main()int a=18,b=33,c,d,e,f,g,h;c=a,运行结果:c=0,d=51,e=-19,f=51,g=72,h=4,取长度运算符,3.5 运算符和表达式,取长度运算符格式:sizeof(类型名|表达式)功能:取出类型名或表达式的长度。,#include int main()i

36、nt var;printf(length of integer is%d.n,sizeof(int);printf(length of long is%d.n,sizeof(long);printf(length of short is%d.n,sizeof(short);printf(length of float is%d.n,sizeof(float);printf(length of double is%d.n,sizeof(double);printf(length of char is%d.n,sizeof(char);printf(length of constant 1 is%

37、d.n,sizeof(1);printf(length of constant 0.1 is%d.n,sizeof(0.1);printf(length of constant a is%d.n,sizeof(a);printf(length of integer variable is%d.n,sizeof(var);,运行结果:length of integer is 4.length of long is 4.length of short is 2.length of float is 4.length of double is 8.length of char is 1.length

38、 of constant 1 is 4.length of constant 0.1 is 8.length of constant a is 4.length of integer variable is 4.,运算符的优先级,3.5 运算符和表达式,在复杂表达式中,通过运算符的优先级确定各种运算符的执行顺序。语言中的运算符优先级共分为15级。1级最高,15级最低。在进行表达式运算时,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理,详细情况见附录B。在语言中,各运算符的结合性分为两种:即左结合性(自左至右)和右结合性(自右

39、至左)。,3.5 运算符和表达式,算术运算符:+、-、*、/、%、+、-,关系运算符:、=、!=、=,赋值运算符:=、+=、-=、*=、/=,逻辑运算符:!、&、|,位操作运算符:、&、|、,条件运算符:?:,逗号运算符:,,求字节数运算符:sizeof,C语言的运算符,小结,总结,标识符:关键字预定义标识符自定义标识符。数据类型:基本类型占用字节数、范围、精度常量:整型、实型、字符、字符串;符号常量变量:变量名、变量值、变量类型数据类型转换:显式转换、隐式转换运算符和表达式,作业,编程实现:对于输入的一个五位数,求出其每位上的数字,并输出。每两位数字之间用空格隔开。给出下面数学式子的C语言的合法表达式。,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号