




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章数据类型、运算符与表达式,C语言的数据类型数据类型分类意义跟存储空间(占用的存储空间字节数不同,例如char类型占1个字节,int占4个字节)取值范围(取值类型及取值范围不同)运算类型(可以进行的运算类型不同,例如%运算符要求操作数为整型),C语言数据类型,常量与变量,常量:在程序运行过程中值不可改变整形常量,例如1234,58等;实型常量,例如3.14,-2.58等;字符常量,例如A,5,+等;宏常量(符号常量),用一个符号名代表一个常量,用define定义,例2.1#include#definePRICE30/*此行和上面这行的顺序可以交换*/voidmain()intnum,total;num=10;total=num*PRICE;printf(total=%dn,total);,运行结果为total=300Pressanykeytocontinue在程序编译之前,会有一个编译预处理的过程,这时编译系统会用30来代替PRICE,实质是文本替换使用字符常量好处:含义清楚,例如用PI来表示3.14需要修改字符常量值时,只需要修改一处就可以,使用字符常量注意问题,格式为#define宏名替换文字,编译预处理会用“替换文字”来代替“宏名”,注意宏名和替换文字的先后顺序;“替换名字”可以带空格,例如#defineHELLOprintf(hello);printf(hello);不作语法检查,用双引号括起不进行替换,如printf(“PI”);不进行替换;宏定义不是可执行语句,不用分号结束,如果带分后,连分号也作为“替换文字”的一部分符号常量常用大写,以区别于变量,变量:在程序运行过程中值可以改变变量的名字必须符合标识符的命名规定,C语言有3种类型的标识符关键字:已被固定为特定意义,不可用作标识符,例如int,float,long等系统预定义的标识符:包括系统提供的库函数名,例如scanf,printf等,以及编译预处理命令define等,建议不要用作变量名,否则容易引起混乱;用户标识符:除此之外的,以字母或者下划线开头,以字母、数字、下划线构成的字符串,可用作变量、函数、符号常量、数组、结构体等名字,标识符,合法的标识符:sum,average,_total,Student_name,_123等不合法的标识符:M.John,$123,#22,1234,ab等注意:标识符区分大小写,例如Sum和sum是两个不同的标识符,变量一般采用小写,一般取名要做到“见名知意”,例如sum,average,total等;不同的编译系统对变量名的长度有不同的规定;变量必须先定义后使用,例如inta;定义了一个整形的变量,名字为a,整形数据,整型常量的表示形式可用八进制(数字0开头),十进制,和十六进制(0 x或者0X开头)表示。如果数据范围在-3276832767之间,认为是int类型;如果超过此范围,认为是long类型;长整型后添加l或者L,如1234567L;无符号整形常量后跟u或者U;无符号长整型后加LU,lu,LU,lU之一。,整型变量,整型变量可以存放整数,有三种类型基本整形,用int定义,例如inta;短整型,用shortint或者short定义;长整型,用longint或long定义,整形变量的长度及存储数据的范围,对于turbo系统,shor及int类型长度为2字节,范围为-3276832767;long类型长度为4字节,范围为-215215-1(约21亿)对于VC+6.0系统,shor类型长度为2字节,范围为-3276832767;int及long类型长度为4字节,范围为-215215-1(约21亿)如果在int或者shortint、longint前面加上unsigned修饰符,表示无符号数,表示正数的范围扩大一倍(不能存储负数),例如unsignedint范围为065535如果在int或者shortint、longint前面加上signed修饰符,表示有符号数,此时signed符号可以省略,也就是signedint与int等价;,6种整型变量的定义方法:(方括号表示可以省掉不写)signedint/shortint/longint或者unsignedint/shortint/longint如果不知道具体编译系统对变量分配多少字节的存储空间,可以用sizeof运算符,例如printf(%dn,sizeof(int);,整型数据在内存中的存放形式:用补码形式表示,参看数字电路相关章节整形数据的溢出:在编程时注意各种存储变量存储数据的范围即可,浮点型数据,浮点型常量的表示形式浮点型常量也就是实型常量,带有小数点的常数;3+3-3.33.都是合法实型常量;可以写成指数形式,格式为小数或整数E(或e)整数的形式,左边的有效数字不可省,指数必须为整数。如3.0e6,-3.0e-6都是合法的。E3,1e0.3不合法。实型常量的确定:实型常量隐含为double,要确定为单精度float须添加f或者F;长双精度longdouble在数值后添加L或者l,如1.25L。,浮点型变量,3种浮点型变量:float,double,longdouble其中float占用4字节,范围是10-381038,有效位数为7位(注意不是指小数位数);double占用8字节,范围是10-30810308,有效位数为1516位;不同的编译系统对longdouble类型有不同的处理方式,如果按16字节存储,范围是10-4932104932,有效位数为1819位。浮点数提供的有效数字是有限的,精度也是有限的,超过该变量能表示的精度范围,将会产生误差,字符型数据,字符常量字符常量书写方式有几种方式:可用键盘输入的字符用一对单撇号括起来,如a,*,+等转义字符:n(换行),“(双撇号)等;ddd,或者xhh,ddd为13位八进制数值,hh为12位16进制数值代表的字符,这种方法可以表示任意字符常量;详细详表见P27,表2-2.字符变量字符变量占用一个字节的存储空间,可以存放一个字符,例如charch;ch=A;,字符数据的存储形式及使用方法,字符变量存储实际上是一个字符的ascii码,例如字符A的ascii码为65,那么ch=A;与ch=65的作用是一样的;字符数据可以按字符的形式输出(%c),也可以按整数形式输出;可以按整数或者字符形式赋值;可以把字符变量当作整形变量,可以参加整形变量可以参加的各种运算,例如算术运算。只是它只占用一个字节,存储数据的范围是-128127,如果定义为unsignedchar,存储数据的范围就是0255;ASCII表中并不是所有的字符都能打印出来,有的只是控制字符,是打印不出来的。另外范围是ASCII码范围是128255的字符,由于字节里最高位是1,跟汉字的存储方式有冲突,所以不一定能在显示器上显示出来。,例2.6向字符变量赋予整数,例2.6向字符变量赋予整数#includevoidmain()charc1,c2;c1=97;c2=98;printf(%c%cn,c1,c2);printf(%d%dn,c1,c2);运行结果是ab9798Pressanykeytocontinue,例2.7大小写字母的转换,#includevoidmain()charc1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(%c%cn,c1,c2);运行结果为:ABPressanykeytocontinue,字符串常量,字符串常量是用一对双撇号括起来的字符序列(可以含有空格),例如%d%c,hello。注意字符常量A和字符串常量A是不同的,不可把字符串常量赋给字符变量,C语言没有字符串变量,可以用数组来存储字符串。编译系统自动在字符串后添加字符串结束标志0,如字符串hello在内存中的存储方式是,各类数值型数据间的混合运算,字符型、整型(int,short,long)与浮点型(float,double,longdouble)数值之间可以进行混合运算。在运算时候,不同类型的数据会被系统自动转换成同一类型,精度等级会提高。转换规律如下:,横向方向表示必定的转换,即使是两个char类型的变量,也会转换成int类型;纵向方向表示类型不同则转换,如一个int类型,一个long类型,就把int类型提升成long类型,int,unsigned,long,double只表示转换的方向,不表示转换依次进行。例如int类型与double进行运算,就会把int一次性提升到double类型,而不需要经过unsigned和long的中间步骤。,运算结果为整个算式里等级最高的那一种类型。例如i为int类型,f为float类型,d为double类型,e为long类型,有以下算式10+a+i*f-d/e按照运算优先级,先算10+a,则a被提升为int类型,运算结果107,为int类型;再算i*f,f必定会被提升为double类型,那么i也会被提升为double类型;第1步得到的结果107为int类型,被提升为double类型,跟第2步结果运算,结果是double类型;e被提升为double,再计算d/e,运算结果为double;第3步跟第4步结果相减,结果为double类型。,算术运算符和算术表达式,C运算符:C语言的运算符范围很广,把除了控制语句和输入输出以外几乎所有的操作都作为运算符处理,如算术运算符(+-*/%)、关系运算符(=0),逻辑表达式(如x0)。,算术运算符,+(加法运算符,或者正值运算符)-(减法运算符,或者负值运算符)*(乘法)/(除法)如3/2的值为1,舍去小数部分。如果想计算结果包含小数,则可以写成3.0/2或者3/2.0或者3.0/2.0的形式。%(模运算符或称求余运算符),如7%4的值为3。%号两边应该为整数,结果符号与被除数相同,例如7%-4的值为3,-7%4的值为-3。,算术表达式和运算符的优先级与结合性,用算术运算符和括号将操作数连接起来,、符合C语法规则的式子,称为C算术表达式,例如a*b/c-1.5+aC语言规定了运算符的优先级和结合性。先按优先级进行运算,优先级相同的,再看结合性。算术运算为左结合性,也就是从左往右进行计算。例如表达式a-b*c,乘法优先级比减法优先级高,先算乘法,再算减法。表达式a-b+c,b左右两侧的运算符优先级相等,但表达式按照从左到右的方向进行运算。有的运算符(如+,-)是右结合性。详见附录C。,强制类型转换,作用:转换原有类型后再使用,但不修改原先定义的属性格式:(类型名)(表达式)例如(double)a(int)(x+y)(double)5注意,如果(int)(x+y)写成(int)x+y,那么被强制转换的是x,而不是x+y。两种类型的类型转换:系统自动进行的类型转换,把精度低的类型提升成精度高的类型,例如float自动转换成double类型;强制类型转换,以便达到特定的目的,例如x的值为float类型,那么x%3不合法,可以把x强制转换成int类型,(int)x%3,自增、自减运算符(右结合性),i+,+i,i-,-i前缀,先增1或者减1再使用其值;后缀,先使用其值再增1或者减1。假设n=3,执行m=n+;结果如何?(m=3)m=+n;结果如何?(m=4)自增、自减运算符只能用于变量,常量、表达式都不能自增或自减。,m=-n+该怎么算?从附录C可以查出,负号运算符(-)和自增运算符(+)的优先级相同,但是m=(-n)+非法,只能是m=-(n+),相当于m=-n;n=n+1;另外,负号运算符(-)和自增运算符(+)都是右结合性,因此n应该跟+结合。不要出现太复杂晦涩难懂的表达式,例如a=i+j之类的表达式,建议分写成几个表达式,或者用括号括起更容易懂。,逗号运算符和逗号表达式,表达式1,表达式2,表达式n先计算表达式1,再计算表达式2,最后表达式n为整个表达式的值,x=a=3,6*a执行结果x和a都等于3,整个逗号表达式结果是18x=(a=3,6*a)a的值为3,x的值为18a=3*5,a*4整个表达式里,乘法运算符优先级最高,先算3*5,得到15;赋值运算符优先级又比逗号运算符优先级高,于是把15赋给a,a的值为1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 泰州市中储粮2025秋招面试专业追问题库综合管理岗
- 张家口市中石化2025秋招笔试综合知识专练题库及答案
- 阿坝自治州中储粮2025秋招笔试题库含答案
- 中国广电云南地区2025秋招笔试模拟题及答案
- 中国联通山南市2025秋招行业常识50题速记
- 山东地区中储粮2025秋招笔试模拟题及答案
- 国家能源邯郸市2025秋招法学类面试追问及参考回答
- 2025年山西宪法考试试题及答案
- 国家能源苏州市2025秋招笔试题库含答案
- 山西地区中石化2025秋招笔试性格测评专练题库及答案
- 创建平安医院课件
- 2025年高压电工考试题库:基础理论知识要点
- 2025年全国中小学校党组织书记网络培训示范班在线考试题库及答案
- 商场保安礼仪培训课件
- 全国2025年质量月活动知识竞赛题库及答案
- 金税四期培训
- 现浇空心板桥梁施工方案
- 托管班安全培训课件
- 2025年全国中小学校党组织书记网络培训示范班在线考试题库及答案
- 产品配送方案及措施
- 教学课件正文字体设计
评论
0/150
提交评论