c教案ch3数据类型与运算符.ppt

上传人:max****ui 文档编号:11544751 上传时间:2020-04-28 格式:PPT 页数:39 大小:1.31MB
返回 下载 相关 举报
c教案ch3数据类型与运算符.ppt_第1页
第1页 / 共39页
c教案ch3数据类型与运算符.ppt_第2页
第2页 / 共39页
c教案ch3数据类型与运算符.ppt_第3页
第3页 / 共39页
点击查看更多>>
资源描述
C程序设计(第三版)-教学课件,制作人:黄荧制作人单位:河师大数学与信息科学学院,第三章数据类型与运算符,本章内容:1c的数据类型2常量与变量(变量是重点!)3整型、实型、字符型变量4几种常用的运算符(重点,特别赋值运算符),形形色色的数据在程序中如何表示?如何存储?,3.1C语言的数据类型,C中的数据有4类9种,常用的是其中的3类6种.,注意:1在计算机中所有数据都是以二进制(补码)形式存储的。2为使程序能更为高效运行,C将三种基本数据类型(整型、实型、字符型)分为更详细的类型。这样在程序设计时可以尽可能的节约存储空间,加快程序运行的速度。,3.2常量与变量,一常量和符号常量常量:(即常数)程序运行时其值不能改变的量如,12、3.2、a、abc符号常量:用合法标识符代表的常量。即,用一个名字代表的常量。一般形式:#define标识符常量如,#definePI3.1415926优点:含义清楚,灵活机动,易于修改。注意:符号常量通常用大写字母表示。,小资料:标识符:是用来作为变量名、常量名、函数名等由英文字母、数字、下划线组成的、第一个字符只能是英文字母或下划线的、且不为C关键字的一串字符(关键字P365)。注意:C中的符号对大小写敏感!如,sum与Sum是两个不同的标识符.,例3.1符号常量举例某商品单价为30元,顾客要买10件,编程计算商品的总价格.,#definePRICE30#includevoidmain()intnum,total;num=10;/1)输入数据:num(件数)total=num*PRICE;/2)计算总价:totalprintf(total=%dn,total);/3)输出总价,二变量,1变量的概念:程序运行时其值可以改变的量.2变量的定义方法:一般形式:类型符变量名列表如,intn,m,k;/短整型shorta;/整型floatx,y,z;/单精度实型doublet;/双精度实型charc1,c2;/字符型,实验程序:#includevoidmain()printf(各类变量所占字节数为:n);printf(整型int:%dn,sizeof(int);printf(短整型short:%dn,sizeof(short);printf(单精度实型float:%dn,sizeof(float);printf(双精度实型double:%dn,sizeof(double);,变量定义语句的功能:变量定义语句指挥系统为变量分配存储空间,变量的类型决定了分配存储空间的大小.,3.3整型数据,整型常量(三种形式)十进制常数如,123、-12、0八进制常数由数字07组成,最高位必须用0做引导符!如,012-(12)8=(10)10、-012十六进制常数由09和af(AF)组成,最高位必须用0 x(0X)做引导符。如,0 x12-(12)16=(18)100 xaf-(af)16=10*16+15=(175)10,实验程序:#includevoidmain()intn=012,m=0 x12;printf(n=(%o)8,(%d)10,(%x)16n,n,n,n);printf(m=(%x)16,(%d)10,(%o)8n,m,m,m);/八进制、十六进制格式符(%o,%x)都是按无符号数输出的,二整型变量(6种):(根据实际问题的需要选取适当的变量类型)1)有符号整型:intshortlong(3种,占字节数:224(Tc)),2)无符号整型:unsignedint等相应3种(占字节数:224(Tc)),整型变量:常用的是int和long,二整型变量(6种):(根据实际问题的需要选取适当的变量类型),实验程序:#includevoidmain()printf(各类整型变量在VC中所占字节数为:n);printf(整型int:%dn,sizeof(int);printf(短整型short:%dn,sizeof(short);printf(长整型long:%dn,sizeof(long);printf(无符号整型unsigned:%dn,sizeof(unsigned);,原码、反码、补码,计算机中负数的表示,1原码:将一个整数,转换成二进制,就是其原码。最高位是符号位,0为正,1为负。如:单字节情况下,5的原码为:00000101;-5的原码为:10000101。2反码:正数的反码就是其原码;负数的反码是将其原码中,除符号位以外,每一位取反。它也恰好是|x|的所有位取反.如:单字节情况下,5的反码为:00000101;-5的反码为:11111010。3补码:正数的补码就是其原码;负数x的反码+1就是补码。它也恰好是|x|每一位取反+1.如:单字节情况下,5的补码为:00000101;-5的补码为:11111011。4由负数x的补码求原来的数值:x-1=每一位取反=得到|x|,再加上负号即可。如,x(补)=1000000000000000(-1)=0111111111111111(取反)=1000000000000000=215=|x|所以x=-215。(当有符号位时,215不能用两个字节的二进制数码表达。两个字节最大能表达215-1。),整型变量易错点-数据的溢出溢出错误发生原因:给变量的赋值超出相应最大允许值。如:int类型,占2个字节(Tc!注意,vc中short是2个字节,int是4个字节.),因为在内存中:a:011111111111111132767b:1000000000000000-32768的补码,例3.3P44实验程序:变量中所放数据超出最大允许范围会怎样?#includevoidmain()shorta,b;/VC中int变量占4个字节。a=32767;b=a+1;printf(%d,%dn,a,b);,运行结果:32767,-32768,整型常量的类型:,1)在一个整数,如果其值在-32768-+32767,则认为它是int型的(Tc)。2)一个整数,如果其值在超出了上述范围,且在-2147485648-+2147485647范围内,则认为它是long型的。(再大就看作实型的了。)3)一个整常量后面加一个字母u,则认为它是unsigned型的。4)一个整常量后面加一个字母l或L,则认为它是long型的。如,0L占4个字节,3.4实型数据,实型常量(浮点数)十进制小数形式如,.123、123.、123.0、0.0、0.、.0、指数形式(常量!一个整体符号)如,3.45e3、3.45E-3(表示:3.45103和3.4510-3的值)注意:1)E的前后必须有数字,E后必须是整数。如,.3E3、3E3、3.E33E、E3、1E0.3、3Ek(n=3*10k=n=3;i=1;while(i=(右移)(按位取反)|(按位或)(按位异或)floatx=3.56;i=(int)x%2;printf(x=%.2f,i=%dn,x,i);,运行结果:x=3.56,i=1,如:floatx=3.14,y;y=(int)x;注意:强制类型转换只是一种一元运算,如:(int)x得到一个整型的运算结果,但是并不能改变变量x本身的值。,如,i=3;j=i+;printf(i=%d,j=%dn,i,j);,又如,i=3;j=+i;printf(i=%d,j=%dn,i,j);,输出结果为:i=4,j=4,输出结果为:i=4,j=3,3自增自减运算符:+-(右结合!)i+i=i+1i-i=i-1,i+:先用值再自加+i:先自加再用值,关于+-运算的说明,#include/实验程序:+-的副作用voidmain()inti=3,j;printf(%d%dn,+i,+i);/输出:54/*1)printf()函数在处理输出项的时候,是按从右向左的顺序先计算输出项的值的,然后再按从左向右的顺序输出。所以输出:54*/i=5;j=(+i)+(+i)+(+i);printf(i=%dj=%dn,i,j);/输出:i=8j=22/*2)VC在处理a+b+c的时候是按(a+b)+c来处理的。但是同时注意到,当表达式中出现i+时,VC都是在计算完整个表达式的值以后,才对i进行自加,对于函数参数也是如此。i=5:(+i)+(+i)+(+i)=(7+7)+8=22*/*3)i+i从左向右尽可能多的取字符构成一个运算,所以i+i(i+)+i*/i=5;printf(%dn,i+i);printf(%dn,i);/输出:106/*鉴于+,-容易引起歧义,编程时尽量避免一个表达式中出现多个+或-运算,尽量避免在输出项中出现+或-运算。*/,4赋值运算符与赋值表达式(右结合!),两种赋值运算符:一般赋值运算符:=复合赋值运算符:+=-=*=/=%=,1)一般的赋值表达式:=赋值运算的运算过程:计算右端表达式的值,赋给左端的变量左端的变量的值作为赋值表达式的值。如,x=3.4a=x+2.1y=(x=1)+2,练习:1inta,b,c;a=b=c=22inta,b;floatc;a=b=c=2.43求a=(b=-2)+(c=12),赋值运算-最重要的运算之一,它具有计算表达式的值的功能!如,r=3.14/4;s=3.14*r*r;v=4.0/3*pi*r*r*r;y=sin(r)/r;,2)复合的赋值运算符:+=-=*=/=%=如:x+=5x=x+5x*=5x=x*5x%=5x=x%5特别:y*=x+5y=y*(x+5),练习:1inta=2,c;a+=5+(c=3)2若a=8求a/=(b=-2)+(c=12)3若a=5-注意:在计算过程中变量a的值在不断变化!求a+=a-=a*a4若a=5求a+=a-=a*=a计算结果:100-400,编程计算当a=5时,表达式a+=a-=a*a的值。,实验程序:#includevoidmain()inta=5,b;b=(a+=a-=a*a);printf(b=%dn,b);,5逗号运算符(顺序求值运算符):(左结合,优先级最低)一般格式:表达式1,表达式2逗号运算的运算过程:依次计算表达式1和表达式2表达式2作为逗号表达式的值。如,x=(b=2,b+1);逗号表达式的一般形式可以扩展为:表达式1,表达式2,表达式n,练习:1表达式a=3*5,a*4的值为_。a=?2(a=3*5,a*4),a+5的值是_。a=?31)x=(a=3,6*3)的值是_。x=?2)x=a=3,6*3的值是_。x=?,60201818,41)printf(%d%d%d,a,b,c);的含义。2)printf(%d%d%d,(a,b,c),b,c);的含义。,3.8几个常用运算符,1基本算术运算符+-/*%(取余)2强制类型转换运算符(类型名)3自增自减运算符+-(右结合!)i+i=i+14赋值运算符与赋值表达式(右结合!)1)一般的赋值表达式:=2)复合的赋值运算符:+=-=*=/=%=5逗号运算符(顺序求值运算符):(左结合),作业:P66,Ex3.53.73.93.103.12,阅读程序:,/题目:输入一个实数,分别输出其整数部分和小数部分。#includevoidmain()floatx,f;intr;scanf(%f,阅读程序:,/*输出几个常用类型的变量所占的字节数函数sizeof(类型名);返回指定类型的变量所占的字节数不同的计算机中,同一数据类型占用的空间不一定相同,可用sizeof操作符测试*/#includevoidmain()printf(在VC系统中,各类变量所占字节数为:nn);printf(short-%dn,sizeof(short);printf(int-%dn,sizeof(int);printf(long-%dnn,sizeof(long);printf(unsignedshort-%dn,sizeof(unsignedshort);printf(unsignedint-%dn,sizeof(unsignedint);printf(unsignedlong-%dnn,sizeof(unsignedlong);printf(float-%dn,sizeof(float);printf(double-%dn,sizeof(double);printf(longdouble-%dnn,sizeof(longdouble);printf(char-%dn,sizeof(char);printf(unsignedchar-%dnn,sizeof(unsignedchar);,关于不同类型数据之间赋值的说明:赋值的原则是尽量保持所赋的值不变。,一涉及到实型数据的赋值(1)“实”到“整”,截去小数后,再赋值。(不四舍五入。)如,inti;i=3.999;3=i(2)“整”到“实”,如,floatx;x=3;3.000000=x(3)“双精度”到“单精度”,截取7位有效数字后,再赋值。如,duobled;floadf;d=12.34567890;f=d;12.34567=f反之与“整”到“实”类似,数值不变,补足有效位后,再赋值。,二整型数据之间的赋值,首先回顾补码与整型数据的存储方式补码二进制编码的一种,计算机所用的数据存储方式:整数m的补码:当m=0时,m补码=m原码:除2取余,直至商为0,余数倒序排列。当m011-(取反)100-(末位加1)101-(符号扩展,补足数位)1111111111111101=0XFFFD(2个字节内存中的存储方式,4个字节类似)注意:“符号扩展,补足数位”是为了保证其值仍然是-3.显然如果左边补0所存就变成正值了。1111111111111101最高位是符号位!,整型数据之间的赋值的原则仍是尽量保持所赋数值不变。,4)当左值字节数int(short或long等为右值时类似)char数据的8位放到int数据的最低8位,其余做符号扩展,补足剩余数位。如:charc=376;/376八进制内存中:当c看成有符号数据时,,内存中:当c看成无符号数据时,符号实际为正!即,有定义:unsignedcharc=376;,5)当左值字节数右值字节数时:如,int=char(short或long等为左值时类似)“截断”int数据,仅将int数据的最低8位原封不动的放到char数据的8位。(显然:当“截断”的int数据中有有效数据时就会产生溢出错误!)如:inti=289;,6)int=long与4)类似,低位原封不动复制,高位符号扩展,补足剩余数位。反之,long=int与5)类似,“截断”高位,低位原封不动复制。7)unsignedint=long,符号实际为正!低位原封不动复制,高位补0.8)当左值字节数=右值字节数时:如,int=unsignedint所有位(包括符号位也看成数值位)原封不动复制。,
展开阅读全文
相关资源
相关搜索

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


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

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


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