版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章数据类型、运算符与表达式铡断深狰累殃词苍颖史良惑酱篡喝阁香访该碾琢病侥湖台壶论誊袒等叹省第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式第2章数据类型、运算符铡断深狰累殃词苍颖史良惑酱篡喝阁香访1程序是解决某种问题的一组指令的有序集合。著名计算机科学家沃思(NikiklausWirth)提出一个公式:程序=数据结构+算法
学习的意义
程序是什么?对数据的描述。在C语言中,体现为数据类型的描述!对数据处理的描述。是为解决一个问题而采取的方法和步骤,是程序的灵魂!
<<数据结构>><<算法设计与分析>>结论:学好C语言首先就必须十分了解C语言的数据类型、运算符与表达式。利啄光窖黍骇辜劈脂颖逗腊子渗俯赤甩悄框停玩回拒郎捅秘佬爷蓬酷睬颊第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式程序是解决某种问题的一组指令的有序集合。学习的意义2C数据类型基本类型构造类型指针类型空类型void字符类型char枚举类型enum整数型浮点型单精度型float双精度型double数组结构体struct共用体union短整型short长整型long整型int本章所介绍的数据类型献勘贪签矿燎钻厦兜筏认翰干阎搂掷龄想憾套桥冈彩朵堡娘负战匠只饥染第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式C基本类型构造类型指针类型空类型void字符类型char枚举32.1常量与变量1.标识符定义:用来标识变量、常量、函数等的字符序列组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线C语言的关键字不能用作变量名大小写敏感长度:有效长度为32个字符。随系统而异,但至少前8个字符有效命名原则:变量名和函数名中的英文字母一般用小写,以增加可读性
见名知意不宜混淆如l与I,o与0
在TC2.0及BC3.1中,变量名(标识符)的有效长度为1~32个字符,缺省值为32,但在VC中其长度可达到255例:判断下列标识符号合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123M.D.John3days#33char$123a>b
.字符非法
数字3不可作首字符
#字符非法
char是关键字
>字符非法
$不可作首字符冤趾炳殆蜜炼汇磋含派怒幢涡娄菏贺熙升卖耍宰截唁佰炒按貌伍蛛靡纽衰第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式2.1常量与变量在TC2.0及BC3.1中,变量名42.常量定义:程序运行时其值不能改变的量(即常数)
常量的分类
:直接常量(值常量)
整型常量:
10、15、-10、-30
实型常量:
12.5、30.0、-1.5
字符常量:
‘A’、‘b’、‘c’
字符串常量:
“sum”、“A”、“123”符号常量
用标识符来代表常量。 其定义格式为:
#define符号常量常量
#defineNUM20#definePI3.1415926
#include<stdio.h>#definePRICE30voidmain(){intnum,total;num=10;total=num*PRICE;printf("total=%d",total);}
运行结果:total=300
行尾不能有分号define前面一定要有#符号常量名最好使用大写符号常量名最好有意义
抉履箔幻列柠弦溅灭芝隶醋刁搬堪抿蛹裹狠弃暂吸遂兹潦扁耻瓤万共蹿赘第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式2.常量#define符号常量常量53.变量定义:程序运行时其值可以被改变的量
变量的两要素:变量名、变量值变量的定义格式:变量的初始化:定义时赋初始值变量的使用:先定义,后赋值变量定义位置:一般放在函数开头[存储类型]数据类型变量名1[,变量名2,…,变量名n];intx,y,z;floatradius,length,area;
charch;决定分配字节数和数的表示范围合法标识符例:inta=2,b,c=4;floatdata=3.67;charch=‘A’;intx=1,y=1,z=1;
intx=y=z=1;例1:intstudent;stadent=19;//Undefinedsymbol‘statent’infunctionmain
例2:floata,b,c;c=a%b;//Illegaluseoffloatingpointinfunctionmain
voidmain(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(“data=%f\n”,data);}变量定义可执行语句voidmain(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(“data=%f\n”,data);}拜蚕济巷唬店寒岳灾国挫瞎术古滥呀市证屯胆纱捆酿操嘱辉浚档鸯哑登瘤第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式[存储类型]数据类型变量名1[,变量名2,…,变量名n63.3整型数据1.整型常量
三种表示形式十进制整数:由数字0~9和正负号表示
.
如:123,-456,0八进制整数:由数字0开头,后跟数字0~7表示.如:0123,011十六进制整数:由0x或0X开头,后跟0~9,a~f,A~F表示.如0x123,0Xff定义整数的符号常量
#defineNUM120//十进制数20#defineNUM2020//八进制数(十进制16)#defineNUM30x2a//十六进制数(十进制42)思考题:下列整型常量哪些是非法的?012,oX7A,00,078,0x5Ac,-0xFFFF,0034,7B。首字符不能是字母o八进制数中不能有数字8
十进制数中不能有字母B
奉磋夫巧怜槛挎晤臆老郴哲炬辐涉辗蜗亦突扩捡炊痰蝎薄判柞婿游克诉厢第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式3.3整型数据1.整型常量三种表示形式十进制72.整型变量整型变量的定义int变量名[,变量名2,……,变量名n];int必须小写至少一个空格必须为合法的标识符以逗号,分隔以分号;结尾定义时可以赋初值,方法:在变量名后面增加“=数值”
例:
inta;intx,y,z;intm=2,y=-3;整型变量的分类基本整型:int控制变量是否有符号:signed(有符号)和unsigned(无符号)控制整型变量的值域范围:short(短)和long(长)。
有符号基本整型(int或signedint):
最高位为符号位,其它的为数据位无符号基本型(unsinged或unsingedint):
都是数据位不管是由符号还是无符号,整型占一个机器字大小的内存单元。TC或BC3.1下,整型变量占2个字节(16位)的内存单元,所以对于有符号基本整型,其表示范围为(-215~215-1),对于无符号基本整型,其表示范围为(0~216-1);VC6.0下,变量占4个字节(32位)的内存单元。
如果定义变量时,不指定signed,也不指定unsigned,则默认为signed(有符号)
抚遏药持咐范躲援渊榆肥侯塌细狱垒成稗缠国札晦呜纬聘刨袭描欣各捡史第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式2.整型变量整型变量的定义int变量名[,变量名8inta=2;unsignedintb=2;在内存中存储的形式为:inta=-2;//定义一个无符号整型变量a,并赋初值-2unsignedb=-2;在内存中的存储形式为:00000000000000101111111111111110对于a而言,它的最高位是符号位,所以计算机在使用a时,先对a的最高位进行判断,若最高位为1,表明该数为负数,计算机会对后面的15位进行取反加1操作,得到a的绝对值;对于b而言,它的16位均为数据位,所以b的值其实等于65534。结论:对于有符号数也好还是无符号数也好,其实在计算机内存中表示是不加区分的,都是以其补码形式表示,只是我们怎样看待最高二进制位的问题,如果把最高位当成符号位看待,则为有符号数,如果把最高位当成数据位看待,则变为无符号数。栽跺烁除养痛顿波纷溯另银崭彦炭搔讥偷粒木对勿兰鹊涵湾钉歇说仙懒貉第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式inta=2;inta=-2;9有符号短整型(shortint或short)
shortinta=2;//定义一个有符号短整型变量a,并赋初值2
或shorta=2;占用的内存单元为2个字节,无论是TC、BC,还是VC。无符号短整型(unsignedshortint或unsignedshort)
unsignedshortinta=2;//定义一个无符号短整型变量a,并赋初值2
或unsignedshorta=2;占用的内存单元字节数同short类型。在TC2.0和BC3.1下,unsignedshort类型与unsignedint类型是等价的
。秽营茵砂陈迈薄妮邵伦趋踊管诺恭灶焊奇啃旧弥身砌侧睡想俞悦羡叶忌浴第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式有符号短整型(shortint或short)sho10有符号长整型(longint或long)
longinta=234567;//定义一个有符号长整型变量a,并赋初值234567
或longa=234567;占用的内存单元为4个字节,无论是TC、BC,还是VC。无符号长整型(unsignedlongint或unsignedlong)
unsignedlonginta=2;//定义一个无符号长整型变量a,并赋初值2
或unsignedlonga=2;占用的内存单元字节数同long类型。在VC中long与int类型基本相同,均占四个字节的内存单元;但在TC或BC中,long类型与int类型只是所占字节不同外(long占4字节,int占2字节),其它数据处理方法是一样的。
螺入陵弓氦常骇汤起末猾兆汲株森处奢诀还棍赞硼酋充砸释燥搪踏赂烟矛第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式有符号长整型(longint或long)long113.浮点型数据
浮点型常量(实数或浮点数)
十进制小数形式:由数字0~9和小数点组成
.
如:0.0,5.6,-5.指数形式:由十进制数,加阶码标志e或E以及阶码(只能为整数,可以带符号)组成.
其一般形式为:aEn其中:a为十进制数,n为十进制整数,都不可缺少。其可表示为a×10n合法的实数表示:2.1E5表示2.1×105,3.7E-2表示3.7×10-2。
非法的实数表示:345(无小数点)
,E7(阶码标志E之前无数字)
,-5(无阶码标志)
,50.-E3(负号位置不对)
实型变量
单精度实型(float)
floatf=3.14,g;
这种定义的变量在内存中占4个字节(32位)的存储单元。双精度实型(double)
doublex,y;这种定义的变量在内存中占8个字节(64位)的存储单元。
长双精度实型(longdouble)
longdoublex,y;在TC或BC下,这种定义的变量在内存中占10个字节(80位)的存储单元;在VC下则占8个字节(64位)。
栅寇屉苯融粉譬灼炊椰密鹅浴父淆乘啡哉奶矮寐壹湿馅饱地敲山幼蹄齐嫩第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式3.浮点型数据浮点型常量(实数或浮点数)十进制126.字符型数据和字符串常量
字符型常量
定义:用单引号括起来的单个普通字符或转义字符.
如‘a’‘A’‘?’‘\n’‘\101’字符常量的值:该字符的ASCII码值如‘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腻廉渡暂歌涩悟淀岗哥严翼羡锁徒赔逊硒受鳞敌绢脱拧刘名氰希臆驹忘憎第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式6.字符型数据和字符串常量字符型常量定义:13字符型变量字符型数据类型符是char(字符character)在内存中占1个字节(8位)字符变量存放字符ASCII码char与int数据间可进行算术运算存在有符号和无符号之分。默认情况下为有符号例:
charch;unsignedcharC='B';例:
a=‘D’;//a=68;
x=‘A’+5;//x=65+5;
s=‘!’+‘G’//s=33+71;
给灰炒敦纷攘矗彻赤蔑凶川络并呼盈撬入埂远王晓妒燥偏搂莽窜写擦诞技第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式字符型变量例:例:给灰炒敦纷攘矗彻赤蔑凶川络并呼盈撬14字符串常量
定义:用双引号(“”)括起来的字符序列
存储:每个字符串尾自动加一个‘\0’作为字符串结束标志0x410x41\0例‘A’“A”例:charch;ch=“A”;例:charch;ch=‘A’;例:“hello”,“123”,"ab1.56"字符常量与字符串常量不同趟瓦阑报魏橱蝎寓逊炉理擞烬注罩池窍烩朔篮材即植雁互孽税阴未际饥党第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式字符串常量存储:每个字符串尾自动加一个‘\0’作为153.4C语言的运算符与表达式
变量用来存放数据,运算符则用来处理数据。用运算符将变量和常量连接起来的符合C语法规则的式子被称为表达式。运算符的分类:单目运算符:只带一个操作数的运算符。如:++、--运算符。双目运算符:带两个操作数的运算符。如:+、-运算符。三目运算符:带三个操作数的运算符。如:?运算符。
学习运算符时应注意:
运算符的功能:该运算符主要用于做什么运算。与运算量关系:要求运算量的个数及运算量的类型。运算符的优先级:表达式中包含多个不同运算符时运算符运算的先后次序。运算符的结合性:同级别运算符的运算顺序(指左结合性还是右结合性)。运算结果的类型:表达式运算后最终所得到的值的类型。C运算符算术运算符:(+-*/%++--)关系运算符:(<<===>>=!=)逻辑运算符:((!&&||)位运算符:(<<>>)赋值运算符:(=及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(*&)求字节数:(sizeof)强制类型转换:(类型)分量运算符:(.->)下标运算符:([])其它:(()-)沸骄械假谐长奈瓢岛汪膊匀扰瘴渣芝躬疤蜒缨亡澄诧考莎护还叠趋松伙损第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式3.4C语言的运算符与表达式变量用来存放数161.赋值运算符、赋值表达式
赋值运算符(“=”,双目运算符)
一般形式:变量=常量或变量或表达式功能:将右边常量或变量或表达式的值赋给左边变量
例如:intx,y,z;x=20;y=x;z=x+y;赋值表达式
定义:由赋值运算符或复合赋值运算符(后面即将介绍),将一个变量和一个表达式连接起来的表达式,称为赋值表达式。一般格式:变量(复合)赋值运算符表达式赋值表达式的值:被赋值变量的值。例如:“a=5”这个赋值表达式,变量a的值“5”就是它的值。
工衅陋架哭懂瓷疥拜谚索吸郑银阉硝付工炳言堰绍逮影砌赁左毒伙辽古轩第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式1.赋值运算符、赋值表达式赋值运算符(“=”,双目运算符17赋值语句
例如:x=8;a=b=c=5;
定义:赋值表达式在其后面加分号就构成了赋值语句。
赋值运算符及赋值表达式的使用
多个变量连续赋值例如:a=b=c=10;
a=(b=(c=10));
结果:a、b、c的值都为10赋值表达式的嵌套例如:a=(b=2)+(c=3)
(a=(b=2)+(c=3))
结果:b为2,c为3,a为b+c即5注意:
赋值语句“=”左边必须是变量名或对应某特定内存单元的表达式(后面的章节会遇到这样的表达式),不能是常量或其它表达式。例如:30=a;b+2=5;都是错误的。
赋值语句中的“=”表示赋值,不是代数中相等的意思。要表示相等的意思则应用关系运算符“==”表示,二者切勿混淆!庸阵方巍屑闸含饮点诀艾咏缠纬破际毅勿病赘度砚篆悲滞灰濒早聚蟹耪虑第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式赋值语句例如:x=8;a=b=c182.强制类型转换符
C语言的数据类型是可以相互转换的。转换的方法有两种:一种是自动转换,一种是强制转换。自动转换
例如:inta=2.5;则a的值将是2,而不是2.5。这种自动改变等号右边表达式值的数据类型的操作称为数据类型的自动转换。
首先将等号右边的表达式的值转换成“=”左边的数据类型。然后再赋值给等号左边的变量。
(1)短长度的数据类型→长长度的数据类型
方法:直接将无符号短长度的数据类型的数据作为长长度的数据类型数据的低位部分,长长度的数据类型数据的高位部分补零。
无符号短长度的数据类型→无符号或有符号长长度的数据类型xx………x无符号短长度的数据类型长长度的数据类型xx………x00.....0.....高位部分补0例如:unsignedcharch=0xfc;unsignedinta=0xff00;//假设int数据为16位intb;unsignedlongu;
b=ch;
//b的值将是0x00fcu=a;
//u的值将是0x0000ff00滋墩劲赢泰钨怀槛淤恭搓傈稀檬锋特稚绦姿销钱轩纯掳减均脚怀膊温潘铸第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式2.强制类型转换符C语言的数据类型是可以相互转换192.强制类型转换符
自动转换
(1)短长度的数据类型→长长度的数据类型
方法:直接将有符号短长度的数据类型的数据作为长长度的数据类型数据的低位部分,然后将低位部分的最高位(即有符号短长度数据的符号位)向长长度的数据类型数据的高位部分扩展。
有符号短长度的数据类型→无符号或有符号长长度的数据类型zx………x有符号短长度的数据类型长长度的数据类型zx………xz符号位向高位部分扩展………zz符号位例如:charch=2;inta=-2;intb;unsignedlongu;b=ch;
//b的值将是2
u=a;
//u的值将是0xfffffffe颈神渺涨谢命资姨趴导筷鹤笛领淌拉奉迄粟搜柱丹涌岗骄谐歼秦驭帖经寺第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式2.强制类型转换符自动转换(1)短长度的数据类型202.强制类型转换符
自动转换
(2)长长度的数据类型→短长度的数据类型
方法:直接截取长长度的数据类型数据的低位部分(长度为短长度的数据类型的长度)作为短长度数据类型的数据。
xx………x短长度的数据类型长长度的数据类型yy………yxx………x例如:inta=-32768;//假设int数据为16位unsignedlongb=0xffffaa00;charch;intc;ch=a;
//ch的值将是0c=b;
//c的值将是0xaa00(3)长度相同的数据类型转换
方法:数据按照原样复制即可。
例如:inta=0xff00;
unsignedintb=a;
//b的值将是0xff00衣习遇哮哨绞啥隧碱闷啥幸过臂愉碉龟酚钮糖朋沏蒋粥况试山蛙殴睁爷兵第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式2.强制类型转换符自动转换(2)长长度的数据类型212.强制类型转换符
强制转换
强制类型转换是通过类型转换运算来实现的。其一般形式为:
(类型说明符)(表达式)
功能:把表达式的运算结果强制转换成类型说明符所表示的类型。其中,(类型说明符)是强制类型转换符,它的优先级比较高。例:floatx=3.5,y=2.1,z;inta;a=(int)(x+y);//结果为5z=(int)x+y;//结果为5.100000z=(double)(3/2);//结果为1.000000a=(int)3.6;//结果为3精度损失问题较高类型向较低类型转换时可能发生注意:在使用强制转换时应注意以下问题:类型说明符和表达式都必须加括号(单个变量可以不加括号)。例如:把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。例如,(double)a只是将变量a的值转换成一个double型的中间量,其数据类型并未转换成double型。孪否杯焊揣溢霜阀甭过操氟庇盎错拍眼桂蜘筛汕磷笼稚柴友鸳因挤行谍导第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式2.强制类型转换符强制转换强制类型转换是通过22基本算术运算符:
+-*/%结合方向:从左向右优先级:----->*/%----->+-
(2)(3)(4)
说明:
“-”可为单目运算符时,右结合性两整数相除,结果为整数%要求两侧均为整型数据例:
5/2=-5/2.0=例:5%2=-5%2=1%10=
5%1=5.5%23.算术运算符、算术表达式
2-2.51-110()南豫衣殆威捷顿摩侵腹眨麻文配滑崔划铲馋沏网霄痰蹄嚏罩误鞠爱晃衅寿第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式基本算术运算符:+-*/%例:523表达式和算术表达式3.算术运算符、算术表达式
表达式:用运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合C语言语法规则的式子。算术表达式:表达式中的运算符都是算术运算符的表达式。
运算符优先级(到目前为止)例:
3+5*8、(x+y)/2-1等类型强制转换运算符的优先级
算术运算符的优先级赋值运算符的优先级逾劲抛总孜摹拐灿曙紫吩悠现曾醛恿罕埃砚懂喂乒久固崇旋拉懒悬裹师馋第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式表达式和算术表达式3.算术运算符、算术表达式24自增、自减运算符++--
作用:使变量值加1或减1种类:前置++i,--i(先执行i=i+1或i=i-1,再使用i值)后置i++,i--(先使用i值,再执行i=i+1或i=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=44.自增自减运算符、符号运算符
负号运算符(“-”)
减号(-)既是一个算术运算符,又是一个负号运算符。负号运算符是单目运算符。例如:a=2,那么-a的值就是-2。负号运算符的优先级比较高,与强制类型转换符是同一个级别。劝艇牛它署矽舟比妓羊忽窄吾阁虏勉膏纱刹乍拆颊咎静枕蚀覆摄纲获许耐第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式自增、自减运算符++--例:j=3;k=25自增、自减运算符注意事项++和--运算符只能用于变量,不能用于常量和表达式。因为++和--蕴含着赋值操作。
例如:5++、--(a+b)都是非法的表达式。负号运算符、++、--和强制类型转换运算符的优先级相同,当这些运算符连用时,按照从右向左的顺序计算,即具有右结合性。两个+和-之间不能有空格。在表达式中,连续使同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。
例如:++i++是非法的。自增、自减运算,常用于循环语句中,使循环控制变变量加(或减)-1,以及指针变量中,使指针指向下(或上)一个地址。4.自增自减运算符、符号运算符例:intp,i=2,j=3;p=-i++;p=?i=?p=i+++j;p=?i=?j=?p=i+--j;p=?i=?j=?p=i+++--j;p=?i=?j=?p=i+++i++;p=?i=?p=++i+(++i);p=?i=?-235334224324484睛徒钻檄抨腥桥谓激蛰藕芒冰祝莹悍金方通斧毖松康达瑶砰因斋棋亥宴顾第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式自增、自减运算符注意事项4.自增自减运算符、符号运算符例265.算术运算符中数据类型转换规则
低高doublefloatlongunsignedintchar,shortlongdouble说明:必定的转换运算对象类型不同时转换例:
charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledouble10+‘a’+i*f-d/l例:inti;floatf;doubled;longl;intintdoubledoubledoubledoubledoubledouble#include<stdio.h>voidmain(){floata,b,c;a=7/2;//计算7/2得int型值3,因此a的值为3.0b=7/2*1.0;//计算7/2得int型值3,再与1.0相乘,因此b的值为3.0c=1.0*7/2;//先计算1.0*7得double型的结果7.0,然后再计算7.0/2,因此c的值是3.5printf("a=%f,b=%f,c=%f",a,b,c);}a=3.000000,b=3.000000,c=3.500000闹崇杆贫扬龋铅身询孵盼就鸳汀携夯憾皂德膳谰栅瑚判呈羔坡预焚循讨类第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式5.算术运算符中数据类型转换规则低高doublefloa276.位运算符、位运算表达式
位运算符:按位与(&)、按位或(|)、按位取反(~)、按位异或(^)、左移(<<)、右移(>>)六种。左移(<<)
实现将某变量所对应的二进制数往左移位,溢出的最高位被丢掉,空出的低位用零填补。其一般格式为:
返回整型值的表达式<<返回整型值的表达式例:
inta=3;
a<<2:将a所对应的二进制数左移两位,该表达式的值为12。
2<<a:将2所对应的二进制数左移三位(a的值),该表达式的值为16。
右移(>>)右移运算实现将某变量所对应的二进制数往右移位,溢出的最低位被丢掉,如果变量是无符号数,空出的高位用零填补,如果变量是有符号数,空出的高位用原来的符号位填补(即负数填1,正数填0)。其一般格式为:
返回整型值的表达式>>返回整型值的表达式例:inta=8;a>>2:将a所对应的二进制数右移两位,该表达式的值为2。
例:将short类型数据的高、低位字节互换#include<stdio.h>
voidmain(){shorta=0xf245,b,c;b=a<<8;//将a的低8位移到高8位赋值给b,b的值为0x4500c=a>>8;//将a的高8位移到低8位赋值给c,c的值为0xfff2c=c&0x00ff;//将c的高8位清0后赋值给c,c的值为0x00f2a=b+c;//将b和c的值相加赋值给a,a的值为0x45f2printf("a=%x",a);}a=0x45f2
位运算之间的优先级~→<<、>>→&→^→|瓶瘟俄颂撵玫评庚哦悦肇迢俭稍南损庸馒侗净午剁意民抉俏师忘瑞被翻郑第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式6.位运算符、位运算表达式位运算符:按位与(&)287.逗号运算符、逗号表达式
位运算符:,
逗号表达式:用逗号连接起来的表达式。其一般形式为:表达式1,表达式2,……,表达式k
优先级:优先级最低。
结合性:左结合性。即逗号表达式的求值顺序是从左向右依此计算用逗号分隔的各表达式的值。逗号表达式的值:最后一个表达式的值就是整个逗号表达式的值。
用途:常用于循环for语句中。例如:a+3,b=4,b++
例:a=3*5,a*4a=3*5,a*4,a+5例:
x=(a=3,6*3)x=a=3,6*a例:a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);//a=15,表达式值60//a=15,表达式值20//赋值表达式,表达式值18,x=18//逗号表达式,表达式值18,x=3//1,2,3//3,2,3例:#include<stdio.h>voidmain(){intx,y=7;floatz=4;x=(y=y+6,y/z);printf("x=%d\n",x);}运行结果:x=3弟郊壹衙榆浅咙臂块掇猿凤畔骄掸耻檄确静专贝牵掠栖星尤纸带料文盅鬼第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式7.逗号运算符、逗号表达式位运算符:,表达式1,298.sizeof运算符、复合运算符
sizeof运算符
功能:获取变量和数据类型所占内存大小(字节数)
格式:sizeof表达式sizeof(数据类型名或表达式)例:
sizeof(int)其值为2(在TC2.0或BC3.1下)
其值为4(在VC6.0下)sizeof(long)其值是4
sizeof10L其值也是4
unsignedlonga=2;sizeof(a)其值也是4
复合赋值运算符
种类:+=-=*=/=%=<<=>>=&=^=|=含义:
exp1op=exp2
exp1=exp1opexp2
定义:将算术运算符、位运算符与赋值运算符组合在一起就构成了复合赋值运算符。复合赋值运算符即包含了算术运算或位运算,又包含了赋值操作。a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3x&=y=3y=3和x&=y例:
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)))披兰届捍烯茹前魁这腻粪讼贬向邻囱诅眯倒弧多沈饲交撮梁跋闰祸哼芭媳第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式8.sizeof运算符、复合运算符sizeof运算符s30C语言编程习惯
(1)一行只放一条语句。(2)养成随时给程序加注释的习惯。(3)程序的书写要有层次感,该缩进的一定要缩进。(4)编写函数时,变量定义部分和函数的执行部分之间增加一空行,或者在程序的执行部分按照完成的功能块增加相应的空行,会增加程序的易读性。(5)为变量起有意义的名字,既可以帮助程序员读懂程序,也可以避免变量的重复乱用,导致程序的逻辑错误。(6)在运算符和赋值符的两边加上一个空格会增加程序的易读性。voidmain(){inti,sum;sum=0;for(i=1;i<=100;i++)if(i%2==0)sum+=i;printf("sum=%d",sum);}voidmain(){inti,sum;sum=0;for(i=1;i<=100;i++)if(i%2==0)sum+=i;printf("sum=%d",sum);}没有层次感层次清晰转添梭亦佬茄表雄狙无佛奈囤付佰族邮幼艘确早研垣型耻枷涩赚确骚受熟第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式C语言编程习惯(1)一行只放一条语句。voidmai31本章小结本章所介绍的主要内容是整型数据、实型数据和字符型数据的常量表示法和变量定义格式,以及可以作用于这些数据类型的运算符。虽然本章的内容比较烦杂,学起来也许比较枯燥,但本章的内容是学好C语言的基础,是每个C语言程序员必须熟练掌握的。现在我们一起来回忆一下本章有哪些内容值得我们特别留意和必须深刻领会的呢?
变量的含义数据在内存中的表示形式不同类型的数据在内存中的表示范围转义字符有符号数与无符号数的区别数据类型的自动转换与强制类型转换各种运算符、运算符的优先级和结合性撵荣苑疹孕蜕座痞乡的枷甸凌兹右羌偿艾玫岂宋乾恐蒂首货媒芒署动合漳第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式本章小结本章所介绍的主要内容是整型数据、实型数据和字32第2章数据类型、运算符与表达式铡断深狰累殃词苍颖史良惑酱篡喝阁香访该碾琢病侥湖台壶论誊袒等叹省第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式第2章数据类型、运算符铡断深狰累殃词苍颖史良惑酱篡喝阁香访33程序是解决某种问题的一组指令的有序集合。著名计算机科学家沃思(NikiklausWirth)提出一个公式:程序=数据结构+算法
学习的意义
程序是什么?对数据的描述。在C语言中,体现为数据类型的描述!对数据处理的描述。是为解决一个问题而采取的方法和步骤,是程序的灵魂!
<<数据结构>><<算法设计与分析>>结论:学好C语言首先就必须十分了解C语言的数据类型、运算符与表达式。利啄光窖黍骇辜劈脂颖逗腊子渗俯赤甩悄框停玩回拒郎捅秘佬爷蓬酷睬颊第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式程序是解决某种问题的一组指令的有序集合。学习的意义34C数据类型基本类型构造类型指针类型空类型void字符类型char枚举类型enum整数型浮点型单精度型float双精度型double数组结构体struct共用体union短整型short长整型long整型int本章所介绍的数据类型献勘贪签矿燎钻厦兜筏认翰干阎搂掷龄想憾套桥冈彩朵堡娘负战匠只饥染第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式C基本类型构造类型指针类型空类型void字符类型char枚举352.1常量与变量1.标识符定义:用来标识变量、常量、函数等的字符序列组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线C语言的关键字不能用作变量名大小写敏感长度:有效长度为32个字符。随系统而异,但至少前8个字符有效命名原则:变量名和函数名中的英文字母一般用小写,以增加可读性
见名知意不宜混淆如l与I,o与0
在TC2.0及BC3.1中,变量名(标识符)的有效长度为1~32个字符,缺省值为32,但在VC中其长度可达到255例:判断下列标识符号合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123M.D.John3days#33char$123a>b
.字符非法
数字3不可作首字符
#字符非法
char是关键字
>字符非法
$不可作首字符冤趾炳殆蜜炼汇磋含派怒幢涡娄菏贺熙升卖耍宰截唁佰炒按貌伍蛛靡纽衰第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式2.1常量与变量在TC2.0及BC3.1中,变量名362.常量定义:程序运行时其值不能改变的量(即常数)
常量的分类
:直接常量(值常量)
整型常量:
10、15、-10、-30
实型常量:
12.5、30.0、-1.5
字符常量:
‘A’、‘b’、‘c’
字符串常量:
“sum”、“A”、“123”符号常量
用标识符来代表常量。 其定义格式为:
#define符号常量常量
#defineNUM20#definePI3.1415926
#include<stdio.h>#definePRICE30voidmain(){intnum,total;num=10;total=num*PRICE;printf("total=%d",total);}
运行结果:total=300
行尾不能有分号define前面一定要有#符号常量名最好使用大写符号常量名最好有意义
抉履箔幻列柠弦溅灭芝隶醋刁搬堪抿蛹裹狠弃暂吸遂兹潦扁耻瓤万共蹿赘第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式2.常量#define符号常量常量373.变量定义:程序运行时其值可以被改变的量
变量的两要素:变量名、变量值变量的定义格式:变量的初始化:定义时赋初始值变量的使用:先定义,后赋值变量定义位置:一般放在函数开头[存储类型]数据类型变量名1[,变量名2,…,变量名n];intx,y,z;floatradius,length,area;
charch;决定分配字节数和数的表示范围合法标识符例:inta=2,b,c=4;floatdata=3.67;charch=‘A’;intx=1,y=1,z=1;
intx=y=z=1;例1:intstudent;stadent=19;//Undefinedsymbol‘statent’infunctionmain
例2:floata,b,c;c=a%b;//Illegaluseoffloatingpointinfunctionmain
voidmain(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(“data=%f\n”,data);}变量定义可执行语句voidmain(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(“data=%f\n”,data);}拜蚕济巷唬店寒岳灾国挫瞎术古滥呀市证屯胆纱捆酿操嘱辉浚档鸯哑登瘤第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式[存储类型]数据类型变量名1[,变量名2,…,变量名n383.3整型数据1.整型常量
三种表示形式十进制整数:由数字0~9和正负号表示
.
如:123,-456,0八进制整数:由数字0开头,后跟数字0~7表示.如:0123,011十六进制整数:由0x或0X开头,后跟0~9,a~f,A~F表示.如0x123,0Xff定义整数的符号常量
#defineNUM120//十进制数20#defineNUM2020//八进制数(十进制16)#defineNUM30x2a//十六进制数(十进制42)思考题:下列整型常量哪些是非法的?012,oX7A,00,078,0x5Ac,-0xFFFF,0034,7B。首字符不能是字母o八进制数中不能有数字8
十进制数中不能有字母B
奉磋夫巧怜槛挎晤臆老郴哲炬辐涉辗蜗亦突扩捡炊痰蝎薄判柞婿游克诉厢第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式3.3整型数据1.整型常量三种表示形式十进制392.整型变量整型变量的定义int变量名[,变量名2,……,变量名n];int必须小写至少一个空格必须为合法的标识符以逗号,分隔以分号;结尾定义时可以赋初值,方法:在变量名后面增加“=数值”
例:
inta;intx,y,z;intm=2,y=-3;整型变量的分类基本整型:int控制变量是否有符号:signed(有符号)和unsigned(无符号)控制整型变量的值域范围:short(短)和long(长)。
有符号基本整型(int或signedint):
最高位为符号位,其它的为数据位无符号基本型(unsinged或unsingedint):
都是数据位不管是由符号还是无符号,整型占一个机器字大小的内存单元。TC或BC3.1下,整型变量占2个字节(16位)的内存单元,所以对于有符号基本整型,其表示范围为(-215~215-1),对于无符号基本整型,其表示范围为(0~216-1);VC6.0下,变量占4个字节(32位)的内存单元。
如果定义变量时,不指定signed,也不指定unsigned,则默认为signed(有符号)
抚遏药持咐范躲援渊榆肥侯塌细狱垒成稗缠国札晦呜纬聘刨袭描欣各捡史第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式2.整型变量整型变量的定义int变量名[,变量名40inta=2;unsignedintb=2;在内存中存储的形式为:inta=-2;//定义一个无符号整型变量a,并赋初值-2unsignedb=-2;在内存中的存储形式为:00000000000000101111111111111110对于a而言,它的最高位是符号位,所以计算机在使用a时,先对a的最高位进行判断,若最高位为1,表明该数为负数,计算机会对后面的15位进行取反加1操作,得到a的绝对值;对于b而言,它的16位均为数据位,所以b的值其实等于65534。结论:对于有符号数也好还是无符号数也好,其实在计算机内存中表示是不加区分的,都是以其补码形式表示,只是我们怎样看待最高二进制位的问题,如果把最高位当成符号位看待,则为有符号数,如果把最高位当成数据位看待,则变为无符号数。栽跺烁除养痛顿波纷溯另银崭彦炭搔讥偷粒木对勿兰鹊涵湾钉歇说仙懒貉第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式inta=2;inta=-2;41有符号短整型(shortint或short)
shortinta=2;//定义一个有符号短整型变量a,并赋初值2
或shorta=2;占用的内存单元为2个字节,无论是TC、BC,还是VC。无符号短整型(unsignedshortint或unsignedshort)
unsignedshortinta=2;//定义一个无符号短整型变量a,并赋初值2
或unsignedshorta=2;占用的内存单元字节数同short类型。在TC2.0和BC3.1下,unsignedshort类型与unsignedint类型是等价的
。秽营茵砂陈迈薄妮邵伦趋踊管诺恭灶焊奇啃旧弥身砌侧睡想俞悦羡叶忌浴第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式有符号短整型(shortint或short)sho42有符号长整型(longint或long)
longinta=234567;//定义一个有符号长整型变量a,并赋初值234567
或longa=234567;占用的内存单元为4个字节,无论是TC、BC,还是VC。无符号长整型(unsignedlongint或unsignedlong)
unsignedlonginta=2;//定义一个无符号长整型变量a,并赋初值2
或unsignedlonga=2;占用的内存单元字节数同long类型。在VC中long与int类型基本相同,均占四个字节的内存单元;但在TC或BC中,long类型与int类型只是所占字节不同外(long占4字节,int占2字节),其它数据处理方法是一样的。
螺入陵弓氦常骇汤起末猾兆汲株森处奢诀还棍赞硼酋充砸释燥搪踏赂烟矛第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式有符号长整型(longint或long)long433.浮点型数据
浮点型常量(实数或浮点数)
十进制小数形式:由数字0~9和小数点组成
.
如:0.0,5.6,-5.指数形式:由十进制数,加阶码标志e或E以及阶码(只能为整数,可以带符号)组成.
其一般形式为:aEn其中:a为十进制数,n为十进制整数,都不可缺少。其可表示为a×10n合法的实数表示:2.1E5表示2.1×105,3.7E-2表示3.7×10-2。
非法的实数表示:345(无小数点)
,E7(阶码标志E之前无数字)
,-5(无阶码标志)
,50.-E3(负号位置不对)
实型变量
单精度实型(float)
floatf=3.14,g;
这种定义的变量在内存中占4个字节(32位)的存储单元。双精度实型(double)
doublex,y;这种定义的变量在内存中占8个字节(64位)的存储单元。
长双精度实型(longdouble)
longdoublex,y;在TC或BC下,这种定义的变量在内存中占10个字节(80位)的存储单元;在VC下则占8个字节(64位)。
栅寇屉苯融粉譬灼炊椰密鹅浴父淆乘啡哉奶矮寐壹湿馅饱地敲山幼蹄齐嫩第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式3.浮点型数据浮点型常量(实数或浮点数)十进制446.字符型数据和字符串常量
字符型常量
定义:用单引号括起来的单个普通字符或转义字符.
如‘a’‘A’‘?’‘\n’‘\101’字符常量的值:该字符的ASCII码值如‘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腻廉渡暂歌涩悟淀岗哥严翼羡锁徒赔逊硒受鳞敌绢脱拧刘名氰希臆驹忘憎第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式6.字符型数据和字符串常量字符型常量定义:45字符型变量字符型数据类型符是char(字符character)在内存中占1个字节(8位)字符变量存放字符ASCII码char与int数据间可进行算术运算存在有符号和无符号之分。默认情况下为有符号例:
charch;unsignedcharC='B';例:
a=‘D’;//a=68;
x=‘A’+5;//x=65+5;
s=‘!’+‘G’//s=33+71;
给灰炒敦纷攘矗彻赤蔑凶川络并呼盈撬入埂远王晓妒燥偏搂莽窜写擦诞技第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式字符型变量例:例:给灰炒敦纷攘矗彻赤蔑凶川络并呼盈撬46字符串常量
定义:用双引号(“”)括起来的字符序列
存储:每个字符串尾自动加一个‘\0’作为字符串结束标志0x410x41\0例‘A’“A”例:charch;ch=“A”;例:charch;ch=‘A’;例:“hello”,“123”,"ab1.56"字符常量与字符串常量不同趟瓦阑报魏橱蝎寓逊炉理擞烬注罩池窍烩朔篮材即植雁互孽税阴未际饥党第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式字符串常量存储:每个字符串尾自动加一个‘\0’作为473.4C语言的运算符与表达式
变量用来存放数据,运算符则用来处理数据。用运算符将变量和常量连接起来的符合C语法规则的式子被称为表达式。运算符的分类:单目运算符:只带一个操作数的运算符。如:++、--运算符。双目运算符:带两个操作数的运算符。如:+、-运算符。三目运算符:带三个操作数的运算符。如:?运算符。
学习运算符时应注意:
运算符的功能:该运算符主要用于做什么运算。与运算量关系:要求运算量的个数及运算量的类型。运算符的优先级:表达式中包含多个不同运算符时运算符运算的先后次序。运算符的结合性:同级别运算符的运算顺序(指左结合性还是右结合性)。运算结果的类型:表达式运算后最终所得到的值的类型。C运算符算术运算符:(+-*/%++--)关系运算符:(<<===>>=!=)逻辑运算符:((!&&||)位运算符:(<<>>)赋值运算符:(=及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(*&)求字节数:(sizeof)强制类型转换:(类型)分量运算符:(.->)下标运算符:([])其它:(()-)沸骄械假谐长奈瓢岛汪膊匀扰瘴渣芝躬疤蜒缨亡澄诧考莎护还叠趋松伙损第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式3.4C语言的运算符与表达式变量用来存放数481.赋值运算符、赋值表达式
赋值运算符(“=”,双目运算符)
一般形式:变量=常量或变量或表达式功能:将右边常量或变量或表达式的值赋给左边变量
例如:intx,y,z;x=20;y=x;z=x+y;赋值表达式
定义:由赋值运算符或复合赋值运算符(后面即将介绍),将一个变量和一个表达式连接起来的表达式,称为赋值表达式。一般格式:变量(复合)赋值运算符表达式赋值表达式的值:被赋值变量的值。例如:“a=5”这个赋值表达式,变量a的值“5”就是它的值。
工衅陋架哭懂瓷疥拜谚索吸郑银阉硝付工炳言堰绍逮影砌赁左毒伙辽古轩第二章.数据类型、运算符与表达式第二章.数据类型、运算符与表达式1.赋值运算符、赋值表达式赋值运算符(“=”,双目运算符49赋值语句
例如:x=8;a=b=c=5;
定义:赋值表达式在其后面加分号就构成了赋值语句。
赋值运算符及赋值表达式的使用
多个变量连续赋值例如:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生物标志物在药物临床试验中的研究方法
- 生物可降解支架DAPT时长专家共识
- 生物制品稳定性试验与货架期确定策略
- 生物制品临床试验稳定性受试者样本管理
- 生物制剂失应答后IBD的术后复发预防策略-1
- 生物传感器网络的疾病精准诊断系统
- 生活质量导向的抗纤维化方案优化
- Python面试题及答案
- 金融系统应急工程师面试考点详解
- 现代化虚拟在教学中的推进
- 期末模拟考试卷02-2024-2025学年上学期高一思想政治课《中国特色社会主义》含答案
- 2024-2025高考语文病句汇编及答案解析
- 个体诊所药品清单模板
- 公司年度经营计划书模板
- 路灯养护投标方案(技术标)
- 幼儿园防火安全检查记录表
- 南方科技大学校聘能力测评英语测评
- 第十一章灵巧弹药
- 电力工程公司积成绩效考核管理体系制度规定
- 银行IT服务管理事件管理流程概要设计
- 地图文化第三讲古代测绘课件
评论
0/150
提交评论