C语言基本语法元素.ppt_第1页
C语言基本语法元素.ppt_第2页
C语言基本语法元素.ppt_第3页
C语言基本语法元素.ppt_第4页
C语言基本语法元素.ppt_第5页
已阅读5页,还剩113页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言程序设计教程,第2章:C 语言基本语法元素 (3课时),提纲,计算机内数的表示 数据类型 量与表达式 语 句 本章小结,程序和数据,通常程序要对数据进行操作处理: 处理的对象是数据 通过运算符和表达式进行操作 举例: 文字处理软件 数值计算软件 多媒体软件 你如何描述数据?,数据在程序如何描述?,为什么不使用:0和1组成的位串? 程序设计语言本身提供某种程度的抽象。 C语言中数据类型分为三大类: 基本类型 构造类型 指针类型 带来了什么好处?,例如:,计算圆的面积,半径为 5 cm。 程序如下:,main( ) float r, area ; r=5 ; area=3.14*r*r; p

2、rintf (%fn , area) ; ,运算结果是输出圆的面积:78.500000,程序中用到的数据:r、area、5、3.14 对数据进行的运算:* 、=,分析:,计算机操作处理时,要完成以下工作: 在内存中给半径 r 和运算结果 area 开辟存储空间,存放它们的值。应该留多大的地方来存放它们的值? 数据 5 和 3.14 与 r 、area 不同,它们是在编写程序时就给出确定的值,在运算过程中不会改变。这样的数计算机怎么处理? 对整数 5 和小数3.14 ,计算机存放时是否有区别?,涉及数据类型 的基本知识,C语言的数据类型,C数据类型,本章讨论 基本类型数据,计算机中数的表示 数值

3、数据:表示数量的多少。 数据 非数值数据:表示符号、标记。 我们讨论各类数据的表示方法,就是讨论它们在计算机内的存储格式和编码规则。,如字母、汉字、标点符号、运算符等。,R进制计数法 数制 就是用一组固定的数码和一套统一的运算规则表示数值的方法。例如: 十进制使用10个数码(09),计数规则是“逢十进一”。 二进制使用2个数码(0,1),计数规则是“逢二进一”。 八进制使用8个数码(07),计数规则是“逢八进一”。 十六进制使用16个数码( 09,A,B,C,D,E,F),计数规则是“逢十六进一”。,基数(R) 是指一种数制中所使用的数码个数。 十进制使用10个数码,基数R=10; 二进制使用

4、2个数码,基数R=2; 同样,八进制的基数R=8;十六进制的基数R=16。 由以上四种数制可以看出一个规律: 各种数制中,最小的数码都是0,最大的数码都比基数小1 ( R1)。,练习与讨论,1. 有人说:“2008不可能是八进制数”,这种说法对吗?,对。 因为八进制数中没有数码8。2008可能是十进制数,也可能是十六进制数。,位权 在一个数中,同一个数码处于不同位置所代表的值不同。 例如,十进制数111.8中有3个1,它们分别表示100、10、1。111.8 可以写成如下形式: 111.8=1102 +1101 +1100 + 810-1 其中,以基数10为底的整数幂(如102,101,100

5、,10-1 ) 称为各位的位权。 上式等号右面的多项式称为按权展开式。,同理,二进制数1011 B可以按权展开: 1011 B=123 + 022 + 121 + 120 其中,以基数2为底的整数幂就是各位的权: 位: 1 0 1 1 位权:23 22 21 20,四种数制间的转换 1. 二进制数与十进制数之间的转换 二进制数十进制数 方法:按权展开求和。 例1. 1101 B = D,1101 B =,123,+ 122,+ 021,+ 120,= 8 + 4 + 0 + 1,= 13,13, 十进制整数二进制整数 方法:除2取余,余数倒序排列。 例2. 13 = B,0 1,1101,商为

6、0,除法停止, 十进制小数二进制小数 方法:乘2取整,整数正序排列。 例3. 0.125 = B,0.250,小数部分为0,乘法停止,0.001,例4. 0.43 = B 0.43 2 0 0.86 2 1 1.72 (取走整数) 0.72 2 1 1.44 (取走整数) 0.44 2 0 0.88, 0.430.0110 B 误差小于2-4,例5. 13.125 = B 方法: 先把整数部分13转换成二进制整数1101; 再把小数部分0.125转换成二进制小数0.001; 把两部分写在一起:1101.001B,2. 二进制数 八进制数 先看 表1-1。从表中可看出如下规律: 二进制数八进制数

7、 方法:先将二进制数从小数点开始,向左或向右每3位分成一组,再将每一组写成1位八进制数。 例6. 1011101.11 B = 001 011 101. 110 B = 135.6 Q,3位二进制数对应1位八进制数; 4位二进制数对应1位十六进制数。, 八进制数二进制数 方法:将每1位八进制数直接写成3位二进制数。 例7. 237 Q = 010 011 111 B = 10011111 B,3. 二进制数 十六进制数 二进制数十六进制数 方法:将二进制数从小数点开始,每4位分成一组,再将每一组写成1位十六进制数。 例8. 1011100 B = 0101 1100 B = 5C H, 十六进

8、制数二进制数 方法 :将每1位十六进制数直接写成4位二进制数。 例9. 1C8 H = 0001 1100 1000 B = 111001000 B,注:十进制数 八进制数 十进制数 十六进制数 方法与十进制数 二进制数类似。 例10. 127 Q = D 127 Q = 182 + 281 +780 = 64 +16 + 7 = 87,例11. 100 = H 方法:除基取余。,6,0,64,提示:当数值较大时(如226),为了减少除法次数,以减少出错机会,更好的方法是: 十进制数十六进制数二进制数,10 0 10 B,8 0 H,数值数据有两种表示方法,例如: 后缀法 下标法 1010 B

9、 (1010)2 6072 Q (6072)8 985 D 或 985 (985)10 或 985 9F0 H (9F0)16 0B407 H (B407)16,十六进制数以字母开头时,前面加0,计算机中数据的编码方法 数值数据包括整数和实数。在计算机内部都用二进制表示。 实数表示形式有两种:小数和指数。为了便于理解,用十进制与二进制进行对比: 十进制 二进制 小数形式 1.5 1.1 B 指数形式 1.5*100 1.1*200B 或 0.15*101 0.11*201B 或 0.015*102 0.011*210B,规格化 形式,中整数部分为0,小数部分最高位不为0。 在计算机中,只能用有

10、限个二进制位存储一个数。在这有限个二进制位(如32位)中,尾数和指数各占多少位,才能使精度最高、数的表示范围最大呢?C语言采用IEEE(美国电气和电子工程师学会)格式:符号位占1位,指数占8位,尾数占23位。具体格式将在第9章介绍。 下面介绍整数的编码。,数据的原码、反码和补码表示 我们以8位二进制数为例,介绍整数编码的概念和方法。用8个二进制位表示1个整数时,各位的序号是: 7 6 5 4 3 2 1 0 1. 原码表示法 最高位为符号位,其余各位表示数的绝对值。,符号位:0 表示正,1 表示负,例如:3的原码: 0 0 0 0 0 0 1 1 3的原码: 1 0 0 0 0 0 1 1 表

11、示范围:1111111101111111 127127 即 (27 1)(27 1) 原码的缺点: 零的表示不唯一:00000000 10000000 运算时,要对数的不同符号作不同的处理,相当麻烦。,2. 反码表示法 正数的反码同原码。 负数的反码:符号位为1,其余各位是其原码的按位取反。 例如: 3的原码:1 0 0 0 0 0 1 1 3的反码:1 1 1 1 1 1 0 0 表示范围:10000000 01111111 即 127 127 反码也有两个零,使用也不方便。引入反码的目的是通过它来求补码。,3. 补码表示法 正数的补码同原码。 负数的补码:符号位仍为1,在其反码的末位加1便

12、得到补码。 例如: 3的原码:1 0 0 0 0 0 1 1 3的反码:1 1 1 1 1 1 0 0 3的补码:1 1 1 1 1 1 0 1 表示范围:10000000 01111111 128 127 即27 (271),补码的变化规律(128127)* 127 01111111 126 01111110 2 00000010 1 00000001 0 00000000 1 11111111 2 11111110 127 10000001 128 10000000,练习与讨论,4. 请写出10和10的8位二进制补码。,注意:负数的补码不表示真值,再对其求一次补码才是真值。,10的补码:0

13、0001010 10的原码:10001010 10的反码:11110101 10的补码:11110110,练习与讨论,5. 8位二进制补码能够表示的数值范围是 。 超过此范围的数如何表示?,128127,用16位或32位来表示更大的数,ASCII码字符的编码 字符编码就是规定用怎样的二进制码来表示字母、数字及各种符号,以便计算机能够识别、存储和处理它们。 在微机中,字符编码采用ASCII(美国信息交换标准代码)。 ASCII码有7位和8位两种版本。7位ASCII码是国际标准(见教材P539附录A) 。 1个字符的ASCII码虽然是7位,但是字节是基本存储单位,所以1个字符必须占1个字,节,最高

14、位置0。 表中,ASCII码为031和127总共33个字符为控制符,如回车符CR、换行符LF、删除符DEL等,控制符主要用于数据传输。 ASCII码为32126的字符是可打印字符(其中SP表示空格),这些字符用于显示或打印输出。由ASCII码表可以看出如下规律: 小写字母的ASCII码比其大写字母的ASCII码大32。例如,A的ASCII码为65,a的ASCII码为65+32=97。, 阿拉伯数字0的ASCII码为48,1的ASCII码为49,依次递增。 只要记住两个ASCII码和一条规律,便能计算出所有字母和数字字符的ASCII码 : 例如,d是第4个英文字母,所以d的ASCII码为: 65

15、+41+32=100 6排在0后面第6个位置,所以6的ASCII码为:48+6=54,A65,048 小写字母ASCII码比其大写字母ASCII码大32,扩展ASCII码* 采用8位编码,最高位是1,从1000000011111111(128255),可表示127个符号,如希腊字母、等,数学符号、等,拼音字母、等等。 汉字也是非数值数据,其编码方法比较复杂,请参考第5章。,练习与讨论,6*. 计算机中为什么使用二进制?, 可靠性 二进制使用的数码少,传输和处理时不易出错,因而可以保障计算机具有很高的可靠性。 二进制数与十进制数之间的自动转换很容易实现。人们使用计算机时可以仍然使用熟悉的十进制数

16、,这给工作带来极大的方便。,计算机中采用二进制,是因为二进制具有许多优点,例如: 可行性 二进制仅使用0和1两个数码,用双稳态电路表示二进制数很容易实现。 简易性 与十进制数相比,二进制数的运算规则简单。这可以使运算器的结构得到简化,有利于提高运算速度。 逻辑性 二进制中的1和0可以分别表示逻辑值“真”和“假”,容易实现逻辑运算。,基本数据类型,C99又增加了三种类型:_Bool , _Complex , _Imaginary,字符型数据,字符型数据char,分配 1 Byte 字符型数据是指字母、数字、各种符号等用ASCII值表示的字符 例如 a 是一个char类型数据,称作字符常量,存储:

17、,0 1 1 0 0 0 0 1,整型数据,基本整型数据 int 数据类型的尺寸:为了移植性考虑,标准并未指定,通常和程序执行环境的字长相同。 C语言规定了每种类型的最小范围。 整型数据均以二进制补码形式存储。 类型修饰符: signed(有符号) unsigned (无符号) long (长型) short (短型),实型数据,1实型数据的类型 单精度实型数据 float,分配4 Byte 双精度实型数据double,分配 8 Byte 2实型数据的存储,单精度实型,指数部分,小数部分,小数的符号位,指数的符号位,数据表示范围,常量、变量与标准函数,主要内容: 常量 变量 标准库函数,常量,

18、在运行程序的过程中值保持不变的量 1整型常量 十进制:09 八进制:07,以 0开头 十六进制:09,AF/af,以 0 x或 0X 开头,例如: 100 -8 0 +123 010 024 0100 073 0 x38 0 x10 0X10 0XFF 0 x0a,整型常量,整型常量的类型: 根据值大小默认类型。 整型常量后面加l或L,则认为是long int型 例如:123L、0L、432l、0 x100l,注意: 十六进制常量中可以使用大写字母AF,也可以使用小写字母af。 八进制常量中不能出现数字 8 或 9 例如:018、0921非法,实型常量,十进制形式 1.0 1. +12.0 -

19、12.0 0.0 指数形式 1e3 1.8e-3 -123E-6 -.1E-3,指数只能是整数,而尾数则可以是整数也可以是小数 ,无论指数或尾数均不能省略 例如:1e、E.5、E-3 非法 实型常量的类型:默认为double型,后面加F(或f),则强调表示该数是float类型 例如:3.5f、1e2F,字符型常量,可视字符常量 单引号括起来的单个可视字符 例如:a、A 、+ 、3、 等 转义字符常量 单引号括起来的 与可视字符组合,例如:,字符串常量,用双引号括起的一个字符序列 例如:ABC、123、a、 nt nGood morning 字符串常量的长度 : 所包含的字符个数 字符串常量的存

20、储方式:,所占存储单元数:串长度1 例如:,字符串 结束标记,符号常量,以标识符来代表的常量 事先编译预处理命令define定义 编译时先由系统替换为它所代表的常量,再进行编译 例如:,#define LEN 2.5 main( ) float a,b; a= 2*3.14 *LEN; b=3.14*LEN*LEN; printf(a=%f,b=%fn,a,b); ,编译前系统进行替换,符号常量,main( ) float a,b; a= 2*3.14 *2.5; b=3.14*2.5*2.5; printf(a=%f, b=%fn,a,b); ,define是编译预处理命令,必须以“#”开头

21、,替换为,变量,变量的有关概念 在程序运行过程中,其值改变的数据,称为变量,变量用标识符表示,称为变量名。 变量必须“先定义后使用” 系统为变量分配存储单元,存储变量的值。 编写程序时通过变量名来存、取变量值。,例如: 有变量a 它的值是510,变量定义,变量定义的一般格式: 数据类型说明符 变量列表; 例如:int i, j; long k, m; float x,y; char ch1,ch2;,必须使用合法的标识符作变量名 不能使用关键字为变量命名,变量 在程序运行过程中,其值可以改变的量称为变量。 C语言规定:, 变量名、数组名、函数名、文件名等标识符只能由字母、数字和下划线组成,且第

22、1个字符必须是字母或下划线; 标识符最大长度不要超过32个字符。,例如,下面的变量名是合法的: sum, number_1, _add 而 $56, 3a , a5是非法的变量名。 注意:变量名中的字母区分大小写。如: sum 和Sum 是两个不同的变量。 变量在使用前,必须先定义,指明它为何种类型,然后才能在程序中使用它。如: int n; n被定义为整型,在程序中,通过变量名找到内存单元的地址,从中读取它的值。 为了增加程序的可读性,建议大家使用能够“见名知意”的标识符。例如,name、sum比n、s的含义更明确,可读性更好。,变量的初始化:,允许在说明变量的时候对变量赋初值。 例如:in

23、t a=5,b=10+2; double x=23.568,y ; char ch1=a,ch2=66,ch3=142; 表示定义变量并对变量存储单元赋值。 错误的初始化: int a=3+b,b=5; float m=n=23.16;,标准库函数,由C编译系统定义的一种函数,存放在系统函数库中,用户可以根据需要随时调用 常用函数 如:printf、scanf、fabs、sqrt、sin、 (常用数学函数参见教材 P30 表2.5 ) 函数调用形式: 函数名(参数表) 例如:putchar(a) sqrt(x),运算符和表达式,主要内容: 算术运算符和算术表达式 赋值运算符和赋值表达式 关系运

24、算符和关系表达式 逻辑运算符和逻辑表达式 位运算符和位运算表达式 条件运算符和条件表达式 逗号运算符和逗号表达式 其他运算符及其运算,运算符的有关概念,作用: 对运算对象完成规定的操作运算 类型: 按运算对象分: 单目、双目、三目 按功能分: 算术、赋值、关系、逻辑 条件、逗号、位、其他,运算符的优先级和结合性,优先级 指各种运算符号的运算优先顺序 例如:算术运算优先于关系运算 算术运算中先 * / 后 + -,结合性 指运算符号和运算对象的结合方向 分为:从左向右(左结合)和从右向左(右结合) 例如:算术运算符为左结合 a-b+4 赋值运算符为右结合 a= b = 5,本章涉及的运算符,+

25、- * / % + - + - = += -= *= /= %= a=a+1 表达式的值为5,且 a=6, b=5,说明:,+ 和 - 的运算对象只能是变量(或运算结果是变量的表达式), 不能是常量(或运算结果是数值的表达式)。 例如: 5+、(a+2)+ 不合法。 具有右结合性,结合方向为从右到左。 例如: a+ 等价于 -(a+) 如果有多个运算符连续出现时,C系统尽可能多的从左到右将字符组合成一个运算符 例如: i + j 等价于 ( i+)+j -i+-j 等价于 -(i+)+(-j),赋值运算,赋值运算符(右结合) = += -= *= /= %= printf(%d %dn, a

26、,输出结果: 8 10 2 -11,0000 0000 0000 1010 printf(%xn, x 输出结果: 89,2按位或 | 设 x=0 x10; (即00010000B) y=0 x78; (即01111000B) 求 x | y。 a和b进行按位或运算,当对应位皆为0时才得0,否则得1。 0 0 0 1 0 0 0 0 | 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 结果为:78H。,3按位取反 按位取反运算符要求1个操作数。如: a 对a的每个二进制位取反的操作是: 1变0,0变1。 例如:a=0 xF9,求a。 a: 11111001 a: 0000011

27、0 即:06H,例9.2 编写程序,对整数6按位取反并输出。 #include void main( ) int n=6; printf(%x, n ); 输出结果: fff9,0F本身进行异或,就是两个相同的数进行异或。因为两个相同的数对应位都相同,根据“相同为0”的运算规则,所以每一位都是0,即结果为0。 可见,要将某寄存器或内存单元清0,用其自身值进行异或运算即可。,移位运算,例如: ab-1 等价于 (a+8)(b-1),例如:假设a=10,b=2,求ab-1,main( ) int a=10, b=2; printf(%d %dn, ab-1); ,输出结果: 40 9,请自行分析

28、运行结果,5按位左移 an 表示将a的每一位依次左移n位。左移后,右边的空位补0,左边的位移出数外。 例如:a的值为0 x85,求:a2 a: 10000101 a2: 00010100 / 左边的1和0移出 利用按位左移可实现乘2的幂运算。如:设x=00000001B,则x2为00000100(即4),这就实现了x22的运算。,6按位右移 an表示将a右移n位,右边的n位被移出。左边n位要区分情况处理: 无符号数,右移后左边n位补0; 有符号数,正数右移后左边n位补0;负数右移后左边n位补1。 例如:无符号数a的值为3 a: 00000011 a1:00000001 / 左边补0 又如:有符

29、号数b的值为3,b的原码为:10000011 b的反码为:11111100 b的补码为:11111101 b1为: 11111110 / 左边补1 再求一次补码得真值: 10000010 即:2,位 运 算 符 小 结,7由位运算构成的复合赋值运算 位运算符(按位取反运算符除外)都可以与赋值运算符构成复合赋值运算符: int b; 当a与b进行位运算时,将b由16位升格为32位(原b值占低16位)。 若b为无符号数,则左边高16位补0;,若b为有符号数,且b0,则左边高16位补0; 若b为有符号数,且b0,则左边高16位补1。 当b升格并与a进行了指定运算后,b本身值并不改变。,条件表达式运算,条件运算符:? : 条件表达式的一般形式 表达式1 ? 表达式2 : 表达式3 例如:m=10 char ch; 可以对变量a、ch、student 进行 double x; printf(%d %d ,sizeof(int),sizeof(a); printf(%d %d ,sizeof(double),sizeof(x); printf(%d %dn,sizeof(float),sizeof(char); ,输出结果:?,运算中数据类型的转换,数据类型的自动转换 转换原则:,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论