版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章数据类型、运算符和表达式13.1C语言数据类型3.1.1C语言数据类型
整型字符型实型(浮点型)
枚举类型
数组结构体类型共用体类型
单精度型双精度型基本类型构造类型指针类型空类型数据类型23.2常量与变量3.2.1常量1.定义:在程序执行期间,其值不可改变的量称为常量2.类型:数值常量例如:10,3,2.68等符号常量即用一个符号代表一个常量例如:#definePRICE30main(){intnum,total;num=10,total=num*PRICE;printf(“total=%d”,total);}3说明:符号常量必须先定义后才能用它表示一个数值。符号常量的值在其作用域内不能改变,也不能再被赋值。符号常量名习惯用大写字母表示。4符号变量的好处 (1)含义清楚。定义符号常量名时应考虑“见名知意”。(2)在需要改变一个常量时能做到“一改全改”。53.2.2变量1.定义:程序执行期间值可以改变的量。2.命名规则:变量名由标识符表示,只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。
例如:M.D.John,%gf,add,_ce36,age&,5thclass,lotus-1-2-3,cd*ef,float注意,C语言区分大小写,大写字母和小写字母被认为是两个不同的字符。因此,sum和SUM,Class和class是两个不同的变量名。3.变量要“先定义,后使用”
定义格式:类型说明符标识符1,…,标识符n例如:intx,y,z;(每个变量分配2个字节)floata,b,c,d;(每个变量分配4个字节)6在C语言中,变量必须强制定义,其目的:1、凡未被事先定义的,不作为变量名。2、每一个变量被指定为一确定的类型,在编译时就能为其分配相应的存储单元。3、指定每一个变量为一确定的类型,在编译时据此检查该变量所进行的运算是否合法。
73.3整型数据3.3.1整型常量的表示法十进制整数:由数字(0-9)和正负号表示
例如:123、-456、0等023不合法的十进制整数八进制整数:以0开头数是八进制数例如:0123即(123)8=(83)10(123)8=182+281+380=(83)10十六进制整数:以0x或0X开头,例如:0x123即(123)16=(291)10
-0x12即(-12)16=(-18)1083.3.2整型变量整型数据在内存中的存放形式(补码表示法:便于加减运算)inti;i=10;
10=(1010)22102522210余数0101首位00000000
0000101000000000
0000101011111111
111101011111111
11111011010的原码取反取反后再加1,得-10的补码10的表示法,正数的补码等于它的原码-1092整型变量的分类
基本型:以int表示短整型:以shortint或short表示1.类型长整型:以longint或long
表示(123l、123L)无符号基本型(unsignedint)无符号型无符号短整型(unsignedshort)无符号长整型(unsignedlong)(-32768~32767)一个无符号整型变量中可以存放的正数的范围比一般整型变量中正数的范围扩大一倍。inta;/*变量a的数值范围:-32768~32767*/unsignedintb;/*变量b的数值范围:0~65535*/1011整型变量的字长short型∶字长16位(2个字节)。long型∶字长32位(4个字节)。int型∶随编译程序而定(可以是2个字节,也可以是4个字节)C要求long型数据长度不短于int型,short型不长于int型。(short<=int<=long)long型可以得到大范围的数据,但同时会降低运算速度,因此除非不得已,不要随便使用long型。12整型数据的溢出:main(){inta,b;a=32767;b=a+1;printf(“”%d,%d”,a,b);运行结果:32767,-32768改进:将变量a和b改成long型,并按%ld格式输出。13整型常量数据的数据范围请看P43表。注意:1、在一个整数常量后面加一个字母l或L,则认为是long型常量。2、在一个整数常量后面加一个字母u或U,则认为是unsignedint型常量。143.4实型数据3.4.1实型常量表示形式有如下两种:
十进制数形式:由数字和小数点及正负号组成。
(注意:必须有小数点)
例如:23.678、.678、23.、123.0
指数形式:由数字、小数点、字母e或E及正负号组成。
(注:e或E之前必须有数字,且后指数必须为整数)例如:3.5E-5、2e3错误:E2、3.6e3.5、.e6、e
15一个实数可以有多种指数表示形式。例如123.456可以表示为123.456e0、12.3456el、1.23456e2、0.123456e3、0.0123456e4、0.00123456e5等。把其中的1.23456e2称为“规范化的指数形式”,即在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。例如2.3478e2、3.0999E5、6.46832e12都属于规范化的指数形式;而12.908e10、0.4578e3、756e0则不属于规范化的指数形式。(一个实数在用指数形式输出时,是按规范化的指数形式输出的)16一个实型数据一般在内存中占4个字节(32位)。实型数据按照指数形式存储。系统把一个实型数据分成小数部分和指数部分,分别存放小数部分采用规范化的指数方式表示。例如:173.4.2实型变量实型变量可分为:
单精度(float型)如:floatx,y;
双精度型(double型)如:doublea,b,c;
长双精度型(longdouble型)如:longdoubled,e;(longdouble不常用,将不再介绍)说明:1.float型变量在内存中占4个字节;double型变量在内存中占8个字节;longdouble占16个字节。2.单精度实数提供7位有效数字;双精度实数提供15~16位有效数字;长双精度实数提供18~19位有效数字。3.一个实型常量不分float和double型,一个实型常量可以赋给一个float型或double型变量,并根据变量的类型截取实型常量中相应的有效位数字。例如:floata;doubleb;a=123456.789e5;b=123456.789;假如a指定为单精度实型变量:floata;a=111111.111;float型变量只能接收7位有效数字,最后两位小数不起作用。将a改为double型,则能全部接收上述9位数字并存储在变量a中。
18main(){floata,c;doubleb;a=123456.789e5;b=123456789111111.789;c=a+20;printf(“a=%f,b=%f,c=%f\n”,a,b,c);}输出结果:a=12345678848.000000,b=123456789111111.781000,c=12345678848.000000(避免将一个很大的数与一个很小的数相加,,以免出现舍入误差)193.5字符型数据3.5.1字符常量1.字符常量:用单引号括起来的一个字符。
例如:‘a’‘A’‘$’‘!’
注:‘a’与‘A’是的字符常量不同2.转义字符:以一个‘\’开头的字符序列。将反斜杠(\)后面的字符转换成另外的意义。如’\n’中的“n”不代表字母n而作为“换行”符。
例如:‘\n’换行‘\t’横向跳格(水平制表)‘\b’退格‘\v’竖向跳格(垂直制表)‘\r’回车‘\f’走纸换页‘\a’报警‘\0’空字符
20说明:1、“\ddd”与“\xhh”分别表示用八进制数或十六进制数表示一个字符。
例:‘\101’代表ASCII码(十进制)为65的字符‘A’.
系统中所有字符都有ASCII值(见374页)ASCII:美国信息交换标准码AmericanStandardCodeforInformationInterchange。2、由于\
’
”在C语言中都有了特殊的意义,故要想在字符串中使用它们,须在其前面再加上一个反斜线。例如:\\
反斜线\’
单引号
\”
双引号3、除了前面介绍的特殊转义字符外,‘\字母’代表字母本身。如‘\c’代表字母c。21判断下列字符串的长度:“\\\’\054”“\x56\”\\\c\ta”
“\\\n\t\bab”
22233.5.2字符变量定义形式:char
标识符1,标识符2,…,标识符n例如:charc1,c2,c3,ch;c1=‘a’;c2=‘b’;c3=‘c’;ch=‘d’;说明:1、字符变量在内存中占一个字节。2、在内存中,是把字符对应的ASCII码值放到存储单元中.3、字符型数据与整型数据之间可以通用.624main(){charc1,c2;c1=97;c2=98;printf(“%c%c\n”,c1,c2);printf(“%d%d\n”,c1,c2);}输出结果:ab98但是应注意字符数据只占一个字节,它只能存放0—255范围内的整数。main(){inti;charc;i=‘a’;c=97;printf(“%c,%d\n”,c,c);printf(“%c,%d\n”,i,i);}输出结果:a,97a,97253.5.4字符串常量1.定义:括在一对双引号之内的字符序列或转义字符序列称为字符串常量。例如:“Howareyou!”“a”“*abc\n\t”2.存储:字符串中的字符依次存储在内存中一块连续的区域内,并且把空操作字符‘\0’自动附加到字符串的尾部作为字符串的结束标志。故字符个数为n的字符串在内存中应占n+1个字节。例:c=“china”
china\026‘b’与“b”是否相同?'b'是字符常量,“b"是字符串常量273.6变量赋初值1.初始化:在定义变量的同时为变量赋初值2.形式:类型标识符变量名=常量或常量表达式
例如:
intx=10;charch=‘a’;变量赋初值允许使用符号常量
例如:
#definePI3.1415926…...floatx=PI;…...可对被定义的变量的一部分赋初值
例如:
inta,b,c=1,d=2;floatr=2,l,s;可对几个变量赋以同一个初值
例如:
inta=6,b=6,c=6;而不能写成:inta=b=c=6;28注意:初始化不是在编译阶段完成的,而是在程序运行时执行本函数时赋予初值的,相当于有一个赋值语句。例如:inta=3;相当于:inta;/*指定a为整型变量*/a=3;/*赋值浯句,将3赋给a*/又如inta,b,c=5相当于:inta,b,c;/*指定a,b、c为整型变量*/c=5;/*将5赋给c*/293.7各类数值型数据间的混合运算
一、运算过程:
先自动转换成同类数据,再进行运算。
二、转换规则:
低字长类型转换成高字长类型。double←float↑long↑unsigned↑int←char,short①向左的横向箭头表示即使在同一种数据类型间进行运算时也要进行转换。用于提高精度。②向上纵向箭头表示当运算对象类型不同时的转换方向。30例:若有:inti;floatf;doubled;longe;
试判断表达式10+‘a’+i*f-d/e的类型intunsignedintlongintunsignedlongintdoubleshort,charfloatdouble型31
C语言使用的基本表达式有:⑴赋值表达式,如:a=3⑵算数表达式,如:3+4*2⑶关系表达式,如:3>2⑷逻辑表达式,如:3>5&&a>=b⑸条件表达式,如:a>b?a:b⑹逗号表达式,如:a=3,b=4,c=5323.8算术运算符和算术表达式1、基本的算术运算符:
+-*/%说明:(1)上述运算符均为双目运算符(即有两个操作数)(2)在“/”运算中,若操作数均为整数,则执行整除运算,舍去小数部分。例如:5/3=1(3)“%”要求两侧均为整数,“%”运算不能用于float和double型数据例如:5%3=2332、算术表达式和运算符的优先级与结合性(1)算术表达式:用算术运算符和括号将操作数连接起来的,符合C语法规则的式子。运算对象包括常量、变量、函数等。例如:‘a’+‘b’+a*b/c+2.8(2)优先级:*/%高于+-(3)结合性:“自左至右的结合方向”例如:a-b+c3、强制类型转换作用:可以利用强制类型转换运算符将一个表达式转换成所需类型。
形式:(类型名)(表达式)例如:(double)(a+b)34说明:(1)表达式应用括号括起例如:(int)(x+y);如果写成(int)x+y则只将x转换成整型,然后与y相加。若要得到x/2的小数部分,应写为:(float)x/2还是(float)(x/2)(2)在强制类型转换时,得到一个所需类型的中间变量,原来变量类型未发生变化。例如:floatx=8.6;inty;y=(int)x;35请看下面程序段:
main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}输出结果:x=3.600000,i=3注意:强制类型转换后并不改变原来变量的类型36从上可知,有两种类型转换,一种是在运算时不必用户指定,系统自动进行的类型转换,如3+6.5。第二种是强制类型转换。当自动类型转换不能实现目的时,可以用强制类型转换。如“%”运算符要求其两侧均为整型量,若x为float型,则“x%3”不合法,必须用:“(int)x%3”。从附录Ⅱ可以查到,强制类型转换运算优先于%运算,因此先进行(int)x的运算,得到一个整型的中间变量,然后再对3求模。此外,在函数调用时,有时为了使实参与形参类型一致,可以用强制类型转换运算符得到一个所需类型的参数。374、自增、自减运算符(++、--)作用:使变量的值增1或减1,类似于i=i+1。如:++i,--i(使用之前,先使i的值加(减)1)i++,i--(使用之后,使i的值加(减)1)++i先执行i=i+1,再使用i的值i++先使用i的值,再执行i=i+1
举例:intj,i=3;j=++i;/*j的值为4,i为4*/j=i++;/*j的值为4,然后i的值变为5*/j=-i++;/*j的值-5,然后i的值变为6*/38说明:(1)为单目运算符(2)++、--只能用于变量,而不能用于常量或表达式。例如:10++,(x+y)++,++’a’,b++中合法的为:(3)自增、自减运算符为右结合性(即自右至左)。例如:-a++-(a++) 错误的结合(-a)++例如inta=3。那么printf(“%d”,-a++)输出什么?-34、自增、自减运算符(++、--)39练习题设a=2,则执行语句k=++a+a++后的k值为多少?(k=6,a=4)a=(i++)+(i++)+(i++)i的初始值为1? a=3,i=4printf(“%d,%d”,i,i++)i的初始值为1? 2,1请避免这种写法403.9赋值运算符和赋值表达式1、赋值运算符(=)形式:变量名=常量或表达式作用:将右边常量或表达式的值赋给左边的变量例如:b=c+d要求:如果表达式类型与左边的变量的类型不匹配,自动进行类型转换。
412、类型转换的原则(1)将实型数据赋给整型变量时,舍弃实数的小数部分如:若a为int型变量,执行a=3.56后,则a的值3
(2)将整型数据赋给实型数据时,数值不变,但以浮点形式存储到变量中。如:若b为float型变量,执行b=35后,则b为35.00000
若d为double型变量,执行d=23后,则d为 23.00000000000000
(3)整型数据赋给字符型变量时,只将低8位原封不动地送到字符变量中(即截断)。001000010000000100100001如:i=289c=33c=‘!’42(4)字符型数据赋给整型变量时,将字符数据(8位)放到整型变量低8位中。高8位则需要依据“符号扩展”来决定。例1(无符号字符数据赋给整型变量)unsignedcharc;inti;c=254;i=c;11111110c=254i=254
0000000011111110例2(TurboC系统把字符处理为带符号的)charc;inti;c=254;i=c;/*变量c以整数形式输出为-2*/11111110c=254i=-2
11111111
1111111043(5)double赋给float时,截取前面7位有效数字。但应注意数值范围不能溢出。如:floatf;doubled=123.456789e100;’f=d;就会出现溢出。将一个float型数据赋给double变量时,数值不变,有效位数扩展到16位,在内存中以64位(bit)存储。
(6)将带符号的整型数据(int型)赋给long型变量时,要进行符号扩展,将整型数的16位送到long型低16位中,如果int型数据为正值(符号位为0),则long型变量的高16位补0;如果int型变量为负值(符号位为1),则long型变量的高16位补1,以保持数值不改变。若将一个long型数据赋给一个int型变量,只将long型数据中低16位原封不动地送到整型变量(即截断)。
44(7)将unsignedint型数据赋给longint型变量时,不存在符号扩展问题,只需将高位补0即可。将一个unsigned类型数据赋给一个占字节数相同的整型变量(例如:unsignedint=>int,unsignedlong=>long,unsignedshort=>short),将unsigned型变量的内容原样送到非unsigned型变量中,但如果数据范围超过相应整型的范围,则会出现数据错误。
(8)将非unsigned型数据赋给长度相同的unsigned型变量,也是原样照赋(连原有的符号位也作为数值一起传送)。45例3:(带符号int型数据赋给long型变量)inta;longb;a=254;b=a;0000000000000000
0000000011111110a=2540000000011111110b=254例4:(带符号int型数据赋给long型变量)inta;longb;a=-2;b=a;1111111111111111
1111111111111110a=-2
1111111111111110b=-2
46例5:(无符号int型数据赋给long型变量)unsignedinta;longb;a=65534;b=a;00000000000000001111111111111110a=655341111111111111110b=65534
例6:(有符号数据赋给无符号变量)inta;unsignedintb;a=-2;b=a;1111111111111110a=-21111111111111110b=65534473、复合赋值运算符复合赋值运算符:在赋值符“=”之前加上其它运算符凡是二元(二目)运算符,都可以与赋值符一起组合成复合赋值符。所以C语言共有10种复合赋值运算符
+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=48例如:a+=3a=a+3x*=y+3x=x*(y+3)4、赋值表达式定义:由赋值运算符将一个变量和一个表达式连接起来的式子。形式:
变量=表达式说明:赋值表达式的值为被赋值的变量的值。例如:a=b=c=6a=(b=4)+(c=6)a=(b=4)*(c=6)49练习:写出顺序执行下列表达式运算后的x值:1.x=a=b=102.x=25%(c=3)
X=10X=1赋值表达式中可以包含复合赋值运算符例如:若a=12,计算表达式a+=a-=a*a运算后a的值
第一步:a-=a*aa=a-a*a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年四川省华蓥市高二生物下册期末考试考试卷往年题考附答案
- 2026年贵州省兴义市高二生物下册期末考试模拟卷及1套完整答案
- 2025年江苏省启东市高二生物下册期末考试测试卷带答案(基础题)
- 2025年江苏省靖江市高二生物下册期末考试检测卷附答案(达标题)
- 2025年黑龙江省尚志市高二生物下册期末考试模拟卷及参考答案(预热题)
- 2026年山东省滕州市高二生物下册期末考试模拟卷【名校卷】附答案
- 2026年幼儿园大班有趣的轮胎说课稿含课件
- 2026年幼儿园防踩踏事件安全小班
- 企业界面协调方案
- 2026年浙江省建德市高二生物下册期末考试模拟卷含完整答案(易错题)
- JCT 2126.1-2023 水泥制品工艺技术规程 第1部分:混凝土和钢筋混凝土排水管 (正式版)
- JBT 1306-2024 电动单梁起重机(正式版)
- TCALC 003-2023 手术室患者人文关怀管理规范
- 国家开放大学《城市管理学》期末复习题参考答案
- 电缆载流量计算书
- 2022年揭西县中小学教师招聘考试试卷及答案
- 滨州邹平市结合事业单位招聘征集本科及以上毕业生入伍考试真题2022
- 校园安全百日攻坚行动实施方案
- GB/T 12060.5-2011声系统设备第5部分:扬声器主要性能测试方法
- GB 12476.1-2000可燃性粉尘环境用电气设备第1部分:用外壳和限制表面温度保护的电气设备第1节电气设备的技术要求
- 泌尿系统疾病ct诊断 课件
评论
0/150
提交评论