1 / 55

第 2 章

第 2 章. 数据类型、运算符与表达式. 编辑 —— 源程序 文件名: * .c 编译 —— 目标程序 文件名: * .obj 连接 —— 可执行程序 文件名: * .exe 编译 器将源程序转换成机器能理解的程序 连接 器用于连接相关的目标文件以生成可执行程序 C 程序的组成 —— 函数. 回顾. 理解变量和常量的含义 熟悉基本数据类型 int 、 char 、 float 和 double 使用算术运算符 理解赋值运算符、逗号运算符 理解类型转换. 目标. 一个简单的 C 程序例子. 对数据 的描述.

wade-finch
Download Presentation

第 2 章

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第2章 数据类型、运算符与表达式

  2. 编辑——源程序 文件名: *.c 编译——目标程序 文件名:*.obj 连接——可执行程序 文件名:*.exe 编译器将源程序转换成机器能理解的程序 连接器用于连接相关的目标文件以生成可执行程序 C程序的组成——函数 回顾

  3. 理解变量和常量的含义 熟悉基本数据类型 int、char、float 和 double 使用算术运算符 理解赋值运算符、逗号运算符 理解类型转换 目标

  4. 一个简单的C程序例子 对数据 的描述 main() { float r, cm; scanf(“%f”, &r); cm=2*3.14159*r; printf(“圆的半径=%f\n”,r); printf(“圆的周长=%lf\n”,cm); } 对操作 的描述

  5. 整型 int 基本类型 字符型 char 单精度实型 float 实型(浮点型) 双精度实型 double 数组类型 结构类型 struct 联合类型union 枚举类型 enum 2.1 C的数据类型 C语言提供了以下一些数据类型: 数据类型 构造类型 指针类型 空类型(无值类型) void

  6. 什么是数据和数据类型 程序是用来对数据进行处理的,数据是所要处理的对象,而运算符是施加给这些数据的操作。 例如求圆的周长,写有如下程序语句: cm=2*3.14159*r; 其中 cm、r、2、3.14159是参加运算的数据,而 * 、= 是要进行的运算的符号。 手工计算时,根据给定的半径 r就可以计算出圆的面积。

  7. 什么是数据和数据类型 计算机完成上述计算,首先要解决数据的存放问题: 1.输入的半径 r、运算的结果 cm 事先要给它们留好位置。留多大的地方来存放它们? 2.还要知道它们被存放在计算机内存的什么地方? 3.数据 2和 3.14159与 r、cm 不一样,它们是在编写程序时就给出确定的值,在运算过程中不会改变。这样的数计算机应该怎么处理? 4.数 2和 3.14159一个是整数、一个是小数,计算机存放它们是需要不需要区别?

  8. 基本数据类型 数据 数据类型 数值 非数值 Africa 2.175 char 整型 非整型 123 9/12/2003 int float The quick brown fox 整型 非整型 Jackie Chan short int double 非数值 数值 long int 999 9002.12 数据属于不同类别 TRUE

  9. 数据为什么要区分类型? 不同类型的数据代表不同的 数据表示形式 合法的取值范围 占用内存空间大小 可参与的运算种类 数据类型(Data Type)

  10. 2.2 常量与变量 2.2.1 常量 • 在程序运行过程中,其值不能被改变的量称为常量 • 常量区分为不同的类型: 整型 100,125,-100,0 实型 3.14 , 0.125,-3.789 字符型 ‘a’, ‘b’,‘2’ 说明:符号常量(又称宏名、宏常量) 为了使用方便,可用一个符号名来代表一个常量。

  11. #define标识符 字符串 宏常量( 宏名) 也称符号常量 一般采用全大写字母表示 宏定义不是语句,而是一种编译预处理命令 符号常量——宏常量

  12. 例:计算圆的周长和面积 #include <stdio.h> #define PI 3.14159 #define R 5.3 main() { printf("area = %f\n", PI * R * R); printf("circumference = %f\n", 2 * PI * R); } 宏替换 相当于执行 #include <stdio.h> main() { printf("area = %f\n", 3.14159 * 5.3 * 5.3); printf("circumference = %f\n", 2 * 3.14159* 5.3); } area = 88.247263 circumference = 33.300854

  13. 2.2 常量与变量 2.2.2 变量 • 变量代表内存中具有特定属性的一个存储单元,它用来存放数据,也就是变量的值,在程序运行期间,这些值是可以改变的。 • 变量名实际上是一个以一个名字对应代表一个地址,在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。

  14. …... …... …... 变量与内存 内存 main() { float r,cm; scanf(“%f”, &r); cm=2*3.14159*r; printf(“圆的半径=%f\n”,r); printf(“圆的周长=%lf\n”,cm); }  r 2 4字节 cm  12.56 随机数

  15. 常量 在程序运行过程中其值不改变的数据,是常量。 变量 在程序运行过程中,其值改变的数据,称之为变量,给变量一个名称,就是变量名。 变量名和内存中的存储单元相对应。 编写程序时通过变量名来存、取存储单元。 2.2 常量与变量

  16. 2.2 常量与变量 2.2.2 变量 • 用来标识对象名字(包括变量、函数、数组、类型等)的有效字符序列 。 • C语言中,有3类标识符:关键字,系统预定义的标识符 ,用户标识符。 • 变量的名字必须符合C语言对标识符的规定。 • C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。

  17. 2.2 常量与变量 变量命名的规定:变量的名字必须符合C语言对标示符得规定 例:sum,_total, month, Student_name, lotus_1_2_3,BASIC, li_ling M.D.John, ¥123,3D64,a>b  

  18. 2.2 常量与变量 注意: • 编译系统将大写字母和小写字母认为是两个不同的字符。 • 建议变量名的长度最好不要超过8个字符。 • 在选择变量名和其它标识符时,应注意做到“见名知意”,即选有含意的英文单词 (或其缩写)作标识符。 • 要求对所有用到的变量作强制定义,也就是“先定义,后使用” 。

  19. 2.3 整型数据 VC++6.0系统下: • 整数类型的有关数据: 类型 类型说明符 长度 数的范围 基本型 int2字节 -32768~32767 短整型 short 2字节 -215~215-1 长整型 long 4字节 -231~231-1 无符号整型 unsigned 2字节 0~65535 无符号短整型 unsigned short 2字节 0~65535 无符号长整型 unsigned long 4字节 0~(232-1) 4字节 2字节 4字节 4字节 2字节 4字节

  20. 一个位(bit)有多大? 只能是“0”或者“1”,这叫二进制 一个字节(Byte)有多大? 有8位 保存一个字符(英文字母、数字、符号) ASCII(美国标准信息交换码)编码 两个字节保存一个汉字 GB编码 b, B, KB, MB, GB, TB

  21. Megabyte(MB),中文叫法:兆 Kilobyte(KB),中文叫法: K Byte,中文叫法:字节 bit,中文叫法:位 Gigabyte(GB),中文叫法:G Terabyte(TB),中文叫法:T b, B, KB, MB, GB, TB 1 TB ==1,024 GB 1 GB==1,024 MB 1 MB==1,024 KB 1 KB==1,024 B 1 B ==8 b

  22. 声明: int number; long sum; unsigned age; 可按如下方式初始化: 使用整型变量 三种整型常量(整常数)表示法: 十进制 :16 八进制 :016 十六进制 :0x16 • 定义时初始化变量: • int number = 36; • 定义后初始化变量: • long sum; • sum = 57; 在同一语句中可以声明多个类型相同的变量: int page, height, width;

  23. 运行结果:2147483647,-2147483648 整型数据的溢出#include <stdio.h>void main(){int a=2147483647,b; b=a+1; printf(“%d,%d\n”,a,b);} 说明:数值是以补码表示的。一个整型变量只能容纳-2147483648~2147483647范围内的数,无法表示大于2147483647或小于-2147483648的数。遇此情况就发生“溢出”。

  24. 不要对变量所占的内存空间字节数想当然 用sizeof获得变量或者数据类型的长度 现场演示程序在Turbo C2.0和Visual C下的运行结果 注意! 使用变量要注意 printf(“int=%d”, sizeof(int));

  25. 使用变量的基本原则 变量必须先定义,后使用 所有变量必须在第一条可执行语句前定义 声明的顺序无关紧要 一条声明语句可声明若干个同类型的变量 声明变量,是初始化变量的最好时机 不被初始化的变量,其值为危险的随机数 char esc = 'a'; int i = 1; int sum = 0; float eps = 1.0e-5; 变量声明

  26. 2.4 浮点型数据 2.4.1浮点型常量的表示形式 十进制小数 指数 0.123 3e-3 两种表 示形式 注意:字母e(或E)之前必须有数字,且e后面的指数必须为整数  • 1e3、1.8e-3、-123e-6、-.1e-3 • e3、2.1e3.5、.e3、e 

  27. e指数 注意: 字母e(或E)之前必须有数字,且e后面的指数必须为整数 规范化的指数形式: 在字母e(或E)之前的小数部分中,小数点左边 应有一位(且只能有一位)非零的数字. 例如: 123.456可以表示为: 123.456e0, 12.3456e1, 1.23456e2, 0.123456e3, 0.0123456e4, 0.00123456e 其中的1.23456e3称为“规范化的指数形式”。  • 1e3、1.8e-3、-123e-6、-.1e-3 • e3、2.1e3.5、.e3、e 

  28. 单精度浮点型 float 在 C语言中用于存储单精度浮点数 float 32 位 10-38至10+38 ,7位有效数字 float price; price = 11.3; 两种浮点型(实数)常量表示法: 十进制形式 :41.235, -12.0, .5 指数形式 :2e4, 1.8e-3, -123e-6, 3.5e+4

  29. double pressure,d=35.4; pressure = 213.5671435568967; 内存 float double 双精度浮点型 213.5671435568967 64位 16位有效数字 取值范围:10-308至 10308

  30. 2.5 字符型数据 在线保险单 年龄:_____ 保险总额:_____ 性别:_____ 数值型 23 int/float 98340 字符型 ' M ' char

  31. "2" ' ' '5' 'p' '$' 有效的字符型值 '2' 正确 X '2' + '2' = 4

  32. 声明: char sex; • 初始化: sex=‘m’; char sex=‘m’; 字符在内存中按照ASCII码存放的;

  33. ASCII码表

  34. ASCII码表

  35. 转义字符

  36. 例 转义字符的使用#include <stdio.h>void main(){ printf(″abc″); printf(″\nabc″); printf(″ab\ ″ c″);} • 显示屏上的运行结果: abc abc ab″c

  37. 在0~255范围内,字符型数据和整型数据是通用的。字符型数据可以以字符形式输出,也可以以整数形式输出在0~255范围内,字符型数据和整型数据是通用的。字符型数据可以以字符形式输出,也可以以整数形式输出 字符型数据和整型数据通用 main() { char c1,c2=‘B’; int a1; c1=97; a1=‘b’-32; printf("%c,%d\n",c1,c1); printf("%c,%d\n",a1,a1); } 运行结果: a,97 B,66

  38. 用双引号括住的由0个或多个字符组成的字符序列用双引号括住的由0个或多个字符组成的字符序列 "I am a string" ""表示空字符串 除注释外,是唯一可以出现中文的地方 C语言内部用’\0’表示字符串的结束 "x"和’x’是不同的 <string.h>里定义了一系列专门的字符串处理函数 转义字符也可在字符串中使用 字符串"\t\"Name\\Address\n"的长度? 15 字符串常量

  39. 2.6 各类数值型数据间的混合运算 混合运算:整型(包括int,short,long)、浮点型(包括float,double)可以混合运算。在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算. 说明: 这种类型转换是由系统自动进行的。

  40. 2.7 算术运算符和算术表达式 算术 运算符 操作数 操作数 一元 二元运算符 二元 + % * / - 5/3=? 5%3=?

  41. 算术运算符 算术 num++ num=num+1 ++ ++num --num num++ num-- 一元 前缀 后缀 -- num=num-1 num-- 二元

  42. 算术运算符 num1 = num1 + 1; num2 = num1; num2 = 6; num1 = 6; num2 = num1; num1 = num1 + 1; num2 = 5; num1 = 6; num1 = num1 - 1; num2 = num1; num2 = 4; num1 = 4; num2 = num1; num1 = num1 - 1; num2 = 5; num1 = 4;

  43. 良好的程序设计风格提倡:在一行语句中,一个变量只能出现一次加1或者减1运算良好的程序设计风格提倡:在一行语句中,一个变量只能出现一次加1或者减1运算 过多的加1和减1运算混合,不仅可读性差,而且因为编译器实现的方法不同,导致不同编译器产生不同的运行结果 增一和减一运算符

  44. 优先级 C语言规定了各种运算的优先级。 优先级的规定符合思维习惯。 例如在算术运算中,先 * / 后 + -。 利用()提高程序的可读性,并减少出错的概率。 结合性 多数运算符为左结合 少数为右结合: 赋值运算符 条件运算符 运算符的优先级和结合性

  45. 注意:调整 教学顺序 3.3.1赋值表达式 赋值运算符:= • 说明: • 结合方向:自右向左 • 优先级: 14 • 左侧必须是变量,不能是常量或表达式 例 int i; i=2.56; //结果i=2;  • 赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型 • 例: 3=x-2*y; • a+b=3; • 例float f; • int i; • i=10; • f=i; • 则f=10.0  例: a=5 a=5+(c=6)  a=5+c=6

  46. 赋值运算 复合赋值运算符: += <<= -= >>= *= &= /= ∧= %= |= (结合性← ) a+=b a=a+b 已知:int a=12; a+= a-=a * a; (1)a=a-a*a=-132 (2)a=a+(-132) 计算: int a=2; a%=4-1; a+=a*=a-=a*=3;

  47. 自动类型转换 原则:把表示范围小的类型的值转换到表示范围大的类型的值 short  int  long  float  double 强制类型转换(Casting) 语法:(类型名) 变量或数值 消除从大到小的警告 类型转换 int x; float y=3.14; x=(int)y;

  48. 15 total 2 number ?? 7.000000 average 类型强转(Casting) 两个整数运算的结果 还是整数,不是浮点数 • Example: • int total, number; • float average; • … • average = total / number; • 15 / 2 • 7

  49. 15 total 2 number ?? 7.500000 average 类型强转(Casting) • Example: • int total, number; • float average; • … • average = (float)total / number; • 15.000000 / 2 • 7.500000

  50. 可以通过“(类型)表达式”的方式把表达式的值转为任意类型可以通过“(类型)表达式”的方式把表达式的值转为任意类型 强转时,你必须知道你在做什么 强转与指针,并称C语言两大神器,用好了可以呼风唤雨,用坏了就损兵折将 类型强转(Casting) 屠 龙刀 倚 天 剑

More Related