已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
张晓炜zhangxw,C语言程序设计,第三章数据类型、运算符与表达式,C中的基本数据类型整型、浮点型、字符型-重点,常量与变量,各种类型数据的混合运算类型转换规则-重点,运算符和表达式算术运算符与算术表达式-重点赋值运算符与赋值表达式-重点逗号运算符与逗号表达式,C语言程序的开发过程,Turboc等,printf(maxmum=%d,z);,system();,return0;,0 x10000007,0 x10000006,0 x10000005,0 x10000004,0 x00000000,0 xFFFFFFFF,main(),intx,y,z;,x=10;,y=20;,0 x10000003,0 x10000002,0 x10000001,0 x10000000,程序读写头,system(),b,0 x1000101F,0 x3000FFFB,0 x10001008,0 x10001007,0 x3000FFFA,0 x10001000,printf(),elsereturnb;,0 x10000104,0 x10000103,0 x10000102,0 x10000101,0 x10000100,intmax(inta,intb),主函数,自定义函数,库函数,数据区,z=max(x,y);,a,z,0 x3000FFFD,0 x3000FFFC,y,x,0 x3000FFFF,0 x3000FFFE,程序区,堆栈区,数据读写头,程序和数据在内存中的抽象,PC,SP,if(ab)returna;,字节和位内存以字节为单元组成每个字节有一个地址一个字节一般由8个二进制位组成每个二进位的值是0或1,数值的表示方法原码、反码和补码原码:最高位为符号位,其余各位为数值本身的绝对值反码:正数:反码与原码相同负数:符号位为1,其余位对原码取反补码:正数:原码、反码、补码相同负数:最高位为1,其余位为原码取反,再对整个数加1,9-5=49+7=16=(4)12,3.1C的数据类型,C的数据类型如下:,数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作,C语言中的数据有常量和变量之分,它们分属于以上各种类型,C数据类型,基本类型,构造类型,指针类型,空类型void,定义类型typedef,字符类型char,枚举类型enum,整型,实型,数组,结构体struct,共用体union,3.2C语言的基本元素,符号集(字符集)C语言中使用的基本符号共有以下五种:大写字母:AZ小写字母:az阿拉伯数字:09下划线:_标点符号和运算符:算术、赋值、逗号等,3.2C语言的基本元素,标识符定义:用来标识变量、符号常量、函数、数组等的字符序列要求以字母、数字、下划线三种字符组成,且第一个字符必须是字母或下划线,不能是数字C中的标识符区分字母的大小写不能是C中的关键字不同的C语言版本对标识符长度有一定的限制,一般以长度小于8为宜应尽量做到“见名知义”,尽量不以下划线开头,以免与系统内部使用的标识符冲突,例:判断下列标识符号合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3charab_above$123,M.D.John,3days,#33,char,$123,ab,3.2C语言的基本元素,关键字也称保留字,它是C语言中具有特定含义、专门用作语言特定成分的一类标识符ANSI推荐的C语言关键字是32个如:main,int,char,float,define等注意:所有的关键字都有固定的意义,不能用作其他所有的关键字都必须小写如:else和ELSE代表不同含义,1.直接常量(字面常量)12、0、-3、4.6、-1.23、a、b、abcdefg,2.符号常量:用一个标识符代表的常量定义形式:#define标识符常量值,#define定义的符号PRICE代表常量30,以后本文件中凡单独出现的PRICE都代表30,例:符号常量#definePRICE30#includevoidmain()intnum,total;num=10;total=num*PRICE;printf(total=%d,total);,使用符号常量的优点:1.符号常量不是变量,其值不能改变2.见名知义,便于阅读程序3.一改全改,一、常量程序运行过程中值不能发生改变的量。,3.3常量与变量,符号常量的优点,#includeintmain(void)doubler,s,v;scanf(%lf,#include#definePI3.14intmain(void)doubler,s,v;scanf(%lf,3.14159,3.14159,3.14159,变量名与变量的值变量有一个名字,在内存中占据一定的存储单元,每个存储单元都有一个地址,在该存储单元中存放变量的值,二、变量程序运行过程中其值可以改变的量称为变量。,变量名实际上是一个符号地址。程序中从变量中取值,其实是通过变量名找到相应的内存地址,从该地址对应的存储单元中取值。,变量的定义:一般形式为:数据类型变量名1,变量名2,变量名n;,决定所占字节数、能表示的数的范围和能参与的运算,变量的初始化:可在定义变量的同时,给变量赋一个初始值,称为变量的初始化,符合标识符的要求且一定做到见名知义,C要求变量一定要先定义再使用,例:inta,b,c,nAge;floatfScore;,例:intnAge=18;floatfScore=0;,例:变量的定义位置,#includevoidmain()inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(data=%fn,data);,声明部分:变量的定义,可执行的语句,#includevoidmain()inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(data=%fn,data);,按C99标准正确,变量的定义一般放在函数的声明部分,3.4整型数据,整型常量的表示方法,十进制整数:由数字09和正负号表示。如123,-456,0八进制整数:由数字0开头,后跟数字07表示。如0123,011十六进制整数:由0 x开头,后跟09,af,AF表示。如0 x123,0Xff,在内存中的存放形式整型数据在内存中以二进制补码形式存放例:10在内存中的存放形式为,问题:0123=()100 x123=()100Xff=()10,整形变量含义:用于存放整型数据的变量。基本类型为int,在内存中占据2个字节。两对修饰符:long、short和signed、unsignedlong和short限制整型变量的表数范围,原则上shortintintlongint且用short和long修饰int后,int可省略例:shortints;shorts;longintl;longl;signed和unsigned说明整型和字符型数据最高位的用途signed说明数据的最高位表示数据的符号:1为负,0为正;unsigned表示的数据为非负数,无需符号位指明数据的正负,最高位是数据值的一部分用signed或unsigned修饰int后,int同样可省略例:signedints;signeds;unsignedintu;unsignedu;默认为signed,亦即:inta;signedinta;,TurboC2.0中的各种整型,例12与12L,例30000为int型65536为longint型,整型常量类型的确定,根据其值所在范围确定其数据类型(默认原则)在整常量后加字母l或L,认为它是longint型常量(后缀识别),每种整数类型都有一定的表数范围,若使相应类型数据的值超出该范围,则会“溢出”,运算结果错误。,例:整型数据的溢出,#includevoidmain()inta,b;a=32767;b=a+1;printf(%d,%d,a,b);,整型数据的溢出,3.5实型数据,实型常量的表示方法实数在C中称为浮点数,有两种表示方法:,1.十进制小数形式:由数字和小数点组成,必须要有小数点例:0.5、5.0、.5、5.等,2.指数形式数学上的科学计数法的表示形式例:123e3或123E3都代表123*103要求字母e或E前后必须都有数字,且e或E后必须为整数,一个小数的指数形式多种多样,把在字母e或E之前的小数部分中小数点左边只有一位非零数字的指数形式称为规范化的指数形式,实型常量的类型,程序中直接出现的浮点数认为是double型的常量可在实型常量后加上后缀f或F,则该常量为float型常量,实形变量含义:用于存放实型(浮点型)数据的变量。实数在内存中的存放形式一个实型数据一般在内存中占4个字节(32位),以指数形式存放实型变量的分类实型变量分为单精度(float)型、双精度(double)型和长双精度(longdouble)型,23位,7位,实型数据是用有限的存储单元存储的,能提供的有效数字有限,有效位以外的数字将被舍去,因此可能会产生误差。,例3.4:实型数据的舍入误差,#includevoidmain()floata,b;a=123456.789e5;b=a+20;printf(%fn,a);printf(%fn,b);,输出结果为:12345678848.00000012345678848.000000而不是12345678900.00000012345678920.000000,应避免将一个很大的数与一个很小的数直接相加或相减,也应避免一个很小的实数被一个很大的实数相除,实型数据的舍入误差,字符常量用单引号括起来的单个普通字符或转义字符字符常量的值:该字符的ASCII码值转义字符:反斜线后面跟一个字符或一个代码值表示,3.6字符型数据,如101-A012-n376-x61-a60-0483-(),例:A-101-x41-65,如A65,a97,048,n10,如aA?n101,例转义字符举例main()printf(101x42Cn);printf(Isay:Howareyou?n);printf(CProgramn);printf(TurboC);,运行结果:(屏幕显示)ABCIsay:”Howareyou?”CProgramTurboC,例main()printf(“Yb=n”);,运行结果:屏幕显示:=打印机输出:,字符型数据在内存中的存储形式,字符型数据在内存中占1个字节,以字符的ASCII代码的二进制形式存储,例:charch;ch=a;,ch,字符以ASCII码(整数)存储,与对应的整数的存储方式相同,所以在ASCII码表的范围内,字符型数据与整型数据之间可以通用。能对字符型数据进行整数的一切运算,相当于对它的ASCII码值进行该运算,97,字符变量用关键字char定义,其中用来存放字符常量,一个字符变量只能存放一个字符例:charch;ch=A;,#includevoidmain()charc1,c2;c1=97;c2=98;printf(%c%cn,c1,c2);printf(%d%dn,c1,c2);,例:大小写字母的转换,#includevoidmain()charc1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(%c%c,c1,c2);,例:向字符型变量赋以整数,例:charch;ch=“A”;,字符串常量定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个0作为字符串结束标志,字符常量与字符串常量不同,不同类型的数据之间无法直接进行运算,为了进行混合运算,不同类型的数据在运算前先要转换成同一类型的数据:存在隐式的类型转换,转换的一般规则如下图所示,横向箭头表示的转换定会进行;纵向箭头表示转换的趋势,转换一次完成,总体转换规则:占存储空间小、表示数据范围小的数据类型向同一表达式中占存储空间大、表示数据范围广的数据类型转换,3.7各类数值型数据间的混合运算,例charch;inti;floatf;doubled;,例inti;floatf;doubled;longl;,3.8算术运算符与算术表达式,其中:,/运算符:两个运算数均为整数时,进行整除运算,舍去小数部分,若两个运算数中有一个是负数时,舍入的方向一般为“向0靠近”其中一个运算数为实型数时,进行普通除法运算,%运算符:要求两个运算数均为整数,不能是实数余数符号由被除数决定,算术运算符,用算术运算符和括号将运算对象(操作数)连接起来形成的符合C语法规则的式子称为算术表达式例:a*b/c-1.5+a,算术表达式的运算结果称为算术表达式的值,求表达式的值时,需要考虑运算符的优先级与结合性。先按运算符的优先级别高低次序进行相应的运算,若一个运算对象两侧的运算符的优先级相同,则按规定的结合性从左到右或从右到左运算,C中运算符的优先级与结合性参见课本附录,算术表达式,例5/2=-5/2.0=,例5%2=-5%2=1%10=5%1=5.5%2,例5/2=2-5/2.0=-2.5,例5%2=1-5%2=-11%10=15%1=05.5%2(),1.强制类型转换运算符:(),用以将一个表达式的转换成所需类型,一般形式为(目标类型)(表达式),例:强制类型转换#includevoidmain()floatx;inti;x=3.6;i=(int)x;printf(x=%f,i=%d,x,i);,只是将表达式x的值转换成int型,但变量x的类型仍为float型,几个特殊的运算符,运行结果:x=3.600000,i=3,精度损失问题,强制类型转换示例,#includeintmain(void)inti;doublex;x=3.8;i=(int)x;printf(x=%f,i=%dn,x,i);printf(double)(int)x=%fn,(double)(int)x);printf(xmod3=%dn,(int)x%3);return0;,x=3.800000,i=3(double)(int)x=3.000000 xmod3=0,2.自增、自减运算符,作用:使变量值加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,练习:写出C表达式,数学式C算术表达式s(s-a)(s-b)(s-c)(x+2)e2x,赋值运算符:=作用是将一个数据赋给一个变量,左操作数必须是变量例:inta;a=3;,C中等号为:=,类型转换当赋值运算符左侧的变量类型与右侧表达式的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换,转换的一般规则为:,3.9赋值运算符与赋值表达式,1、实型数据赋值给整型数据时,舍弃小数部分;即:int=float的结果为int型。如:floata;ints;a=12.34;s=a;这时s的值为12。2、将整型数据赋值给实型变量时,数值不变,但数据是浮点形式的;即:float=int的结果为float型。如:ints;floata;s=12;a=s;这时a的值为12.000000。,赋值运算时不同类型数据间的自动转换,3、当字符数据赋值给整型变量时,则将字符数据放到整型变量的低8位中,高8位数根据的存放数据有两种情况:即:int=char当char为无符号或unsignedchar时,高8位应补0;如:unsignedcharc;intx;c=376;(八进制数376)x=c;则x的值为254。当char为有符号数据时,高8位需进行“符号位扩展”,即高8位将依据符号位的值来决定是补0或补1;如:charc;intx;c=376;(八进制数376)x=c;则x的值为-2。,11111110,11111110,00000000,11111111,11111110,11111110,赋值运算时不同类型数据间的自动转换(续),4、将带符号的整型数据赋值给长整型数据时,要进行符号扩展。如果int型数据为正值,则longint型数据的高16位补0;如果int型数据为负值,则longint型数据的高16位补1,以保持其原有数据不变。5、将longint型数据赋值给int型数据时,只将longint型数据的低16位原封不动的送到int型变量中去(截断)。6、将unsignedint型数据赋值给longint型数据时,不存在符号扩展问题,只需将高位补0;将unsignedint型数据赋值给int型数据时,原样赋值,有可能出现错误数据。如:inta;unsignedintb=65535;a=b;printf(“%dn”,a);此时a的值为-1。(补码)7、将int型数据赋值给unsignedint型数据时,原样照赋(连原有的符号位也作为数值一起传送)。,11111111,11111111,11111111,11111111,赋值运算时不同类型数据间的自动转换(续),+=-=*=/=%=a=a+b;a-=b;a=a-b;a*=b;a=a*b;a/=b;a=a/b;a%=b;a=a%b;,赋值表达式由赋值运算符将一个变量与一个表达式连接起来的式子称为赋值表达式,其一般形式为变量=表达式,求解:先计算赋值运算符右边的表达式的值,再将该值赋给左边的变量整个赋值表达式的值为赋值以后赋值运算符左边变量的值,赋值号右边的表达式可以是另一个赋值表达式例:a=(b=5)a=b=5,=的结合性为自右至左,复合赋值运算符,例:a=12;a+=a-=a*a,/a=-264等价于a=a+(a=a-(a*a),3.10逗号运算符与逗号表达式,含义:用于分隔各个表达式,最后一个表达式的值代表整个表达式的值形式:简单形式:表达式1,表达式2如:a=1,a+2一般形式:表达式1,表达式2,表达式3,表达式n如:a=3,a+3,a+10,a=a+20,a+1求解过程从左至右依次计算各个表达式的的值,最后一个表达式的值即为整个表达式的值。,例a=3*5,a*4a=3*5,a*4,a+5例
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 以助人为乐的演讲比赛演讲稿(5篇)
- 银行业柜员服务质量和效率绩效评估表
- 通信行业网络维护工程师技术支持考核表
- 劳务派遣公司管理制度(3篇)
- 餐饮业厨师菜品创新与顾客评价绩效考核表
- 网络公司运维工程师网络管理与技术支撑绩效评定表
- 接送安全课件
- 物联网研发项目经理绩效评定表
- 2025年非甾体抗炎药物项目申请报告
- 旅游服务导游绩效考核表
- 品管圈PDCA改善案例-降低住院患者跌倒发生率
- 肥厚型心肌病的护理查房
- 2024马克思主义发展史第2版配套题库里面包含考研真题课后习题和章节题库
- 军队文职考试《公共科目》试题与参考答案
- 产品经理笔面试经典题型分享-费米问题
- 网络安全教育:安全使用无线网络
- 企业员工廉洁行为规范培训课件
- JT-T 795-2023 事故汽车修复技术规范
- 计算机及网络运维服务方案
- 国家开放大学《数据结构》课程实验报告(实验2-线性表)参考答案
- 全国行政区划代码
评论
0/150
提交评论