C语言(第三章表达式2).ppt

上传人:tia****nde 文档编号:12805495 上传时间:2020-05-25 格式:PPT 页数:45 大小:338.50KB
返回 下载 相关 举报
C语言(第三章表达式2).ppt_第1页
第1页 / 共45页
C语言(第三章表达式2).ppt_第2页
第2页 / 共45页
C语言(第三章表达式2).ppt_第3页
第3页 / 共45页
点击查看更多>>
资源描述
3.5.1字符常量字符常量:用一对单引号(不分左右)括起的一个字符,如a,A,#,9说明:1.字符常量的值是该字符在ASCII码中的码值(P374)。2.a和A是两个不同的字符常量,a97,A653.开头的字符序列称为特殊形式的字符常量(转义字符),3.5字符型数据,例main()printf(-n);printf(“-ab-ct-derftgn);printf(htibbj-kn);运行结果:-fgdehj-k3.5.2字符变量字符变量:用于存放一个字符常量。字符变量的定义形式:如:charc1,c2;/*定义c1,c2为字符型变量,占一个字节*/c1=a;c2=b;/*将字符常量a,b赋给c1和c2*/,字符常量存放到字符变量中,是把其ASCII码值存放到内存中,由于其存储形式与整数存储形式相似,所以整、字符型数据之间可通用。main()charc1,c2;c1=97;c2=98;printf(c1=%c,c2=%cn,c1,c2);printf(c1=%d,c2=%dn,c1,c2);运行结果:c1=a,c2=bc1=97,c2=98,3.5.3字符数据在内存中的存储形式及使用方法,main()charc1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(c1=%c,c2=%cn,c1,c2);运行结果:c1=A,c2=B,例.大小写字母的转换,main()inti;charc;c=97;i=a;printf(%c,%dn,c,c);printf(%c,%dn,i,i);运行结果:a,97a,97在TurboC中,字符数据占一个字节,当ASCII码值在128255之间时,其最高位为1,占据了符号位,以数据输出时为负数,以字符输出时是对应的字符,以无符号数据输出时,也是其对应的数据。,例.字符数据与整型数据之间可以相互赋值,字符串常量:用一对双引号(不分左右)括起的字符序列。如:BEIJINGCHINA$123a字符串使用的有关说明:字符串可出现在输出函数中;如:printf(ThisisaCprogram.n);2.字符常量与字符串常量是不同的;如:charc1,c2;c1=a;可以c2=a;错误不能把字符串赋给字符型变量,字符串在内存中存放时,系统自动加字符串结束符0,该字符在ASCII码中的码值为0,是空操作符,即无动作,不显示。,3.5.4字符串常量,3.C中无字符串变量,字符串可以赋给字符数组;4.若字符串为CHINA,它在内存中的实际存储形式是:其长度是6而不是5,最后一个字符是0,是系统自动加上的,不能人为加上此字符,它既无显示或打印输出也无任何动作。,1.定义的同时给变量赋初值如:inta=3;floatb=3.1415;charc=x;2.定义变量时,可以对其中的一部分变量赋初值如:inta=3,b,c,d=8;3.把一个常量赋给不同变量时,最好分别进行。如:inta=b=c=3;而应写为:inta=3,b=3,c=3;4.初始化是在程序运行时,执行本函数时赋以初值的。如:inta=3;相当于:inta;a=3;,3.6变量赋初值,在C语言中,整、实、字符型数据间可以混合运算一、不同类型数据间进行运算时,要转换成同一类型转换过程中,低类型向高类型靠拢,然后进行运算,不同类型之间转换如下图所示,横向左箭头为必转,纵向箭头表示有条件类型转换。高doublefloatlongunsigned低intchar,short例如:10+a1.58765.1234b,3.7各类数值型数据间的混合运算,例:T3-7-3.cmain()floata;doubleb;a=10+a+1.5-8765.1234*b;b=10+a+1.5-8765.1234*b;printf(a=%f,b=%fn,a,b);运行结果:a=-858873.562500,b=-858873.593200,3.8.1C运算符简介除控制语句(if,while,for)和输入/输出函数;大部分操作都由运算符处理。1.算术运算符:+、-、*、/、%2.关系运算符:、=、|、a=5;b=3;c=a/b;printf(“c=%dn”,c);运算结果:c=1,例.实型数据除法运算main()floata,b,c;a=5;b=3;c=a/b;printf(“%fn”,c);运算结果:1.666667,算术表达式:用算术运算符和括号将运算对象(常量、变量、函数)连接起来的,符合C语言语法规则的式子。如:a*b/c-1.5+a在C语言中,运算符共有15个优先级,其中算术运算符的优先级是:*、/、%(3级)+、-(4级)算术运算符的结合方向:从左向右如:a-b+c:算符优先级相同,结合性:从左向右a-b*c:算符*的优先级高于-若运算符两侧的运算对象类型不同时,低类型向高类型转换,2、算术表达式和运算符的优先级与结合性,一般形式:(类型名)(表达式)如:(double)a将a转换为double型(int)(x+y)将x+y的值转换为整型(float)(5%3)将5%3的值转换成单精度实型说明:1.(int)(x+y)与(int)x+y意义不同2.类型转换后得到一个中间值,原变量类型不发生变化。例T3-8.cmain()floatx,i;x=3.6;i=(int)(x);printf(“x=%f,i=%fn”,x,i);运算结果:x=3.600000,i=3.000000,3、强制类型转换运算符,例main()floata,b,c,d;inte,f;a=5;b=3;c=a/b;d=(float)(5%3);e=(int)(a/3);f=(int)(b+3.8);printf(“c=%f,d=%f,e=%d,f=%dn”,c,d,e,f);运算结果:c=1.666667,d=2.000000,e=1,f=6思考:程序运行期间,a,b的值发生变化没有?,:增1运算符,使变量值增1。:减1运算符,使变量值减1。如:+i,-i:在使用变量i之前,先使变量i加(减)1。i+,i-:在使用变量i之后,使变量i值加(减)1。例T-.cmain()inti,j;i=3;j=+i;printf(“i=%d,j=%dn”,i,j);运算结果:i=4,j=4,4、自增、自减运算符,例main()inti,j;i=3;j=i+;printf(i=%d,j=%dn,i,j);运算结果:i=4,j=3说明:1.+,-运算符只能用于变量,而不能用于常量和表达式。如a+,b-是正确的,而5+,(x+y)-却是错误的。2.+,-运算符的结合方向是从右向左。,例main()inti;i=3;printf(“i1=%dn”,-i+);printf(“i2=%dn”,i);运算结果:i1=-3i2=4例T3-8-5.cmain()inti;i=3;printf(“i1=%dn”,-+i);printf(“i2=%dn”,i);运算结果:i1=-4i2=4,(1)C中的运算符和表达式:表达式中的子表达式的求值顺序各编译系统是有差别的。如对表达式:a=f1()+f2()一般情况下是先调用f1(),再调用f2(),先后次序无关紧要,但有些情况,结果却不同,编程时要注意所用的编译系统。如表达式:(i+)+(i+)+(i+)有的系统的求值顺序是先求第一个,再求第二个,最后求第三个子表达式,其结果是:3+4+5=12,最后i的值为6而在TurboC中却有所不同:,5、表达式使用的进一步说明,例main()inti=3,j=3,k,q;k=(i+)+(i+)+(i+);q=(+j)+(+j)+(+j);printf(i=%d,j=%d,k=%d,q=%dn,i,j,k,q);运算结果:i=6,j=6,k=9,q=18(TC)i=6,j=6,k=9,q=16(VC),(2)在C语言中运算符的确定在由多个字符组成的表达式中,应尽可能多地从左向右将若干个字符组成一个运算符,必要时加:括号或空格,以避免混淆(这是好的设计程序风格)。如:i+j其结合性是:(i+)+j而不是:i+(+j)。(3)printf函数输出实参的顺序如:inti=3;printf(“%d,%dn”,i,i+);VisualC+按从左到右的顺序求值,输出结果:3,3(VC)TurboC是按从右到左顺序求值,输出结果是:4,3(TC)结论:不写别人甚至自己都看不懂的程序,也不写那些不知道系统会怎样运行的程序,基本的算术运算符算术表达式和运算符的优先级与结合性强制类型转换运算符自增、自减运算符表达式使用的进一步说明,6算术运算符总结,1、赋值运算符“=”是赋值号,也是赋值运算符功能:将赋值号右边表达式的值赋给赋值号左边的变量,赋值号同时含有计算的功能。如:a=3;b=x*y;a,b变量中原来不管存放什么值,执行赋值语句后,新值将取代旧值,3.9赋值运算符和赋值表达式,变量类型的不同,所接收的数据也是不同的,当赋值运算符两侧的数据类型不一致时,在赋值时要进行类型转换(1)实型数据赋给整型变量时,舍去实型数据的小数部分如:inti;i=3.56;(2)整型数据赋给实型变量时,数值不变,但以浮点形式存放于内存。(3)double型数据赋给float变量,截取7位有效数字存放float单元,应注意数值溢出(4)字符型数据赋给整型变量无符号字符型赋给整型量:将其存放在整型变量的低8位中,而高位以0补齐带符号字符型赋给整型量时若最高位为1(负数),则整型变量的高8位补1,若最高位为0(正数),则整型变量高8位补0。(5)int,short,long型数据赋给char变量,则将其低位赋给char型变量(6)long型数据赋给int型变量,将long型数据的低16位赋给int型变量(7)将unsignedint型数据赋给long型变量时将unsignedshort型数据送到longint型变量的低16位,longint的变量高16位补0若无符号数据赋给相同长度的带符号的变量,则原样赋给。(8)将带符号的数赋给长度相同的无符号变量,2、类型转换,2、类型转换变量类型的不同,所接收的数据也是不同的,当赋值运算符两侧的数据类型不一致时,在赋值时要进行类型转换(1)实型数据赋给整型变量时,舍去实型数据的小数部分如:inti;i=3.56;结果i的值为3(2)整型数据赋给实型变量时,数值不变,但以浮点形式存放于内存。如:floata=23;先将23转换成23.000000,然后送a中doubleb=23;先将23转换为23.00000000000000,然后送b中,(3)double型数据赋给float变量截取其前面的7位有效数字,存放到float单元,应注意数值范围不能溢出,如:floatf;doubled=123.45678e65;f=d;由于数据溢出,f将得到错误的值float数据赋给double变量时,数值不变,有效位扩展到16位。,(4)字符型数据赋给整型变量字符数据占一个字节,整型数据占两个字节,字符数据存入整型变量的低8位,有两种情况:无符号字符型数据赋给整型变量时:将其存放在整型变量的低8位中,而高位以0补齐,main()inti;unsignedcharc;c=376;i=c;printf(“i=%d,c=%dn”,i,c);结果:i=254c=254,带符号的字符型数据赋给整型变量时若最高位为1(负数),则整型变量的高8位补1,若最高位为0(正数)则整型变量高8位补0。例T3-8-9.cmain()inti;charc;c=376;i=c;printf(“i=%d,c=%dn”,i,c);运行结果:i=-2,c=-2,(5)int,short,long型数据赋给char变量,则将其低位赋给char型变量例T3-8-10.cmain()inti=289;charc;c=i;printf(“i=%d,c=%d,c=%cn”,i,c,c);运算结果:i=289,c=33,c=!,(6)long型数据赋给int型变量,将long型数据的低16位赋给int型变量例T3-8-11.cmain()shorta;longb=65544;a=b;printf(a=%d,b=%ldn,a,b);运算结果:a=8,b=65544,a=8,符号位,b=65544,(7)将unsignedint型数据赋给long型变量时将unsignedshort型数据送到longint型变量的低16位,longint的变量高16位补0例T3-8-12main()unsigneda=65535;longb;b=a;printf(a=%u,b=%ldn,a,b);,输出:a=65535,b=65535,若无符号数据赋给相同长度的带符号的变量,则原样赋给。Unsignedintintunsignedshortshortintunsignedlonglongint要注意数据的有效位占据符号位例T3-8-13.cmain()unsignedinta=65535;intb;b=a;printf(“a=%u,b=%dn”,a,b);运算结果:a=65535,b=-1,(8)将带符号的数赋给长度相同的无符号变量过程:原样赋给例T3-9.cmain()unsignedinta;intb=-1;a=b;printf(“a=%u,b=%dn”,a,b);,1111111111111111,1111111111111111,a,b,符号位,数值位,运算结果:a=65535,b=-1,在赋值号前加其它运算符,可以构成复合运算符。如:a=a+ba+=bx=x*(y+8)x*=y+8x=x%3x%=3为了便于记忆,将赋值号左边移到赋值号右边,赋值号左边再补上变量名。如:a+=ba+=(b)a=a+b,其中a是变量,b是表达式x*=y+8x*=(y+8)x=x*(y+8)在C语言中,有十个二元运算符:+、-、*、/、%、其中b=5是赋值表达式,其值是5,因此a的值是5,整个表达式的值是5。,4、赋值表达式,赋值运算符的结合顺序:从右向左因此:a=(b=5)与a=b=5是等价的。例:a=b=c=5表达式的值为5,a,b,c的值为5。a=5+(c=6)表达式的值为11,a的值为11,c的值为6。a=(b=4)+(c=6)表达式的值为10,a的值为10,b为4,c为6。a=(b=10)/(c=2)表达式的值为5,a的值为5,b为10,c为2。,赋值表达式也可以包含复合的赋值运算符main()inta=12,b;b=(a+=a-=a*a);printf(“a=%d,b=%dn”,a,b);运算结果:a=-264,b=-264,逗号运算符:,逗号表达式:用逗号将两个表达式连接起来的式子。形式:表达式1,表达式2求解过程:先求表达式1的值,再求表达式2的值,整个表达式的值是表达式2的值。注:表达式1和表达式2又可以分别由若干个逗号表达式组成。因此,逗号表达式又可扩展为:表达式1,表达式2,表达式n例:3+5,6+8整个表达式的值是14a=3*5,a*4整个表达式的值是60,变量a的值是15,3.10逗号运算符和逗号表达式,例main()inta,b;b=(a=3*5,a*4),a+5);printf(“a=%d,b=%dn”,a,b);,运算结果:a=15,b=20,由于逗号运算符的优先级别最低,因此下面两个表达式的作用是不同(1)x=(a=3,6*3)整个表达式是赋值表达式,a值为3,x值为18(2)x=a=3,6*a整个表达式是逗号表达式,其值是18,x,a的值均为3说明:1.逗号运算符是一个顺序求值运算符在后面讨论的for等语句中使用逗号表达式的目的,是要分别求出逗号表达式的值,而不一定是要得到整个表达式的值。,main()intx,a=1,b=2,c=3;x=a,b,c;printf(“x=%dn”,x);运算结果:x=1例T3-9-4.cmain()inta=1,b=2,c=3,x;x=(a,b,c);printf(“x=%dn”,x);结果:x=3,2.并非所有出现“,”的地方都是逗号运算符,如函数中的参数分隔符例main()inta=1,b=2,c=3;printf(“%d,%d,%dn”,a,b,c);printf(“%d,%d,%dn”,(a,b,c),b,c);,运算结果:1,2,33,2,3,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!