C语言第2章.ppt_第1页
C语言第2章.ppt_第2页
C语言第2章.ppt_第3页
C语言第2章.ppt_第4页
C语言第2章.ppt_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

1、第二章 数据类型、运算符与表达式,2.1. 数据类型,著名计算机科学家沃思提出: 程序数据结构算法,所以,存放数据的方式直接反映了一种语言的数据表达能力。 数据的存储方式又称之为:数据类型。,举 一个例子:以考生各科成绩及总分排队问题为列。 成绩的存放 以数组形式 排队方法 算法,前面已述. C数据类型丰富,分为:,基本类型,构造类型,指针类型,空类型,整型,字符型,实型,单精度,双精度,数组,结构体,共用体,数据有常量、变量之分,均为其中一种类型。,本章先学习基本类型。,枚举,2.2 常量与变量,2.2.1 常量和符号常量,常量 程序运行过程中不能被改变的量。,一般的数据显式写法均表示常量。

2、 如程序中: 20 整型常量 15.8 实型常量 a 字符常量,例: #define PRICE 30 main ( ) int num, total; num=10; total=num*PRICE; printf(total=%d,total); ,还可用一个符号表示一个常量 符号常量,符号常量(一般用大写,以区分变量),再如: =3.1415629 #define PAI 3.1415629,#define PRICE 30,2.2.2变量,程序执行中可以改变的量称为变量。变量包括变量名和变量值。,变量名 用标识符命名,对应一定数量的内存存贮单元,其单元数视变量类型而定。,标识符 由字母

3、、数字、下划线组成且由字母或下划线开头的字符串。,标识符可用来命名变量及作为常量名、函数名、类型名、文件名等,一个程序内不得有重复名。 如: _sum, sum, student_name, price等,习惯上,变量名、函数名等用小写字母表示。常量名用大写字母表示(以增加可读性)。,另: 需注意标识符长度,视不同系统而定。 设允许8个字符。 则: student_ name student_ number 为同一名字。,C语言中, 变量须先定义,后使用 如: int student student=30; 则若写成student=30, 则未定义, 编译时指出其错。, 一旦变量被定义,即可在

4、编译时为其分配相应数量的单元。,一旦变量被定义, 其类型便确定。则可检查其运算的合法性。,如: a % b 表示a整除以b的余,则a,b必须为整型量。,2.3整型数据,2.3.1 整型常量,整型常量 整型常数,C语言提供了三种形式 十进制 如: 256, 308, 120等, 八进制 以数字0开头表示的整数 例:0235, 0146 012等. 0235=28238515710 014618248610210 012(182)1010,十六进制 以0 x开头的整型数 如: 0 x16, 0 x28,2.3.2 整型变量,一、分类: 分为四种:基本型、短整型、长整型、无符号型,2.短整型: 用s

5、hort int或 short定义,3.长整型: 用long 或 long int 定义,1.基本型: 用int定义,4.无符号型: 不存放符号,则不带符号数.,又分无符号整型,无符号短整型, 无符号长整型。,上述各种类型所占内存单元数及取值范围视不同机器而不同。详见P13。,二、定义方法 整型变量分别以下列方式定义,2. 短整型 short int 或 short a, b, c;,3. 长整型 long int 或 long a, b, c;,1. 基本整型: int a, b, c;,4. 无符号型 unsigned a, b, c; unsigned short a, b, c; un

6、signed long a, b, c;,例: main ( ) int a, b, c, d; /*指定a, b, c, d为整型变量*/ unsignd u; /*指定u为无符号整型变量*/ a=12; b= 24; u=10;,c=a+u; d=b+u; printf(a+u=%d, b+u=%dn,c,d); ,由此看到: 不同类型的整型数据可进行算术运算。 但有一定规则,见2.7.,运行结果为 a+u=22, b+u= 14,三、关于整型常量 程序中出现的整型常数, 系统按以下规则分配变量(内存单元)或赋值给相应变量,2. 若超越,而在21474836482147483647之间,则

7、可赋给 long int 变量。,1. 当常数(量)在 3276832767之间,则可赋给int, long int 变量。,4. 一个非负整数32768 则可赋给 unsigned int。,5. 一个常数后加 l,或L,表示长整数. 如123l. 主要用于函数调用时形、实参数传递。,3. 若int, short int 长度相同,则二者皆可赋值。,2.4 实型数据,2.4.1 实型常量,有二种表示形式 1.十进制形式 如: 0.126, 523.64等,2. 指数形式 对于较大或较小的数,可用指数形式 0.0000126 1.26E 5 1260000 1.26E+6 或1.26E6 E

8、, e 均可.,分为单精度型与双精度型. 分别为 float x, y, z; (单精度) double a, b, c; (双精度),一般地: 单精度占4字节内存单元; 双精度占8字节内存单元.,2.4.2 实型变量,注意: 不同机器对实型变量的有效数字长度的限制 如: pc机, 单精度一般为7位, 双精度15位,单精度数值: 10381038 双精度数值: 1030810308,于是: float a; a=123456.789 则实际赋值a123456.7,2.5 字符型数据,用一对单引号括起来的单个字符。 如 a , A , 二者不一样.,此外,以 开头后接一个字符或n个字符代表了一种

9、特殊字符常量。 转义字符。 如 n 换行, r 回车,2.5.1 字符常量,其它如下表:,字符形式,n,t,v,b,r,f,ddd,xxh,功能,换行,横向跳格(即跳到下一个输出区),竖向跳格,退格,回车,走纸换页,反斜杠字符“ ”,单引号(撇号)字符,1到3位8进制数所代表的字符,1到2位16进制数所代表的字符,注意: 表示ASCII码字符,三位八进制,如 101 表示字母A,又: x 十六进制ASCII 字符 x 41 表示字母A,其定义方式为: char c1, c2; c1= A ; c2= B ; 字符变量只占一个字节单元。,2.5.2 字符变量,用来存放一个字符的变量.,一个字符存

10、入一个字符变量。其对应单元存放的是其ASCII码,即ASCII码的二进制形式。,由此: 字符变量中的数据是一整型数据。输出时既可输出字符,亦可输出整数,且字符变量可作整数运算。,2.5.3 字符数据的实际存放形式,例1: main ( ) char c1, c2; c1=97; c2=98; printf (%c %c, c1, c2) ,运行结果 a b,看如下几个例子:,例2: main ( ) char c1, c2; c1= a ; c2= b ; c1=c1 32; c2=c2 32; printf (%c %c, c1, c2) ,运行结果 A B,例3: main ( ) int

11、 i; char c; i= a ; c=97; printf (%c, %d n, c, c); printf (%c, %d n, i, i); ,运行结果: a , 97 a , 97, 有的系统将一个字节的整型变量的最高位,作为符号。这时对0127之间的字符可输出正整数(ASCII)。但128255字符最高位为1, 则作为负数输出。, 由此最好用unsigned int 存放字符整数(ASCII)。,注:,用双引号括起来的字符串。 例: Good Morning! 注意A 与A是不同,字符串存放时,在最后加上/ 0 空字符。 于是:,Good Morning ! /0,2.5.4 字符

12、串常量,A ,A /0,但A,A,注意: 1. 字符串长度=实际字符个数+1,但最后0不输出. printf ( Good Morning! ),此处不写 /0。 自动加上。,2. 单个字符的字符串不能赋给字符变量。 例: char c; c= a ; 是错误的。,2.6 变量赋初值,C语言允许定义变量时赋予初值。 如: int i = 6; float x=8.35; char c =6;,*也可对某个变量赋初值: int a, b,c = 6;,*不可能将同初值的变量赋初值时写成: int a=b=c=6; 只能: int a=6, b=6, c=6;,定义变量时赋初值实际上是在运行时执行

13、一个赋初值语句: int a=6; 相当于: int a; a=6;,2.7各类数值型数据间的混合运算,C语言允许双精度、单精度、整型及字符数据之间混合运算 10+a+1.58765.1234 b 是允许的。,但有一个规则:先转换成同一类型,再计算。,double float,高低,图中“ ” 表示必定转换。如a + b,先转换为int。结果为 int。,转换方法:,long,unsigned,int char, short,即: 既使是同一种类型也按 转换。,图中“ ” : 表示低, 高型数据运算时,均先转换为高型。,例: 10+ a+if d /e,其中: i int f float d

14、double e long, 10+a: 转为int, 结果为int, if: 转为double, 结果为double, + : 转为double, d /e : 转为double, :转为double,则运算时:,2.8 算术运算符与 算术表达式,运算符: 运算的符号表示。 C语言有丰富的运算功能,先简述之,2.8.1. C运算符,1. 算术运算符 +, , , /, % , 等,3. 逻辑运算符 !, ,又如: (int) (x+y) 若省略: (int)x+y会变成将x转成整型.,(int)x; 则x本身仍为实型,而(int)x由一个中间变量(整)存放x的整数部分。,例: main (

15、) float x; int i; x=3.6; i= (int) x; printf (x=%d, x, i); ,则: x=3.600000, i=3.,总结以上类型转换,有二种: 1. 强制,另: 强制类型转换运算优先于算术运算符.,2. 系统自动,如: 若x为float, 则x%3不合法。 但可用(int)x%3来解决。(附录III介绍了优先级),四、自增,自减运算符,设有int i = 3;,+ + 自增1, 自减1,则: + +i, i+都会使i变为4,但有区别:,+i: 先使i值+1,再使用i值;,i+: 先使用i值,再使i值+1.,j= +i; j=4, i=4. (i=i+1

16、; j=i;),j=i+; j=3, i=4. (j=i; i=i+1),同理: i, i ,均使i值1,但:,又如: printf (i=%dn, i+); 结果: i=3,若: printf (i=%dn, +i); 结果: i=4, i: 先使i值1,再使用i值;,i : 先使用i值,再使i值1,i=3;,几点注意: 1. +和 运算法只能用于变量,不得用于常量和表达式.,2. +, ,的结合性为从右至左,而一般算术运算符为从左至右。如:,如 5+ +, (a+b)+ +均为不合法.,i+ 和+ +为同一优先级.,i+相当于(i+),若 i=3, 则结果为3, i为4. +, 主要用于循

17、环变量自增或自减。,1. 要慎用+、 运算符。,五、有关表达式使用中的问题说明,则:先对i进行3次自加,为6,然后三个i相加为18,而i为6。,如: 表达式(i+)+(i+)+(i+) (i=3) 一般认为: 从左至右: 3+4+5=12,i6.,但Turbo C. MSC 都是先取三个原值 相加: i+i+i=9 i6,如果表达式数为: k=(+i)+(+i)+(+i),2. 在表达式中,有的运算符为一个字符,有的为两个字符。,3. 在函数调用时,如:,一般地: 自左至右尽可能多地将若干字符组成一个运算符。,例: i+j, 究竟理解为(i+)+j还是i+(+j)?,printf(%d, %d

18、, i, i+);,若i=3, 若参数计算从左至右, 则输出 3, 3,若从右至左, 则输出4, 3,上述问题看似复杂,最好上机实践.,2.9 赋值运算符和 赋值表达式,符号 = 为赋值运算符。,2. 整型数据赋给实型变量,数值不变,但按实数形式存放.,1. 将实型数据(无论单,双精度)赋给整型变量时,舍弃小数.,赋值时,两边类型若不一致,则按以下规则转换:,4. 将intlong int, 进行符号扩展。 即: 符号扩展, 低16位long 的低16位。,5. long int int 则高16位截断。,3. 字符型数据赋给整型变量时:,(2)字符带符号整型变量,则字符高位扩展。,(1)字符

19、无符号整型变量,则存入低8位,高8位补零。,6. 将unsigned int 型long int高位补0。,原值传送,但数据大小不能超值。 如: unsigned int a=65535; int b; b=a; 则越界。,而位数相同部分赋值 unsigned int int unsigned long long unsigned short short,7. 非unsigned 型长度相同的unsigned型数据,原样传送(包括符号位),一、复合赋值运算符:在 号之前加一个其它运算符。,C语言规定:凡是二目运算符均可构成复合运算符。,例: a+=3; 相当于 a=a+3 x=y+8; 相当于 x=x (y+8) x%=3; 相当于x=x%,一般形式: ,二、赋值表达式,例: x=10 为一赋值表达式

温馨提示

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

最新文档

评论

0/150

提交评论