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

下载本文档

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

文档简介

第3章-基本数据类型、运算符和表达式第一页,共72页。3.1计算机中数的表示计算机的主要功能是处理各种信息,这些信息都必须经过数值编码后才能在计算机中存储、处理和传输。因为计算机是采用二进制数值存储信息和计算数据的,即以“0”和“1”两种代码进行存储、计算和传输信息,所示各种信息在计算机中都是二进制形式。在计算机内部采用二进制数表示数据,而不是十进制数。这主要是因为采用二进制数具有其他进制所不具备的优点:易于表示节约设备运算简单可靠性强第一页第二页,共72页。一个数据每个数字符号的位置不同,它所代表的数值也不同,这就是经常所说的个位、十位、百位、千位、……,一种进位计数制包含一组数码符号和两个基本因素:一组数码用来表示某种数制的符号。如:1、2、3、A、B。基数数制所用的数码个数,用R表示,称R进制,其进位规律是“逢R进一”权数码表示在不同位置上的权值。在某进位制中,处于不同数位的数码,代表不同的数值,某一个数位的数值是由这位数码的值乘以这个位置的固定常数构成,这个固定常数称为“位权”3.1.1各种进制数的表示

第二页第三页,共72页。⑴十进制数十进制数由0、1、2、3、4、5、6、7、8、9等10个不同的符号组成,其基数为10,权为10n,十进制数的运算规则是逢10进1。⑵二进制数计算机中的所有数据是以二进制形式存储的,二进制数的数码是用“0”和“1”来表示的,其基数为2,权为2n,二进制数的运算规则是逢2进1。⑶八进制数具有8个不同的数码符号0、1、2、3、4、5、6、7,其基数为8,权为8n,八进制数的运算规则是逢8进1。⑷十六进制具有16个不同的数码符号0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,其基数为16,权为16n,十六进制数的运算规则是逢16进1。3.1.1各种进制数的表示

第三页第四页,共72页。B一一二进制,D一一十进制(D可省略),0一一八进制,H一一十六进制3.1.1各种进制数的表示

第四页第五页,共72页。⑴R进制数转换为十进制数

按权展开法:把一个任意R进制数转换成十进制数,其十进制数值为每一位数字与其位权之积的和:an……ala0.a-l……am(r)=a*Rn+...+a*r1+a*R0+a*R-l+...a*R-m3.1.2进制转换第五页第六页,共72页。例如:

10101.11B

=1×24+0×23+1×22+0×21+1×20+1×2-1+1×2-2

=16+4+1+0.5+0.25=21.75

6101.2(0)

=6×83+1×82+0×81+1×80+2×8-1

=3137.2525101AH=1×163+0×162+1×161+10×160=41223.1.2进制转换第六页第七页,共72页。⑵十进制数转换成R进制数①整数部分:除以R取余数,直到商为0,得到的余数即为二进制数各位的数码,余数从右到左排列。②小数部分:乘以R取整数,直到小数部分为0或满足精度要求为止,将所取得的整 数从左到右排列,即为其在R进制中的小数部分数码。3.1.2进制转换第七页第八页,共72页。例如,将一个十进制整数108.375转换为二进制数。 方法如下:把整数108反复除以2,直到商为0,所得的余数(从末位读起)就是这个数的二进制表示。简单地说,就是“除2取余法”。通常我们采用如图1-1(a)来进行演算。把小数0.375连续乘以2,选取进位整数,直到满足精度要求为止。简称“乘2取整法”。通常我们采用如图1-1(b)来进行演算。3.1.2进制转换第八页第九页,共72页。3.1.2进制转换第九页第十页,共72页。⑶二进制数与八进制数之间的转换由于二进制数和八进制数之间存在特殊关系,即81=23,他们之间的对应关系是八进制 数的每一位对应二进制数的三位。①二进制数转换成八进制数 二进制数转换成八进制数的方法是:先将二进制数从小数点开始;整数部分从右向左3位一组,小数部分从左向右3位一组,若不足三位用0补足,再转换成八进制数。3.1.2进制转换第十页第十一页,共72页。例如,将1100101110.1101B转换为八进制数的方法如图1-3所示。3.1.2进制转换第十一页第十二页,共72页。②八进制数转换成二进制数方法为以小数点为界,向左或向右每一位八进制数用相应的三位二进制数取代,然后将其连在一起即可。若中间位不足3位在前面用0补足。3.1.2进制转换第十二页第十三页,共72页。例如,将3216.42转换为二进制数的方法如图1-4所示。3.1.2进制转换第十三页第十四页,共72页。⑷二进制数与十六进制数之间的转换①二进制数转换成十六进制数二进制数的每4位刚好对应于十六进制数的1位(161=24,其转换方法是,将二进制数从小数点开始,整数部分从右向左4位一组:小数部分从左向右4位一组,不足4位用0补足,每组对应一位十六进制数即可得到十六进制数。3.1.2进制转换第十四页第十五页,共72页。例如,将二进制数11101B转换为十六进制数如图1-5所示。3.1.2进制转换第十五页第十六页,共72页。②十六进制数转换成二进制数方法为以小数点为界,向左或向右每一位十六进制数用相应的四位二进制数取代,然后将其连在一起即可。3.1.2进制转换第十六页第十七页,共72页。⑴机器数 计算机中只有二进制数值,且都是以二进制的形式存储和运算的。数的正、负号也是用二进制代码表示,数的正负用高位字节的最高位来表示,用“0”表示正数,“1”表示负数,其余位仍表示数值。把在机器内存的正、负号数字化的数称为机器数。3.1.3原码、反码和补码机器数有3种表示方法:原码、补码和反码,是将符号位和数值位一起编码,机器数对应的原来数值称为真值。第十七页第十八页,共72页。⑵原码表示法原码表示方法中,数值用绝对值表示,在数值的最左边用“0”和“1”分别表示正数和负数,书写成[X]原表示X的原码。在原码的表示中,有以下两个特点:①最高位为符号位,正数为0,负数为1,其余n-1位是X的绝对值的二进制表示。②0的原码有两种表示:[+0]原=00000000,[一0]原=10000000。因此,原码表示法中,数值0不是惟一的。3.1.3原码、反码和补码第十八页第十九页,共72页。⑶反码表示法用[X]反表示X的反码。在反码的表示中,有以下特点:①正数的反码与原码相同,负数的反码是其绝对值的二进制表示按各位取反(0变1,1变0)所得的表示。②0在反码表示中也有两种表示:[+0]反=00000000,[一0]反=11111111,即数值0不是惟一的。3.1.3原码、反码和补码第十九页第二十页,共72页。⑶补码表示法用[X]补表示X的补码。在补码的表示中,有以下特点:①正数的补码与原码、反码相同,负数的反码是其绝对值的二进制表示按各位取反(0变1,1变0)加1,即为其反码+1。②0在补码表示中:[+0]补=[一0]补=00000000,数值0是惟一的。 由于补码运算方便,所以在计算机中广泛使用。3.1.3原码、反码和补码第二十页第二十一页,共72页。如何将一个负数的二进制补码数转换成十进制数?转换步骤如下:首先将各位取反。将其转换为十进制数,并在前加一负号。对所得到的数再减1,即得到该数的十进制数。3.1.3原码、反码和补码第二十一页第二十二页,共72页。3.2C语言的基本数据类型C数据类型指针类型空类型void定义类型typedef构造类型枚举类型enum数组结构体struct共用体union基本类型字符类型char整型实型单精度型float双精度型double短整型short长整型long整型int数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作第二十二页第二十三页,共72页。基本数据类型类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)

int16-32768~32767(signed)

short16-32768~32767(signed)

long32-2147483648~214748364716unsigned

int0~65535320~4294967295unsigned

longunsigned

short160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127无unsignedchar80~255说明:数据类型所占字节数随机器硬件不同而不同,上表以IBMPC机为例第二十三页第二十四页,共72页。3.3常量与变量标识符定义:用来标识变量、常量、函数等的字符序列组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线大小写敏感不能使用关键字

讨论:判断下列标识符号合法性sum Sum M.D.John day Date 3daysstudent_name #33 lotus_1_2_3 char a>babove$123_toDayM.D.John3days#33char$123a>b第二十四页第二十五页,共72页。长度:TurboC中最长32个字符命名原则:见名知意,采用简洁有含义的英文单词(或缩写)不宜混淆如l与I,o与0

标识符命名实例stu_name,sum,total,day,count,sort第二十五页第二十六页,共72页。常量在程序运行过程中,其值不能改变的量称为常量常量可为任意数据类型字面常量(直接常量)整型:

12、0、-3实型:

4.6、-1.23字符型:’a’、’d’字符串常量:”Hello”、”GoodMorning!”第二十六页第二十七页,共72页。符号常量:标识符代表常量定义格式:#define<符号常量名><常量>

符号常量定义举例

#definePI

3.1415926 #defineSTAR

‘*’说明:符号常量一般使用大写英文字母表示,以区别一般用于小写字母表示的变量。第二十七页第二十八页,共72页。符号常量使用例符号常量举例#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf("total=%d",total);}运行结果:total=300符号常量的使用能给程序员带来哪些好处?第二十八页第二十九页,共72页。变量其值可以改变的量称为变量变量也可以为任意数据类型变量定义的一般格式数据类型变量1[,变量2,…,变量n];决定分配字节数和数的表示范围变量定义举例:inta,b,c;floatdata;第二十九页第三十页,共72页。变量的使用:作强制定义,也就是“先定义,后使用”例1intstudent;stadent=19;//Undefinedsymbol‘stadent’infunctionmain

第三十页第三十一页,共72页。整型数据整型常量形式表示方式举例十进制整数由数字0~9和正负号表示123,-456,0八进制整数由数字0开头,后跟数字0~7表示0123,011十六进制整数由0x开头,后跟0~9,a~f,A~F表示0x123,0Xff问题:0123=()100x123=()100Xff=()10第三十一页第三十二页,共72页。整型常量的类型根据其值所在范围确定其数据类型在整常量后加字母l或L,认为它是longint型常量例

12与12L例30000为int型65536为longint型第三十二页第三十三页,共72页。整型变量整型变量在内存中以二进制的形式存放根据占用的字节数不同,分为不同类别整型变量定义举例:inta,b;unsignedshortc,d;longe,f;第三十三页第三十四页,共72页。实型数据实型常量十进制数形式(必须有小数点,整数部分为0时可以省略)0.123.123123.00.0123.

指数形式(e或E之前必须有数字;指数必须为整数)12.3e3123E21.23e4e-5

1.2E-3.5.e3规范化的指数形式:在字母e(或E)之前的数据中,小数点左边有且仅有一位非零的数字。指数形式实型常量12.3e3123E21.23e4(规范化)0.123e-3第三十四页第三十五页,共72页。floata;a=111111.111doublea;a=111111.111问题:以下两段程序代码,是否有区别?float:占4字节,提供7位有效数字double:占8字节,提供15~16位有效数字第三十五页第三十六页,共72页。字符常量定义:用单引号括起来的单个普通字符或转义字符。字符常量的值:该字符的ASCII码值转义字符:反斜线后面跟一个字符或一个代码值表示如‘a’‘A’‘?’‘\n’‘\101’如‘A’——65,‘a’——97,

‘0’——48,‘\n’——10<转义字符及其含义:转义字符含义\n\v\r\a\‘\ddd\t\b\f\\\“\xhh转义字符含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符如‘\101’-----------‘A’‘\012’-----------’\n’‘\376’-----------’

’‘\x61’-----------’a’‘\60’-----------’0’‘\483’----------(

)例:‘A’-------’\101’-------’\x41’--------65例转义字符举例(ch2_001.c,ch2_004.c)main(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Turbo\'C\'");}运行结果:(屏幕显示)ABCIsay:”Howareyou?”\CProgram\Turbo‘C’例main(){printf(“Y\b=\n”);}运行结果:屏幕显示:=打印机输出:¥第三十六页第三十七页,共72页。注意事项:单撇号中的字符不能是’或者\一个字符占一个字节,存其对应的ASCII码思考:’9’和9的区别?字符型数据可像整数一样在程序中参与相关的运算‘a’–32结果为65第三十七页第三十八页,共72页。字符变量字符变量存放字符ASCII码char与int数据间可进行算术运算例1a=‘D’;/*a=68;*/x=‘A’+5;/*x=65+5;*/s=‘!’+‘G’/*s=33+71;*/例2

main(){charc1,c2;c1=97;c2=98;printf(“%c%d”,c1,c2);}第三十八页第三十九页,共72页。字符串常量定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个‘\0’作为字符串结束标志字符常量与字符串常量不同hello

\0例字符串“hello”在内存中例空串“”\0aa\0例‘a’“a”例:charch;ch=‘A’;例:charch;ch=“A”;没有字符串变量,用字符数组存放第三十九页第四十页,共72页。变量赋初值根据变量的定义,为其分配指定字节的内存单元…...地址inta=1,b=-3,c;abc2字节2字节2字节地址地址…...内存1-3

随机数第四十页第四十一页,共72页。例main(){intx,y;printf(“%d,%d”,x,y);}运行结果:64,3129如果定义了变量,但是没有对它赋初值,则它的值是一个不确定的数值。第四十一页第四十二页,共72页。3.4运算符和表达式C运算符简介C运算符算术运算符:(+-*/%++--)关系运算符:(<<===>>=!=)逻辑运算符:(!&&||)位运算符:(<<>>~|^&)赋值运算符:(=及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(*&)求字节数:(sizeof)强制类型转换:(类型)分量运算符:(.->)下标运算符:([])其它:(()-)学习运算符应注意运算符功能与运算量关系-要求运算量个数-要求运算量类型运算符优先级别结合方向结果的类型第四十二页第四十三页,共72页。基本的算术运算符+

加法运算或正值运算符- 减法运算或负值运算符* 乘法运算符/

除法运算符,求商,两个整数相除结果为整数%

模运算符,求余,要求两边均为整型数据3+5、+35-2、-33*55/37%43.4.1算术运算符及其表达式

第四十三页第四十四页,共72页。例5/2=-5/2.0=例5%2=-5%2=5%-2=1%10=

5%1=5.5%22-2.51-110(

)1取模的余数符号由被除数决定第四十四页第四十五页,共72页。算术表达式和运算符的优先级和结合性算术表达式:用算术运算符和括号将运算对象连接起来的、符合C语法规则的式子。求表达式的值:先按运算符的优先级别高低次序执行;再一个运算对象两则的运算赋的优先级别相同,则按规定的“结合方向”处理。a*b/c-1.5+’a’a–b*c/d第四十五页第四十六页,共72页。自增++、自减运算符—作用:使变量值加1或减1种类:前置++i,--i(先执行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再执行i+1或i-1)例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;

//k=4,j=4//k=3,j=4//4//3//c=20,a=4//c=15,a=4第四十六页第四十七页,共72页。注意说明:只能用于变量,不能用于常量或表达式;结合方向“自右向左”;优先级别:--++-------->*/%----->+-自增(减)运算常用于循环语句中循环变量自动加(减)1或指针变量,使指针指向下一个地址5++(×)(a+b)++(×)i++(√)例1解答:

-i++

-(i++)i=3;printf(“%d”,-i++);//-3

例1:-i++i=3;printf(“%d”,-i++);

第四十七页第四十八页,共72页。i+++j,应如何结合?解答:理解为(i++)+jC编译在处理时尽可能多地(自左而右)将若干个字符组成一个运算符。第四十八页第四十九页,共72页。3.4.2关系运算符及其表达式关系运算符种类:<<=>>===!=结合方向:自左向右优先级别:低于算术运算符而高于赋值运算符<<=>>===!=优先级6(高)优先级7(低)例c>a+b//c>(a+b)a>b!=c//(a>b)!=ca==b<c//a==(b<c)a=b>c//a=(b>c)第四十九页第五十页,共72页。关系表达式的值:是逻辑量“真”或“假”,分别用1和0表示。例inta=3,b=2,c=1,d,f;a>b(a>b)==cb+c<ad=a>bf=a>b>c//表达式值1//表达式值1//表达式值0//d=1//f=0C中没有逻辑型第五十页第五十一页,共72页。例1若a=0;b=0.5;x=0.3;

则a<=x<=b的值为0例25>2>7>8在C中是允许的,值为0例3inti=1,j=7,a;a=i+(j%4!=0);

则a=2例4‘a’>0结果为‘A’>100结果为10第五十一页第五十二页,共72页。例5注意区分“=”与“==”inta=0,b=1;if(a=b)printf(“a等于b”);elseprintf(“a不等于b”);第五十二页第五十三页,共72页。例6表达式1.0/3.0*3.0==1.0的值 为

可改写为:

fabs(1.0/3.0*3.0-1.0)<1e-6应避免对实数作相等或不等的判断0第五十三页第五十四页,共72页。3.4.3逻辑运算符及其表达式逻辑运算符种类:&&(与)||(或)!(非)逻辑运算真值表ab!a!ba&&ba||b真1假0真1假0假0假0真1真1真1假0假0假0假0假0真1真1假0假0真1真1真1假0真1真1第五十四页第五十五页,共72页。优先级和结合方向(详见课本P308附录C)!算术运算符关系运算符&&||赋值运算符高低优先级:结合方向:!:从右向左&&:从左向右||:从左向右例a<=x&&x<=ba==b||x==y!a||a>b//(a<=x)&&(x<=b)//(a==b)||(x==y)//(!a)||(a>b)第五十五页第五十六页,共72页。3.4.4条件运算符及其表达式条件运算符一般形式为:表达式1?表达式2:表达式3运算规则:如果“表达式1”的值为非0(即逻辑真),则运算结果等于“表达式2”的值,否则,运算结果等于“表达式3”的值。也就是说,“表达式2”与“表达式3”中,只有一个被执行,而不会全部执行。例如:(a>b)?a:b/*返回a和b中较大的数*/x?1:0/*若x是非0数,返回1,否则返回0*/(score>=60)?’Y’:’N’/*若及格,返回字符‘Y’,否则返回字符‘N’*/第五十六页第五十七页,共72页。3.4.5赋值运算符及其表达式简单赋值运算符“=”作用:将一个数据赋给一个变量结合方向:自右向左 优先级:14常量或表达式只能是变量,不能是常量或表达式例3=x-2*y;a+b=3;例a=3;a=(a+b)*c第五十七页第五十八页,共72页。赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型例1

floatf;inti;i=10;f=i;

f=10.0例2inti;i=2.56;//结果i=2;第五十八页第五十九页,共72页。赋值表达式定义:由赋值运算符”=”将一个变量和一个表达式连接起来的式子,叫赋值表达式。一般形式:<变量>=<表达式>赋值表达式的值与变量值相等,且可嵌套例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)//b=10,c=2,a=5,表达式值5//b=4,c=6,a=10,表达式值10//c=6,a=11,表达式值11//b=5;a=5,表达式值为5//b=5;a=5,表达式值为5//b=4,c=6,a=10,表达式值10//c=6,a=11,表达式值11//b=5;a=5,表达式值为5//b=10,c=2,a=5,表达式值5//b=4,c=6,a=10,表达式值10//c=6,a=11,表达式值11//a,b,c值为5,表达式值为5//b=5;a=5,表达式值为5第五十九页第六十页,共72页。复合的赋值运算符

+=-=*=/=%=《=》=&=^=|=a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例:a=12;a+=a-=a*a//a=-264等价于a=a+(a=a-(a*a))例:inta=2;a%=4-1;a+=a*=a-=a*=3;//a=0等价于a=a+(a=a*(a=a-(a=a*3)))第六十页第六十一页,共72页。3.4.6逗号运算符和表达式形式:表达式1,表达式2,……表达式n结合性:从左向右优先级:15(最低)逗号表达式的值:等于表达式n的值第六十一页第六十二页,共72页。例1a=3*5,a*4a=3*5,a*4,a+5例2x=(a=3,6*3)x=a=3,6*a例3a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);例4printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c)//a=15,逗号表达式值为60//a=15,逗号表达式值为20//x=18,赋值表达式值18//x=3,逗号表达式值18//1,2,3//3,2,3//逗号起分隔作用//逗号为逗号运算符第六十二页第六十三页,共72页。例:#include<stdio.h>main(){intx,y=7;floatz=4;x=(y=y+6,y/z);printf("x=%d\n",x);}运行结果:x=3第六十三页第六十四页,共72页。3.4.7求字节运算符sizeof运算符是一个求字节数运算符。它是一个单目运算符,求字节运算的一般形式为:sizeof(数据类型名|变量名|常量)功能:返回某数据类型、某变量或者某常量在内存中的字节长度。例如:printf(“%d\n”,sizeof(short));/*输出字节数2*/printf(“%d\n”,sizeof(x));

温馨提示

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

最新文档

评论

0/150

提交评论