第二章 基本数据类型运算符和表达式_第1页
第二章 基本数据类型运算符和表达式_第2页
第二章 基本数据类型运算符和表达式_第3页
第二章 基本数据类型运算符和表达式_第4页
第二章 基本数据类型运算符和表达式_第5页
已阅读5页,还剩39页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章基本数据类型运算符和表达式第1页,课件共44页,创作于2023年2月§2.1C语言的数据类型§2.1.1概述

程序设计主要解决两个问题:一个是动作,即怎样做的问题,这由语句来实现;另一个是动作的对象,即数据的存放问题,这由数据类型来决定。世界上著名的计算机科学家沃斯(N.Wirth)提出这样一个公式:程序=数据结构+算法为什么要规定数据类型呢?

不同数据类型的数据在内存中占据不同长度的存储区(2)一种数据类型对应着一个值的范围。(3)一种数据类型对应着一个运算集。第2页,课件共44页,创作于2023年2月§2.1.2数据类型数据类型

基本类型整型(有符号、无符号的短、基、长)字符型单精度双精度构造类型指针类型空类型数组类型结构体类型联合体类型实型(浮点型)枚举类型1第3页,课件共44页,创作于2023年2月§2.2常量

(2)常量:程序运行过程中其值不发生变化的量。三类常量:数值、字符和字符串。§2.2.1数值常量一、整数常量的表示1、计数制的通用表示方法A=an-1×bn-1+an-2×bn-2+…..+a1×b1+a0×b0+

a-1×b-1+

a-2×b-2+…..+a-m×b-m

基数(b):所含数码的个数权(bx):表明数码所在的位置数码:0~b-1整数常量实数常量数值常量第4页,课件共44页,创作于2023年2月二进制数:基数:2权:2x数码:0~1例如:1010.11=1×23+0×22+1×21+0×20

+1×2-1+1×2-2=10.75二进制数权值:12864 32168 421注:计算机中使用二进制编码表示数据,且只存在二进制。2、十进制表示基数:10权:10x数码:0~9例如:123.45=1×102+2×101+3×100+4×10-1+5×10-2

第5页,课件共44页,创作于2023年2月3、八进制表示基数:8权:8x数码:0~7例如:023=2×81+3×80=19注:八进制是二进制的短格式计数法,一位对三位。例如:023对应的二进制数为010011注:C语言中八进制数第一个数字必须为0(八进制标志)例如:0213 -030 +056 -01234、十六进制表示基数:16权:16X数码:0~9,A,B,C,D,E,F例如:0XBF3C=11×163+15×162+3×161+12×160=48956

第6页,课件共44页,创作于2023年2月注:十六进制是二进制的短格式计数法,一位对四位。例如:0XBF3C对应的二进制数为1011111100111100

注:十六进制数前两个数字必须为0X(十六进制标志)例如:0X213 -0X30 +0X56 -0X12A二、整数常量的几种表示方式之间的转换红色:连续除基数,取余数直到商为零浅蓝:按权值位展开。黄色:借助二进制数转换。第7页,课件共44页,创作于2023年2月1、十进制变八进制或十六进制(红色)(1)将139变为八进制数(0213)8139817余382余10余2将3158变为十六进制数(0XC56)2、八进制或十六进制变十进制(浅蓝)(1)将0213变为十进制数(139)0213=2×82+1×81+3×80=139(2)将0XC56变为十进制数(3158)

3、八进制与十六进制变换(黄色)(1)将0X1A3变成八进制数(0643)P19(2)将0334变为十六进制数(0XDC)

P19第8页,课件共44页,创作于2023年2月三、整数常量的取值范围短整型数:基本整型数:长整型数:四、溢出整数的值超出了所能表示的范围有符号短整型(16位):-32768~+32767无符号短整型(16位):0~65535有符号整型(16位):-32768~+32767无符号整型(16位):0~65535有符号长整型(32位):-2147483648~+2147483647无符号长整型(32位):0~4294967295第9页,课件共44页,创作于2023年2月五、实数实数只使用十进制形式表示两种表示方法:小数形式与指数形式1、小数形式:由整数部分、小数点、小数部分组成 2.7180.123123.0 .123 123.0.02、指数形式:[+][整数部分][.][小数部分]<e>[+]<n>e前部分称为尾数,表示实数的有效值,符号表示整体的正负。e后部分称为阶码,表示小数点在尾数基础上的移动位数,符号表示移动的方向例如:-3.14e2, 3.14e-2实数的分类单精度,例如:3.1415f双精度,例如:3.1415长双精度,例如:3.1415L第10页,课件共44页,创作于2023年2月

实数取其值的绝对值范围。当实数超出它的类型所能表示的范围时产生溢出。如果实数的绝对值小于所能表示的最小值则产生下溢,例如:实数1.7e-309和-1.7e-309均产生下溢,因为|±1.7e-309|<|±1.7e-308|。下溢时绝对值太小以致机器不能表示而产生零值,称之为“机器零”。下溢时程序可能无法正常运行。当实数的绝对值大于所能表示的最大值时产生上溢,例如:实数1.7e+309和-1.7e+309均产生上溢,因为|±1.7e+309|>|±1.7e+308|。上溢时将产生错误的结果。实数又分为单精度(float)、双精度(double)和长双精度(longdouble)三类。实数的缺省类型为双精度数(double型);在实数后面加后缀字母f或F表示单精度数(float型),例如3.14159F;在实数后面加后缀字母l或L表示长双精度数(longdouble型),例如1.7e+309L.第11页,课件共44页,创作于2023年2月

单精度实数具有6~7位十进制有效数字;双精度实数具有15~16位十进制有效数字;长双精度数具有18~19位十进制有效数字。第12页,课件共44页,创作于2023年2月§2.2.2字符常量

一对单引号括起来的单一字符。例如:‘A’,’2’,’+’字符常量在内存中占一个字节存放,存放的值为该字符的ASCII码值。美国标准信息交换码ASCII码(AmericanStandardCodeforInformationInterchange)前32个,0x0—0x1f为控制字符‘

’是空格,编码为OX20‘3’编码为OX33‘9’编码为OX39‘A’编码为OX41‘Z’编码为OX5A‘a’编码为OX61‘z’编码为OX7A第13页,课件共44页,创作于2023年2月§2.2.3转义字符用于表示一些没法表示的字符,例如控制字符、单引号等两种表示形式:1、反斜杠后面跟一个字符例如:

'\0'

空字符 '\n'

换行 '\t'横向跳格

'\b'

退格'\r'

回车 '\\'

\字符

'\'

'

单引号'\"

'

双引号

2、反斜杠后面跟一个字符的ASCII码(两位十六进制数\xhh或三位八进制数\ddd)例如:换行字符可以表示为:'\n'、

'\012'

、'\12'

、

'\XA'第14页,课件共44页,创作于2023年2月§2.2.4字符串常量一对双引号括起来的零个或多个的字符序列,字符序列中的字符个数称为字符串的长度。例如:"thisisastring\n"

"thisisa\"c\"program"长度为0的字符串(即一个字符都没有的字符串)称为空串,表示为""(一对紧连的双引号)。在存储字符串常量时,由系统在字符串的末尾自动加个空字符'\0'作为字符串的结束标志例如:有一个字符串“CHINA”,它在内存中的实际存储如下所示。字符串如果有n个字符,则占用n+1个内存空间。CHINA\0第15页,课件共44页,创作于2023年2月

字符串必须写成一行,如下写法是错误的:

printf("Hello,howareyou?");字符串常数必须写成一行。如果一行写不下,则有两种方法可以将行扩展到下一行。printf("hello,""howareyou?");两个字符串中间只有空白字符(分隔符),认为这是一个字符串。2、续行符printf("hello,\howareyou?");§2.2.5符号常量

将一个常量定义为一个标识符,这个标识符可以代替对应的常量,称为符号常量。

例如:#definePI3.1415926(符号常量名使用大写字母)第16页,课件共44页,创作于2023年2月使用符号常量的优点:1、输入很长的常量可以避免出错,简化输入。2、含义直观。3、修改容易例如:计算相同半径下的圆周长、圆面积和圆球体积。

#definePI3.14159main()main(){floatl,s,v,r;{floatl,s,v,r;printf("inputr:");printf("inputr:");scanf("%f",&r);scanf("%f",&r);l=2*3.14159*r;l=2*PI*r;s=3.14159*r*r;s=PI*r*r;v=4/3*(3.14159*r*r*r);v=4/3*(PI*r*r*r);printf("l=%f,s=%f,v=%f\n",l,s,v);printf("l=%f,s=%f,v=%f\n",l,s,v);}}第17页,课件共44页,创作于2023年2月§2.3变量及数据类型§2.3.1变量和变量的地址变量:程序运行中可以改变的量。

本质是内存中的一块存储区,变量名:是这块存储区的首地址的符号标识(通过变量名找到这块存储区在内存中的位置,找到该块存储区内存储的内容)

注:使用变量名表示存储的数据。

使用&变量名表示地址。变量类型:表明这块存储区的大小,以及施加在这块存储区内存储的内容上的操作范围第18页,课件共44页,创作于2023年2月

在程序运行时,变量的值存储在一定的存储单元中,为此,须弄清楚变量名和变量值这两个不同的概念,如左图所示。存储某变量值的存储单元的首地址称为变量的地址。如右图所示的单精度实型变量average,是具有4个字节的存储单元,它们分别是单元4000~4003,而4000就称为变量average的首地址。在C语言中,变量的地址用变量名前加&符号表示,即&average,或者说&average的值就是4000。

变量名floataverage&average→4000sum变量值40014002

4003存储单元

30第19页,课件共44页,创作于2023年2月§2.3.2基本数据类型变量一、整型变量包括基本整型、短整型和长整型。ANSIC规定long不短于int,short不长于int。具体实现取决于计算机系统。1、整型变量的类型标识符有符号短整型:[signed]short[int]无符号短整型:unsignedshort[int]有符号基本整型:[signed]int无符号基本整型:unsigned[int]有符号长整型:[signed]long[int]无符号长整型:unsignedlong[int]例如:inta; 取值范围为-32768~32767 unsignedintb; 取值范围为0~65535第20页,课件共44页,创作于2023年2月二、计算机中数的表示

无符号数表示 00000000=0 0000000000000000=0 11111111=255 1111111111111111=65535

表示有符号数→加正负号→用0和1代表正负→用某种编码方式使符号位也直接参与运算,不用特殊处理并得到正确结果

机器数:符号数值化了的数(最高位为符号位,1表示负号,0表示正号,其余为真值)原码表示法:符号+绝对值例如:[+3]原码=00000011=03H [-3]原码=10000011=83H[+0]原码=00000000=00H[-0]原码=10000000=80H八位十六位第21页,课件共44页,创作于2023年2月补码表示法:计算机中有符号数用补码表示正数的补码=正数的原码负数的补码=该负数相对应的正数的补码按位取反再加一例如:[-46]补码=? [46]补码=0010111011010001(按位取反)11010010=D2H(加一)n位补码的表数范围:-2n-1

N

2n-1-1n=8-128

N

127n=16-32768

N

32767第22页,课件共44页,创作于2023年2月三、实型变量实型变量为:单精度型、双精度型和长双精度型。单精度:float(四个字节存储)双精度:double(八个字节存储)长双精度:longdouble(字节数≥8,取决于计算机系统)取值范围:单精度型:有6~7位有效数字,范围约为|3.4e-38|~|3.4e+38|双精度型:有15~16位有效数字,范围约为|1.7e-308|~|1.7e+308|长双精度型:如TurboC中的长双精度型变量的值在内存中占10个字节)。四、字符变量用于存放字符常量,存放的是字符的ASCII码。类型标识符为char。第23页,课件共44页,创作于2023年2月§2.3.3变量说明变量遵循先定义(说明)后使用的原则,变量说明的目的:在编译时便于发现未经定义的变量名。(2)根据类型信息来检查对变量施加的运算是否合理。(3)编译时根据类型为变量分配固定长度的存储单元,并确定数据在内存中的表示方法。变量说明形式:[存储类别]<数据类型标识符><变量名表>存储类别决定变量的存储位置,同时也决定变量的生存期和作用域。数据类型用于指明变量名表中所列变量的数据类型。例如:intnumber,score; unsignedlongdistance;第24页,课件共44页,创作于2023年2月【例2.1】不同整型变量的混合运算。main(){inta,b,c,d,x,y;unsignedinte;a=20;b=-15;c=50;d=-10;e=25;x=a+b+e;y=c+d+e;printf("\na+b+e=%d,c+d+e=%d\n",x,y);}运行结果为:

a+b+e=30,c+d+e=65第25页,课件共44页,创作于2023年2月【例2.2】整型数据的溢出问题。main(){inta,x;unsignedintb,y;a=3;b=65532;x=a+b;y=a+b;printf("x=%d,y=%u\n",x,y);}运行结果为:x=-1,y=6553500000000000000113

a(+)111111111111110065532

b

1111111111111111第26页,课件共44页,创作于2023年2月【例2.3】字符型数据和整型数的混合运算。main(){charc1,c2,c3;c1='A'+3;c2=65;c3='A';printf("%c,%c,%c\n",c1,c2,c3);printf("%d,%d,%d\n",c1,c2,c3);}运行结果如下:D,A,A68,65,65第27页,课件共44页,创作于2023年2月§2.3.4变量的初始化

变量说明只是指定了变量的名字和数据类型,并没有给它们赋初值。但程序中有些变量在使用前必须赋初值例如,作为计数器(n=n+1)使用的整型变量n通常要置初值0在C语言程序中,没有赋初值的变量并不意味着该变量中就没有数值,因为该变量所标识的存储单元中还保留着以前使用该单元时留下的内容,只是尚未对该变量定义特定值。于是,直接引用该变量就会产生莫名其妙的结果。

(没有赋值的变量内存单元会有随机值存在)变量赋初值的一般形式:

<数据类型标识符><变量名>=<表达式>,….例如:intn=0,s=1; doubleprice=35.5; intx,y=10,z;

第28页,课件共44页,创作于2023年2月§2.4运算符和表达式§2.4.1概述运算符:C语言中用于描述数据运算的特殊符号。操作数:运算符的运算对象(常量、变量、函数等)。表达式:用运算符将C语言的各种运算对象连接起来,组成符合C语言语法要求的式子(一个常量或变量也可称为表达式)。目:对一个运算符而言,参加运算的操作数的个数(单、双、三)例如:(a+b)*sin(x)+2优先级:运算符的优先级。规定表达式中不同运算符相邻出现时, 运算符的计算顺序。优先级高的运算符先进行计算。结合性:C语言特有的、用来规定同样优先级的运算符相邻出现时 表达式的计算方式(计算方向)。例如:a+b*c-d→(a+(b*c))-d -i++→-(i++)注:括号可以用来改变表达式的优先级和结合方式第29页,课件共44页,创作于2023年2月§2.4.2算术运算符和算术表达式1.基本算术运算符

+

加法或正值运算符

-

减法或负值运算符

*

乘法运算符

/

除法运算符

%

求余数运算符

(1)整数除法和实数除法

整数除:两个操作数全是整数,商为整数,小数部分被舍弃。

例如:5/2→2 -10/3→-3 实数除:两个操作数只要有一个是实数,商为实数。 例如:3.0/5.0→0.6 3/5.0→0.6(2)关于求余数运算% 两个操作数必须全为整数,结果为整数,符号与被除数相同 例如:53%7

→

4

53%-7

→

4

-53%-7

→

-4第30页,课件共44页,创作于2023年2月(3)混合运算

运算符两侧的数据类型可以不同,系统先将两个运算对象转换成相同的数据类型,再进行实际计算。这种由混合运算引起的类型转换是自动进行的。

例如:‘a’+2.718*‘b’+10-5%2*(a+b)/*设a和b是实型变量*/

转换原则:表示范围小的类型转换为表示范围大的类型2.自增、自减运算符“++”和“--” 功能:将一个变量加1或减1,常用来修改计数次数、下标或指针。

i++ ++i i-- --i

例如:intx,a=5;

x=a++

x=a,a=a+1 x=a--

x=a,a=a-1 x=++a

a=a+1,x=a x=--a

a=a-1,x=a

(1)操作数必须是变量 “++”和“--”运算符的操作数只能是变量,而不能是常量或表达式,例如:

25++ /*是不合法的*/

(i+j)++/*是不合法的*/

第31页,课件共44页,创作于2023年2月(2)单目运算符,优先级与取负数运算符“-”相同,结合方向是从右至左。

例如:inti=4;

printf(“%d”,-i++); 输出-4,i最终等于5。相当于printf(“%d”,-(i++));注意:(1)优先级和结合性

(++、--、-)→(*、/、%)→(+、-)

单目运算符++、--和-是从右至左结合的,+、-、*、/和%是从左至右结合的。(2)书写表达式要使用括号使表述清晰

例如:i+++j写成(i++)+j第32页,课件共44页,创作于2023年2月§2.4.3赋值运算符和赋值表达式 赋值:把表达式的值存入变量所对应的存储空间1、简单赋值运算符“=” 格式:<变量名〉=<表达式〉

(*)如果“=”两边的类型不一致,系统会将右边的数据转换为左边变量的类型(截取或扩展)。例如:inti,j; doubled=2.6; charc1=‘a’,c2; j=c1; c2=‘\102’; i=d+3;(*)结合性为从右至左。例如:x=y=5x=(y=5)第33页,课件共44页,创作于2023年2月2、算术复合赋值运算符(3)

+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|= 变量名op=表达式

变量名=变量名op(表达式)例如:x+=2;

x=x+2; x*=y+1;

x=x*(y+1); a+=b+=c*c;

a=a+(b=b+c*c);§2.4.4关系运算符和关系表达式

关系运算:对两个操作数进行比较的运算,由关系运算符实现。

>大于>=大于等于

<

小于<=小于等于

==等于!=不等于

第34页,课件共44页,创作于2023年2月(1)优先级与结合性

(>>=<<=)

→

(!===)

算术运算符→关系运算符→赋值运算符 从左至右的结合方向(2)关系表达式的取值 取值为逻辑值,用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”例如:写出下列表达式的执行顺序

a+b>c+d x>y!=z a=x>y>z例如:intx=2,y=3; 求z1和z2的值 z1=0<=x<=9 z2=3-1!=x+1<=y+2 (a+b)>(c+d)(x>y)!=za=((x>y)>z)z1=((0<=x)<=9)z2=((3-1)!=((x+1)<=(y+2)))第35页,课件共44页,创作于2023年2月§2.4.5逻辑运算符和逻辑表达式逻辑运算符用来描述同时满足、只要满足其一、相反的条件等关系

&&逻辑与

¦¦逻辑或

!逻辑非(1)逻辑运算真值表(2)优先级与结合性 (!)

→

(&&)→(||) (!、++、--、-)→算术运算→关系运算→&&→||→赋值运算 !是右结合方向,&&与||是左结合方向ab!a!ba&&ba||b11

0

0

1

110

0

1

0

101

1

0

0

100

1

1

0

0第36页,课件共44页,创作于2023年2月例如:写出下列表达式的执行顺序 x>y&&a<=b-c c>=‘a’&&c<=‘z’d<‘0’||d>’9’注意:(*)在计算逻辑表达式时,并不是所有的表达式都要被求解。 逻辑与:如果第一个操作数被判定为“假”,系统不再判定或 求解第二操作数。 逻辑或:如果第一个操作数被判定为“真”,系统不再判定或 求解第二操作数。例如:假设n1、n2、n3、n4、x、y的值分别为1、2、3、4、1、1, 则求解表达式(x=n1>n2)&&(y=n3>n4)后x和y的值(*)条件或逻辑表达式用整数“1”表示结果“逻辑真”、用“0”表示 结果“逻辑假”。(*)在判断一个数据的“真”或“假”时,却以0和非0为根据:如果

为0,则判定为“逻辑假”;如果为非0,则判定为“逻辑真”第37页,课件共44页,创作于2023年2月例如:x=10、y=5、z=‘a’ 求下列表达式的值 !x y&&z !x||0 10&&0||3§2.4.6条件运算符(1)格式:

表达式1?表达式2:表达式3(2)运算规则:

如果“表达式1”的值为非0(即逻辑真),则运算结果等于“表达式2”的值;否则,运算结果等于“表达式3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论