数据类型运算符和表达式PPT课件_第1页
数据类型运算符和表达式PPT课件_第2页
数据类型运算符和表达式PPT课件_第3页
数据类型运算符和表达式PPT课件_第4页
数据类型运算符和表达式PPT课件_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

1、数据类型(Data Type)数据为什么要区分类型?不同类型的数据代表不同的数据表示形式合法的取值范围占用内存空间大小可参与的运算种类 第1页/共56页数据类型(Data Type)数据类型基本类型构造类型指针类型空类型整型实型(浮点型)字符型枚举类型数组类型结构体类型共用体类型单精度实型双精度实型基本整型长整型短整型无符号整型第2页/共56页例2.1:一个简单的C程序例子 #include /*函数功能:计算两个整数相加之和 入口参数:整型数据a和b 返回值: 整型数a和b之和*/int Add(int a, int b)return (a + b);/*主函数*/main()int x,

2、y, sum = 0;printf(Input two integers:);scanf(%d%d, &x, &y); /*输入两个整型数x和y*/sum = Add(x, y); /*调用函数Add计算x和y相加之和*/printf(sum = %dn, sum); /*输出x和y相加之和*/第3页/共56页C程序常见符号分类 关键字(Keyword) 又称为保留字,C语言中预先规定的具有固定含义的一些单词 数据类型修饰符int,控制语句return等 标识符(Identifier) 系统预定义标识符,main,printf 等 用户自定义标识符,Add, x, y 等 运算

3、符(Operator) 34种,详见附录2 分隔符(Separator) 空格、回车/换行、逗号等 其它符号 大花括号“”和“”通常用于标识函数体或者一个语句块 “/*”和“*/”是程序注释所需的定界符 数据(Data) 变量(Variable) 常量(Constant) 第4页/共56页标识符命名 变量名 函数名 由英文字母、数字和下划线组成,大小写敏感 不可以是数字开头 直观,见名知意,便于记忆和阅读 最好使用英文单词或其组合 切忌使用汉语拼音 下划线和大小写通常用来增强可读性 variablename variable_name variableName 不允许使用关键字作为标识符的名字

4、 int, float, for, while, if等 某些功能的变量采用习惯命名 如:for语句所采用的循环变量习惯用i, j, k第5页/共56页b, B, KB, MB, GB, TB 如何衡量数据类型所占空间大小? bit,中文叫法:位 Byte,中文叫法:字节 Kilobyte(KB),中文叫法: K Megabyte(MB),中文叫法:兆 Gigabyte(GB),中文叫法:G Terabyte(TB),中文叫法:T第6页/共56页b, B, KB, MB, GB, TB 一个位有多大? 只能是“0”或者“1”,这叫二进制 一个字节有多大? 保存一个字符(英文字母、数字、符号)

5、ASCII(美国标准信息交换码)编码 见P427附录D,常用字符与ASCII码对照表 两个字节保存一个汉字 GB编码 可以表示0255之间的整数第7页/共56页基本数据类型 int 整数,在目前绝大多数机器上占4个字节。 TC2中是2个字节 VC中是4个字节 float 单精度浮点数,一般是4个字节长 double 双精度浮点数,一般是8个字节长 char 字符,一般是1个字节长 用来表示256个ASCII字符,或者0255的整数第8页/共56页数据类型修饰符 short short int,短整数,一般2个字节长。通常简写为short long long int,长整数,一般是4个字节长。通

6、常简写为long long double,长双精度(高精度)浮点数,一般是10个字节长。 signed 用来修饰char、int、short和long,说明他们是有符号的整数(正整数、0和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略 unsigned 用来修饰char、int、short和long,说明他们是无符号的整数(正整数和0)第9页/共56页何谓类型溢出(Overflow)? C语言直接提供的任何类型都有取值范围。当向其赋超过此范围的数值,就会产生数值溢出,得到一个不正确的结果。 TC2中int的范围是-3276832767 如果超出取值范围,给它一个小于-32768或者大于

7、32767的数会如何呢?现场编程测验第10页/共56页何谓类型溢出(Overflow)? 生活中的例子: 身份证号码中的出生年 阿利亚娜号火箭发射失败 现象与危害: 溢出后的数值是可预料的,但不同平台会有所不同。当程序从高位计算机向低位计算机移植(比如从64位系统移植到32位系统)时,以前从不出现的溢出问题可能出现。第11页/共56页类型溢出的解决方案? 解决方案: 预先估算运算结果的可能范围,采用取值范围更大的类型。 1+2+3+ 1!+2!+3!+ 13+23+33+ 如果不需要处理负数,则采用无符号类型。 在运算还没开始之前就判断运算数是否在合理的取值范围内。如果超出,则停止运算,转错误

8、处理。第12页/共56页使用变量要注意 不要对变量所占的内存空间字节数想当然 用sizeof获得变量或者数据类型的长度第13页/共56页sizeof到底是什么? 它是一个C语言的关键字,并不是函数 可以用两种形式使用 sizeof(表达式) 一般都使用sizeof(变量名) sizeof(类型) 求出的结果为表达式值所属类型或者类型占用的字节数 现场演示程序例2.3在Turbo C2.0和Visual C下的运行结果第14页/共56页例2.3 #include main()printf(Data type Number of bytesn);printf(- -n);printf(char %

9、dn, sizeof(char);printf(int %dn, sizeof(int);printf(short int %dn, sizeof(short);printf(long int %dn, sizeof(long);printf(float %dn, sizeof(float);printf(double %dn, sizeof(double);第15页/共56页为什么要用sizeofsizeof获得类型或变量的字长? 因为 同种类型在不同的平台其占字节数不尽相同。比如int在16位、32位和64位系统分别占2、4和8个字节。 现象与危害: 在平台间移植时会出现问题,导致数据丢失

10、或者溢出。 解决方案: 用,并且只用sizeof获得字长。第16页/共56页变量声明 使用变量的基本原则 变量必须先定义,后使用 所有变量必须在第一条可执行语句前定义 声明的顺序无关紧要 一条声明语句可声明若干个同类型的变量 声明变量,是初始化变量的最好时机 不被初始化的变量,其值为危险的随机数char esc = a;int i = 1;int sum = 0;float eps = 1.0e-5;第17页/共56页实型数据提供的有效数字位数例2.61234567936.0000001234567890.000000使用不当导致舍入误差第18页/共56页数据在内存中的存储格式 整型 实型 N

11、=S2j 字符型阶码符号阶码的数值尾数符号尾数的数值阶码j尾数S第19页/共56页char型与int型之间的关系 例2.5:小写字母转换为大写字母 b, 98B, 66b, 98B, 66第20页/共56页常数(Constant) 整型常数 18、-31 long int型常量 123l、123L、123456l、123456L unsigned int型常量 123u、 123U 浮点常数 十进制小数形式 123.45、456.78 指数形式 1e-2、4.5e3 float型常量 123.45f、 456.78F、1e-2f、4.5e3F long double型常量 123.45l、 4

12、56.78L、4.5e3L 缺省为double 因为字母l和数字1容易混淆,所以当用l做后缀时,常使用大写形式第21页/共56页八进制与十六进制常数 以数字“0”开始的整型常数是八进制数 022、-037 010和10大小不一样 因为八进制并不常用,所以此种表示法比较少见 以“0 x”或者“0X”开始的整型常数是十六进制 AF和af用来表示十进制的1015 十六进制的形式比较常用 0 x12、-0 x1F, -0 x1f第22页/共56页字符(Character)常数 字符常数的表示方法 a,A,5,%,$ 单引号内只能有一个字符,除非用“”开头 就是一个普通整数,也可以参与各种数学运算 每个

13、字符具有一个0255之间的数值,可从ASCII表查出 注意:5和整数5的区别 字符的数学运算在密码学内用得比较多 用“”开头的字符为转义字符 例如,n,代表1个字符第23页/共56页字符常数 转义字符 一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示第24页/共56页字符串(String)常数 用双引号括住的由0个或多个字符组成的字符序列 I am a string 表示空字符串 转义字符也可以在字符串中使用 引号只作为字符串开始和结束的标志 C语言内部用0表示字符串的结束 除注释外,是唯一可以出现中文的地方 x和x是不同的 里定义了一系列专门的字符串处理函数第25页/共56页为什么需

14、要常量? 假如不使用常量,直接使用常数,会有什么影响? 程序的可读性变差 容易发生书写错误 修改麻烦 常量只能在定义时赋值,然后不能再改变其值 宏常量 const常量 枚举常量第26页/共56页为什么需要常量? 要避免使用幻数 直接使用的常数叫幻数。 现象与危害: 当常数需要改变时,要修改所有使用它的代码,工作量巨大,还可能有遗漏。 解决方案: 把幻数定义为宏、const常量,或者枚举常量。 建议使用后两者。#define ARRAY_SIZE 10const int ARRAY_SIZE = 10;enum ARRAY_SIZE = 10;第27页/共56页宏常量 宏常量 也称符号常量 一般

15、采用全大写字母表示 #define 标识符 字符串 不是语句,而是一种编译预处理命令 宏替换(Macro Substitulition) 第28页/共56页例2.2 :计算圆的周长和面积 area = 88.247263circumference = 33.300854第29页/共56页例2.2 :计算圆的周长和面积 第30页/共56页const常量 用const修饰定义的变量为常量 const float pi = 3.1425926; const常量与宏常量相比的优点是什么? const常量有数据类型 某些集成化调试工具可以对const常量进行调试第31页/共56页枚举(Enumerati

16、on)常量 一个被遗忘的角色 从程序来窥其一斑 enum weeks SUN, MON, TUE, WED, THU, FRI, SAT; enum weeks today; enum response no, yes, none; enum response answer; today = TUE; answer = yes; if (answer = yes) printf(Today is Tuesday.n); else printf(Today is NOT Tuesday.n);第32页/共56页算术运算符 +,-,*,/ 加、减、乘、除运算 四则混合运算中,先算乘除,后算加减,按

17、从左向右的顺序计算,左结合 % 求余运算常用的标准数学函数函数名函数名功功 能能函数名函数名功功 能能sqrt(x)计算计算x的平方根,的平方根,x应大于等于应大于等于0 exp(x)计算计算ex的值的值fabs(x)计算计算x的绝对值的绝对值pow(x,y)计算计算xy的值的值log(x)计算计算lnx的值的值sin(x)计算计算sinx的值,的值,x为弧度值为弧度值log10(x)计算计算lgx的值的值cos(x)计算计算cosx的值,的值,x为弧度值为弧度值第33页/共56页关系运算符 ,=, b & b c);a大于b,并且b大于c 或运算| a | b只要两者中有一个为真,结

18、果就为真 ( a b | b c); a大于b,或者b大于c 求反! ( !a );如果a是0,结果非0;如果a是非0,结果是0 并不改变a的值第35页/共56页实例 ch是英文大写字母 (ch = A) & (ch double float long int short chardoublefloatlongunsignedintchar,short精度低精度高第37页/共56页自动类型转换 在进行赋值操作时,会发生类型转换 将取值范围小的类型转为取值范围大的类型是安全的 反之是不安全的 如果大类型的值在小类型能容纳的范围之内,则平安无事 但是,浮点数转为整数,会丢失小数部分,非四舍

19、五入 反之,转换后的结果必然是错误的,具体结果与机器和实现方式有关。避免如此使用,好的编译器会发出警告第38页/共56页类型强转(Casting) 消除从大到小的警告 l = (long)i; 可以通过“(类型)表达式”的方式把表达式的值转为任意类型 强转时,你必须知道你在做什么 强转与指针,并称C语言两大神器,用好了可以呼风唤雨,用坏了就损兵折将第39页/共56页例2.7 m/2 = 2(float)(m/2) = 2.000000(float)m/2 = 2.500000m = 5第40页/共56页增一和减一运算符 n+,n-,+n,-n +让参与运算的变量加1,-让参与运算的变量减1 作

20、为后缀运算符时,先取n的值,然后加/减1 作为前缀运算符时,先加/减1,然后取n的值第41页/共56页增一和减一运算符 n+,n-,+n,-n +让参与运算的变量加1,-让参与运算的变量减1 作为后缀运算符时,先取n的值,然后加/减1 作为前缀运算符时,先加/减1,然后取n的值第42页/共56页增一和减一运算符 良好的程序设计风格提倡:在一行语句中,一个变量只能出现一次加1或者减1运算 过多的加1和减1运算混合,不仅可读性差,而且因为编译器实现的方法不同,导致不同编译器产生不同的运行结果第43页/共56页位操作运算符 & 按位与运算 | 按位或运算 按位异或运算 按位右移运算 按位求反第44页/共56页位操作运算符 现场演示P66,3.4(2)逻辑运算与位运算的不同main() int x=12, y=8; printf(n%5d%5d%5d, !x, x|y, x&y); printf(n%5d%5d%5d, x, x|y, x&y); printf(n%5u%5d%5dn, x, x|y, x&y); 0 1 1 -13 12 865532 12 8第

温馨提示

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

评论

0/150

提交评论