第02章C语言基础1.ppt

上传人:本田雅阁 文档编号:2093022 上传时间:2019-02-12 格式:PPT 页数:36 大小:196.01KB
返回 下载 相关 举报
第02章C语言基础1.ppt_第1页
第1页 / 共36页
第02章C语言基础1.ppt_第2页
第2页 / 共36页
第02章C语言基础1.ppt_第3页
第3页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第02章C语言基础1.ppt》由会员分享,可在线阅读,更多相关《第02章C语言基础1.ppt(36页珍藏版)》请在三一文库上搜索。

1、上一章内容回顾,C语言中的基本符号集 关键字 标识符 简单的C程序 #include “stdio.h” void main() ,第2章 C语言基础1,C语言中的数据和数据类型 运算符 表达式 语句 数据输入/输出语句,思考1,1、现有两个容积相等的容器X和Y,里面装的都是水(水的多少不一),如何将两个容器里的水交换? 需要借用一个容积相同的容器,比如Z,思考2,2、上一题中,假设是两个容积不相等的容器X和Y,能否交换?,思考3,3、现有两个容器,一个水瓶和一个竹篮,水瓶里装的是水,竹篮里装的是石头,两个容器里的东西能否交换?,2.1.1 数据类型 这是个有类型的世界1/3,问题1:现实生活

2、,有哪些信息可以用计算机可以管理呢? 职工、学员、客户、工资、原材料、产品、商品现实中实现用计算机管理的信息已是无数。 问题2:职工又有什么信息呢? 职工有姓名、性别、出生年月、家庭住址、电话,婚否、工龄、工种、工资、等等。 这两个问题你可能回答得不错,现在,考验你前面有没有认真学习的时刻到了,请看下面这个问题: 所有的这些信息,在计算机里都是以什么样的数据形式来表达呢? 请自觉闭上眼睛,想一想。,这是个有类型的世界2/3,再看以下的各种回答。 “二进制数”,正确。 “已数字化的数据”,也算正确。 “0和1”,正确。 “机器语言”,正确,你还记得以前讲过的内容啊,不错。 本章需要继续的一个问题

3、就由此开始:所有的信息都用机器语言那些0和1表达,那你我编写程序岂不很难?,这是个有类型的世界3/3,数据类型,就是计算机语言向人类语言靠近时,走出的第一步,很重要的一步。(机器语言或汇编语里,没有数据类型一说。) 人类的世界,是有类型的世界。 树木花草,归一类:植物; 猪狗猫羊,动物; 金银铜铁,金属; 你我他她,人类。(不要告诉我你不是人类,在这虚拟的网络的世界) 如果你找一个人,对他说:“你等于一块臭石头”,他一定暴跳如雷。为什么呢?学了这一章,我们就可以从程序的角度来解释了:人和石头不是一类型,不适于做赋值操作。 上帝创造世界时,是不允许人“类”变为石头“类”的。 (想和上帝做同行?快

4、做个程序员吧。),理解数据类型,“数据类型”就是这么一个很好理解的概念。我们的重点是了解在计算机编程世界中,有哪些基本的数据类型?在人类世界里,数据类型那就多了,把人类的对万物划分类型的方法照搬入计算机世界,显然不可能。怎么办呢?方法就是:抽象。 计算机先哲们为我们做了这一切。其中,最重要类型,也称为C/C+语言的基本数据类型,只有两个:“数值”和“字符”。 第一是“数值型”。在职工的信息中,譬如年纪,工龄、工资就有了归属。 第二是“字符型”。像职工姓名或家庭住址,这些由字符类型的数据组成。 你可能想不到的还有,职工的电话号码 010-1234567,这也是由字符类型数据组成。0、1、2、3不

5、是数字吗?应该属于上面的“数值”类型吧?-把两个电话号码进行相加或相减的操作是没有意义的。 在C/C+中,“字符类型”其实也可归入数值类型。在某些情况下,它仍然会被用来参与计算。比如在计算机中,字符A加1后,会得到下一个字符B,这种操作符合我们的习惯。,理解数值型:整型和实型1/2,“数值类型又被分为“整型(int)”和“实型(float)”。整型就是不带小数位的数,而实型则是指带小数位的数,也称为“浮点数(float)”。 我们在生活中一般并不做如此区分。譬如说鸡蛋的价格罢,今儿便宜了,一斤2块整,但这不防碍明儿价涨了,我们说成:涨了,2.30元一斤。在编程时可不能这样,你必须事先考虑到鸡蛋

6、的价格是必须带小数的,就算现在是2块整,也得将价格定为实型,否则,涨成2块3时,计算机会把那0.3元给丢了,还是变成2元整。 你会问:为什么不直接就定一个实型就好呢?实型不就包含了整型的值吗(如2.0等于2元)?,理解数值型:整型和实型2/2,答案很简单:因为在计算机里,对整数的运算要远远快于对浮点数的运算,所以,在人类的思维习惯与计算机特点之间,必须做一个折衷。 折衷的结果就是虽然都是数值类型,但程序员在程序时,必须事先想好,哪些数据是必须带小数计算的,那些数据定为实型,比如工资,没有哪个员工会认为老板可以将自已工资中的小数位忽略不计;而那些可以不用,或者可以不计较小数的数值,则被建议设计成

7、整型,比如人的年纪,虽然可以,但我们很少需要有类似1.6岁这种说法。想想,假如一位女士说自已28岁,而你却立刻纠正她:“不,准确地说,您已经28.7岁了”结局会怎样呢?为了那0.7岁,不仅你的程序会跑得慢,而且会倍受女人的白眼杀伤。 想想其实也很自然:工资必须设计成实型,而年龄虽然不是必须,但建议设计成整型。,理解数值的范围1/3,顾及计算机的运行速度,人(程序员)做出了妥协,必须面对“整型”或“实型”的考虑。 另一方面,和速度同样重要的是计算机的空间的考虑。它让程序员必须再做一步妥协。 小时候你一定有过这样的经历:你说100,另一个小伙伴就说101。你说1000,他就说1001,你说1000

8、0,他就说:那我10001。总之他就是要比你大1。 这种游戏不会有分出胜负的结局,只会让你郁闷为什么就不能有个最大数让你说了以后,那家伙就再了无法往上加1了!现在你学编程,儿时的“妄想”终于在计算机的世界中实现了。在计算机世界中,你可以说一个数,当别人再住这个数加1时,真不幸,计算机会告诉他说:加1是加1了,可是结果变成0,甚至是负数。,理解数值的范围2/3,这就是计算机的空间问题:任何一个量,都有一个大的上限,和小的下限,出了这个范围(比上限还大,比下限还小),就会称为溢出(Overflow)。 这是一种物理的现实,也是一种人为的规定。 为什么要这样规定? 原因是计算机的存储器,特别是其中很

9、重要的内存,其可存储的数据多少总是有限度。(而且,同样大小数,2进制的表达形式比10进制长得多),如果允许编程像生活中一样任何一个数都可以很大很大,也就是这个量表达起来将很长很长,那么存储器的空间就会很快用完!(无穷大就不用说了,因为不可能有无穷大的存储器)。,理解数值的范围3/3,数值类型在被划分为整型和实型后,将根据所占用的空间而被继续划分为几种不同类型。而我们,在考虑工资必须设计成带小数的实型后,必须再面对一个设计上的考虑,工资这个量在程序里要占多大空间?依据其实很简单,就看你的单位最高月薪是多少,凭此找到一个合适的类型。比如月薪不超过1万元,那我们选择一个刚刚可以包含10000的数据类

10、型。 任何一种基本数据类型,都有其范围。比如字符类型,它的最大值是255,那么,当一个数在其类型的范围已经是最大值时,如果再往上加1,就会造成“溢出”。 举例:2字节的整型,求其取值范围。 其实,有限定的范围的数量,并不只在计算机中出现。钟表就是一个例子。10点再加1点是11点,再加1点是12点,可是再加1点,就又回到1点。再如汽车的行程表,假设最多只能显示99999公里,当达到最高值后继续行驶,行程表就会显示为00000公里。,理解有符号数与无符号数1/2,回头看上一节,我们所讲的数都是正数。同样是年纪和工资,前者不需要有负值,但后者可能需要至少所有的老板都这样认为。 就像我们必须决定某个量

11、使用整数还是实数,使用多大的范围数一样,我们必须自已决定某个量是否需要正负。 在计算机中,可以区分正负的类型,称为有符号类型signed,无正负的类型(只有正值),称为无符号类型unsigned。 数值类型分为整型或实型,其中整型又分为无符号类型或有符号类型,而实型则只有有符号类型。 字符类型也分为有符号和无符号类型。 那么,负数在计算机中如何表示呢?,答案是:负数用补码表示! 思考1:单字节数和双字节数的 1 在计算机里是怎么表示的? 思考2:无符号类型的单字节数255在计算机里是怎么表示的?,理解有符号数与无符号数2/2,可能有同学这时会混了:为什么 1111 1111 有时表示255,有

12、时又表示-1? 答案:你自已决定一个数是有符号还是无符号的。 写程序时,指定一个量是有符号的,那么当这个量的二进制各位上都是1时,它表示的数就是-1; 相反,如果事选声明这个量是无符号的,此时它表示的就是该量允许的最大值,对于一个字节的数来说,最大值就是255。,基本数据类型1/3,C语言中的数据类型主要包括以下几种:,基本类型:整型、实型(浮点型)、字符型、 空类型 构造类型:数组、结构、联合、指针类型,基本数据类型2/3,基本数据类型3/3,有 short int (短整型) ,所以也就有对应 long int (长整型)。long int 用于表示4个字节(32位)的整数。 在我们现在普

13、通使用的32位计算机中,int 默认就是4个字节,所以long也是可以省略的(long int 和 int 完全一样)。 (较早几年,也就是Windows 3.1/DOS 流行的时候,那时的机器及操作系统都是16位的,这种情况下,int 默认是16位的。此时,如果想实现32位整数,就必须定义为这样的类型:long int)。 在浮点数方面,我们最常用的将是 double。它的精度适合于我们日常中的各种运算。当然,float的精度也在很多情况下也是符合要求的。,2.1.2 常量,C语言中的数据,有常量和变量之分,它们分别属于上述这些数据类型。 常量:程序运行过程中,其值不能被改变的量。常量分为不

14、同的类型:整型常量、实型常量、字符常量,这种从其字面形式即可判断的常量称为字面(直接)常量。 通常,常量还以一种符号形式存在(即用符号代表一个常量),称为符号常量。如:,#define PI 3.1416 #define Salary_Wang 1200,含义清晰 能做到“一改全改”,问题:使用符号常量的好处?,整型常量的表示方法,整型常量即整常数,在语言中可用三种形式表示: 十进制。例如10、36。 八进制(以数字开头)。例如012。 十六进制(以数字+字母x(大小写均可)。例如0x36 。,有时,你也会看到一些老的代码中,在一些整型常后面加一个大写或小写的 L 字母。如:989L 这是什么

15、意思呢?原来,一个常数如果其范围允许,那么计算机默认将其认为是 int 类型的,那么要让计算机把某个数认为是 long int类型,就可以在其后面加 L 或 l。不过,这在以前的16位机器才有意义了。现在,我们的机器都是32位,long int 和 int 完全一样,都是占用4个字节,所以,我们没有必要这样用了。,实型常量的表示方法1/2,实型数在语言中称为浮点(float)数,它有两种表示形式: 使用十进制表示。例如:3.14、9.8。 指数形式:E(e)。例如3.0+5等。 在此需要注意的是“规范化的指数形式”的写法。即:在字母e或E之前的小数部分中,小数点前应该有且仅有一个非零的数字。,

16、实型常量的表示方法2/2,我们学过的实数数据类型有:float,double,long double。默认的常数类型是double。 比如你写:1.234; 那么,C+按double类型为这个数分配内存,也就是说为它分配8个字节。如果要改变这一点,可以通过加后缀字母来实现。 加 f 或 F,指定为float类型。 加 l 或 L, 指定为double类型。 以下示例: 12.3f /float类型 12.3 /默认类型(double) 12.3L /long double类型 1.23e400 /long double类型,因为值已不在double类型的取值范围内2.23*10-308 1.7

17、9*10308,字符型常量的表示方法,在语言中,字符型常量是用单引号括起来的一个字符。例如,A、等。 此外,语言还允许使用一种特殊形式的字符常量,就是以反斜杠“ ”开头的转义字符(意思是将反斜杠后面的字符转化为别的意思,见教材P28表2.2)。 问题:为什么要使用转义字符。,字符数据在内存中的存储,字符类型关键字为char,所有的C系统都规定以一个字节来存放一个字符。实际上,这一个字节的存储空间存放的是该字符相应的ASCII值。 所以,字符型数据和整型数据是通用的。C语言的这种对字符型数据的处理方法增大了编程的自由度(例子:大小写字母转换)。 另外,字符型变量也有两种:char、unsigne

18、d char,在使用时,要想输出ASCII表后128位的字符,就要使用unsigned char类型。 思考题:用字符形式输出一个大于256的数值,会得到什么结果?,字符串常量,字符串常量是由一对双括号括起来的若干字符序列。字符串中字符的个数称为字符串长度。长度为0的字符串(即一个字符都没有的字符串)称为空串,表示为“ ” (一对紧连的双引号)。 问题:求字符串“How do you do!”的长度? 答案:14(空格也是一个字符)。 如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。 例如:(1)C:msdosv6.22 “C:msdosv6.22“ (2)I say:“Good

19、bye!“ “I say:“Goodbye!“,字符串的存储,C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个0作为字符串的结束标志。 注意:在源程序中书写字符串常量时,不必加结束字符0,否则画蛇添足。 如果有一个字符串为“CHINA”,则它在内存中的实际存储如下所示:,最后一个字符0是系统自动加上的,它占用字节而非字节内存空间。,字符与字符串的比较,定界符不同:字符常量使用单引号,而字符串常量使用双引号; 长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数; 存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,

20、还要存储一个结束标志0。,2.1.3 变量,变量:在程序运行过程中,其值可以被改变的量。一个变量应该有一个名字,用以标识别自己;另外,它还要在内存中占据一定的存储单元,用以存放数据。 所以,变量具有两个要素:变量名(变量命名遵循标识符命名规则);变量值。,实际上,变量名是一个符号地址,在编译连接时由系统分配一个内存地址。在程序运行过程中,变量值存储在内存中,并通过变量名来引用变量的值,变量的定义,在语言中,要求对所有用到的变量,必须“先定义、后使用”。 变量定义的一般格式: 存储类型 数据类型 变量名, 变量名2; 例如:float radius, length, area; 变量定义的好处:

21、 保证变量在程序运行过程中得以正确使用。 便于系统在编译过程中分配不同的存储空间。 便于对变量使用合法性的检验。,变量的初始化,在语言中,我们对变量赋值可以使用赋值语句也可以在定义时直接初始化。我们称在定义变量的同时进行赋初值的操作为变量初始化。,变量初始化的一般格式: 存储类型 数据类型 变量名=初值, 变量名2=初值2; 例如,float radius=2.5, length, area;,实际上,变量的初始化在程序进行解释时相当于一个赋值语句。如上式实际为: float radius, length, area; radius=2.5;,思考:如果我们不赋初值,变量是否就没有值呢?,各种

22、数据类型间的混合运算(1),在语言中,整型、实型和字符型数据间可以混合运算(因为字符数据与整型数据可以通用)。 如果一个运算符两侧的操作数的数据类型不同,则系统按“先转换、后运算”的原则,首先将数据自动转换成同一类型,然后在同一类型数据间进行运算。,各种数据类型间的混合运算(2),横向向左的箭头,表示必须的转换。char和short 型必须转换成 int 型,float型必须转换成double型。 纵向向上的箭头,表示不同类型的转换方向。 注意:1、箭头方向只表示数据类型由低向高转换,不要理解为int型先转换成unsigned型,再转换成long型,最后转换成double型。2、结果为其中的高

23、级类型。3、上述转换为系统自动完成。,转换规则如图所示。小容器无法装超出容量的东西。大容器可以装小于容量的东西。,强制类型转换,除自动转换外,语言也允许强制转换。数据类型强制转换的一般格式为: (要转换成的数据类型)(被转换的表达式) 当被转换的表达式是一个简单表达式时,外面的一对圆括号可以缺省。 例如:(double)a 等价于(double)(a) 求值:(float)5 / 2、(float)(5 / 2) 注意:强制转换类型得到的是一个所需类型的中间量,原表达式类型并不发生变化。例如,(double)a 只是将变量a的值转换成一个double型的中间量,其数据类型并未转换成double型。,课后习题,P552、3、4、12、15、21、23,上机安排,编写第一个C语言程序(P24-11)。 调试或改写例题1-1 和 1-2 实验一,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1