资源预览内容
第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
第9页 / 共36页
第10页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第3讲 数据类型(中) -变量、常量、运算符、表达式 黄永峰 2014-10-10 yfhuangtsinghua.edu.cn,对应教材的第2章P19-30的内容,本讲内容 变量的定义方法和内涵 常量在程序中的表示方法 运算符和表达式概念,问题提出:数据在计算机中如何存储? 问题1:计算机为不同类型数据分配不同大小内存空间 问题2:计算机为不同类型数据采用不同二进制编码表示 问题3:计算机对不同类型数据采用不同运算操作,解决方案:为程序中数据定义不同类型的变量,2.3 程序中的变量定义,定义变量的内涵 定义一个变量代表在内存中分配一定大小的存储单元 变量存储空间两属性:存储地址(或名称)和存储数据(存储内容);内存地址用16进制数表示,名称用标识符表示 变量类型也就确定了该数据二进制编码格式和能执行操作 对变量访问(读写)2种方式:通过变量名或变量地址,例如: char; int b=6;,2.3.1 变量定义方法,变量的3属性 名称:变量名规则(匈牙利命名法,见P28),如:int iCount 数值:类型相一致.当一个数据写变量,只要没有新的数据写入,就总保存这个数据。“一次写、多次读” 存储空间:大小+地址(编号),变量定义的外延:“先定义,后使用” 变量定义一般格式 类型标识符 变量名列表;例如:int sum,SUM; 变量的初始化:在定义变量同时给予初始值 如,int sum =10;,C+语言中的关键字(32个) auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatie while C+语言中的编译预处理命令(12个):define endif elif error line include ifdef ifndef program undef if else,2.3.1 变量定义方法,注意:不能用上述关键字或命令名做变量名,整型变量分为四种类型 基本型,以int表示 短整型,以short int或者short表示 长整型,以long int或者long表示 无符号型,以unsigned int(无符号整型)、unsigned short(无符号长整型)和unsigned long(无符号短整型)表示,2.3.2 C+整型变量(参考P20),注意:变量没初始化而使用带来问题,2.3.2 C+整型变量(参考P20),注意:变量字长和溢出问题,符号常量N,2.3.2 C+整型变量(参考P20),小蛇吞掉大象的故事 一台安装了Windows 95/98的机器,如果连续运行49.7天没有重启,可能会引起死机。为什么呢? 原因: Windows 95/98系统设置了一个计数器用于记 录系统已经运行了多少毫秒。这个计数器是一个unsigned long类型的变量 unsigned long的最大值是:4294967295 一天有2436001000=86400000ms,4294967295/86400000=49.7天 当系统运行到49.7天时,此计数器会溢出,引起死机,2.3.2 C+整型变量(参考P20),实型变量分为单精度(float)和双精度(double)两种类型 float内存4个字节; double占内存8个字节 float型变量只能接受7位有效数字;double型变量只能接受15位有效数字,2.3.3 实型变量(参考P23),2.3.3 实型变量,2.3.3 实型变量的陷阱,结论: f和123.456有类型差异 不同类型实型数有精度差异 实型数之间正确的比较方法,有关浮点数的精度问题,123.456000的二进制,小数位为无穷位,2.3.4字符和布尔性变量,字符和布尔变量:在内存中占一个字节 字符变量存放字符的ASCII码值,例:字符A在内存中存放的是65;布尔变量存储1或0; 字符变量定义和初始化 char x1,ch1x; 布尔变量定义和初始化 bool c1,c2=true;c3=1;,提问:ch1=“x”对吗?为啥呢,2.3.5 常变量,常变量:又称为只读变量(Read-only-variable) 是保护数据安全的机制,防止意外修改 定义形式:const 类型 变量名;例如:const int a=3;const float b=3.14*2; 参考P31,常量:在编程时用来对变量赋值或初始化,或直接参加表达式运算。例如,int a, a=3; char c=a; a=a+4; 类型:数值常量(整型常量,实型常量)、字符常量和符号常量,2.4 程序中的常量表示,2.4 程序中的常量表示 - 实型数的表示,注意: 缺失浮点数表示为双精度,如3.14 E表示以10指数,(1)单撇号表示法用一对单撇号括起来的一个字符,如a,c, A, ?等单撇号中的单个字符。但不能是单撇号或反斜杠:即 、 都是不合法,2.4 程序中的常量表示 - 字符型常量的表示P23,(2)转义字符表示法 用斜杠加一个字符或整数表示,利用xhh或ddd转义字符,可以表示任何ASCII码字符,问题:101 =A吗?为什么呢,2.4 程序中的常量表示 - 字符型常量的表示P23,结论:字符型数据和整型数据可通用,即可以混合运算,提问:引入符号常量有什么好处?,2.4 程序中的常量表示 - 符号常量(P26),问题:常变量与符号常量有区别吗? 符号常量在编译时被替换掉,不分配存储空间 常变量编译时分配存储空间,并检测类型,因此更安全 常变量是C+对C的改进,因此更好用,符号常量,常变量,字符串常量:用双撇号括起来的多个字符序列,如:“zhang san ”、“student” ,“x”,”hello”等,字符串的字符数为字符串长度 系统在每一个字符串的末尾都自动加一个“字符串结束标志”,即0,问题:“x”=x吗,为什么呢?,2.4 程序中的常量表示 - 字符串常量的表示p25,2.4 程序中的常量表示 - 字符串常量的表示p25,2.5 运算符和表达式,运算符:C+丰富运算符(共44个);按功能可分为13类,2.5 运算符和表达式,表达式:用运算符将常量、变量、函数连接起来构成的计算式 注意 参加表达式运算的量必须有确切的值,表达式经过运算后,也一定会得到一个确切的值 计算表达式的值要注意3个方面问题a、运算符的结合性b、运算符的优先等级c、数据类型的转换,问题:何为C+语句?如:a=3+4;,不同类型的混合运算的自动转换规则 不同的数据类型要先转换成同一类型后,才可运算 自动转换的特点:临时性和逐步性,2.5 运算符和表达式 -类型转换,为程序清晰,建议使用强制转化,如:(类型)变量 强转很灵活,你必须知道你在做什么! 经常用强转来解决很多“warning”.,2.5 运算符和表达式-类型转换实例,为什么出现这么多错误?,2.5 运算符和表达式 -类型转换实例,2.5 运算符和表达式 -类型转换实例,本讲重点 变量定义的内涵和外延 各种变量定义方法 常量的表示 运算符优先级、结合性 表达式计算时类型转换 另外,教材的2.1节可以不作重点看,下讲内容 运算符 C+输出和输入 参考教材的第2章,P31-40.希望大家做好预习,第2次 实验练习,1.本次实验练习共2题,要求上机完成。在第4周末之前提交。只要提交代码和执行结果 2.题目: 第1题:使用运算符sizeof()来测试在VS2008编译器环境下short ,int,long, unsigned short,unsigned int, unsigned long,char,Bool,double和float等类型的字节数,同时,设计一种方法测试float类型能保留的小数位数长度。将上述结果在屏幕打印出来。第2题:犀利哥故事3 (见下页),第2题:犀利哥的故事3,【问题描述】话说犀利哥有了天仙妹妹电话,电话热线不断。一天,电话之后,犀利哥“杯具”了:妹妹她妈要彩礼10万元,否则就被OUT。可怜哥哥家里穷得叮当响,除了两只小羊外,一无所有。他看着家里仅有的两只羊道:“羊呀羊,你要是能每个月为咱家生一对羊该多好啊!这样我就能拿你们去卖钱!半年后我或许就凑满彩礼。大家编程帮犀利哥算算:6个月是否可筹齐彩礼?编程打印每个月的“月份、羊数量和钱”。 【假设】犀利哥家的两只羊是2010年1月1号生的,要在下个月的才能发育成熟生子;每一对发育成熟的羊在接下来的每个月都能生出一对小羊(一雌一雄);羊永不死亡;每只羊买10元。在上述假设下,6个月后,哥哥家会有多少只羊?能买多少钱? 【提示】结合高中数学,梳理出第1至6月份的羊数量的计算公式,第2次习题:选做题,题目要求犀利哥故事3,话说犀利哥意外接到天仙妹妹的短信,转喜为忧愁。如何保存天仙妹妹的手机号码呢?请同学帮忙设计一个存储11位手机号码软件。主要考虑用什么数据类型?试考虑多种不同方案。并根据所设定的数据类型,声明变量来存储手机号码,然后使用该变量类型在屏幕上正确地输出号码。如:存储的手机号码是13520865205,则最后输出结果应该是:13520865205,上帝是个程序员,问:上帝真能控制生活中发生的每一个细节吗? 答:如果他使用调试程序(Debugger)的话就可以,但一步步跟踪每一个变量肯定是件很烦的事,而且你也会控告他侵犯隐私。 问:为什么上帝会允许罪恶存在? 答:他原来以为在上一个版本中已经去掉所有的罪恶Bug。 问:上帝真的无所不知吗? 答:是的,他经常这么想,但也经常被自己昨天写的程序吓一跳。 问:上帝真的在七天里创建了整个世界吗? 答:他在头六天里没日没夜的工作,仅靠可口可乐和糖块过活,第七天等他回到家时发现已经被女朋友抛弃了。 问:我死后去哪儿? 答:备份磁盘。 问:有人声称听见了上帝的声音,是真的吗? 答:其实他只是收到了E-mail而已。,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号