1 / 61

第二章

第二章. 数据的存储与运算. 本章要点. 数据的描述规则 数据的操作规则. 主要内容. 2.1 数据在计算机中是怎样存储的 2.2 整型数据 2.3 实型数据 2.4 字符型数据 2.5 符号常量 2.6 算术运算符和算术表达式 2.7 C 运算符和 C 表达式 2.8 注意. 2.1 数据在计算机中是怎样存储的. 2.1.1 数据在计算机中是以二进制形式存储的. 计算机内部的信息都是用二进制来表示的。 二进制数的特点是 “ 逢二进一 ” 。每一位的值只有 0 和 1 两种可能。

kalyca
Download Presentation

第二章

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. 本章要点 数据的描述规则 数据的操作规则

  3. 主要内容 2.1 数据在计算机中是怎样存储的 2.2 整型数据 2.3 实型数据 2.4 字符型数据 2.5 符号常量 2.6 算术运算符和算术表达式 2.7 C运算符和C表达式 2.8 注意

  4. 2.1 数据在计算机中是怎样存储的 2.1.1 数据在计算机中是以二进制形式存储的 • 计算机内部的信息都是用二进制来表示的。 • 二进制数的特点是“逢二进一”。每一位的值只有0和1两种可能。 • 例如:十进制数10,用二进制表示是1010。它的含义是: 每一个二进位代表不同的幂,最右边一位代表2的0次方,最右边第二位代表2的1次方,以此类推。显然一个很大的整数可能需要几十个“二进制位”来代表

  5. 1 2 3 4 5 104 103 102 101 100 12345=1*104+2*103+3*102+4*101+5*100 1 0 0 1 0 1 25 24 23 22 21 20 100101=1*25+0*24+0*23+1*22+0*21+1*20

  6. 2.1 数据在计算机中是怎样存储的 2.1.2 位、字节和地址 位:又称“比特”(bit)。每一个二极管元件称为一个“二进制位”,是存储信息的最小单位。它的值是“1”或“0”。 字节:又称“拜特”(byte)。一般将8个“二进制位”组织成一组,称为“字节”。 地址:计算机的存储器包含许多存储单元,操作系统把所有存储单元以字节为单位编号 。

  7. b, B • 一个位有多大? • 只能是“0”或者“1”,这叫二进制 • 一个字节有多大? • 保存一个字符(英文字母、数字、符号) • ASCII(美国标准信息交换码)编码 • 两个字节保存一个汉字 • GB编码 • 可以表示数字0~255

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

  9. 2.1 数据在计算机中是怎样存储的 2.1.3 数据类型 • 程序中使用的数据必须说明其类型 • 不同类型的数据 • 在内存占用不同长度的存储空间 • 采用不同的存储方式 • 对应不同的取值范围 • 有不同的操作集合

  10. 基本整型 长整型 整型 短整型 无符号整型 基本类型 单精度实型 实型(浮点型) 双精度实型 字符型 枚举类型 数据类型 数组类型 构造类型 结构体类型 共用体类型 指针类型 空类型 C语言的数据类型(Data Type)

  11. 2.2 整型数据 • 整数的存储方式 • 十进制整数先转换为二进制形式。 • 例如:整数10以二进制形式表示是1010,直接把它存放在存储单元中。

  12. 余1 余0 余1 余0 余1 余0 *十 进 制 数 转 换 成 二 进 制 数 37 2 2 18 2 9 2 4 2 2 1 2 按产生余数的相反顺序 0 (37)10=(1 0 0 1 0 1)2

  13. 原码为: 原码为: 每位取反为: 末位加1为: *整数的存储结构----补码 正整数的补码为原码 01100100 100 负整数的补码为对应正整数的原码每位取反,末位加1 最高位为1, 作为符号位! 100 01100100 10011011 -100的补码 10011100

  14. 8位二进制数所表示的整数范围为 -27~27-1(-128~127) 1 0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 4位二进制数所表示的整数范围为 -23~23-1(-8~7) 1 0 0 0 0 1 1 1

  15. 2、整型类型 整数类型: 基本型 int 短整型 short int、short 长整型 long int、long 无符号整型 unsigned int、 unsigned short unsigned long

  16. 3、整型变量的定义 变量定义的格式: 类型 标识符1[,标识符2][,标识符3]…… int main( ) {int a; int b,c,d; a=12; b=13; c=a*b; d=a+b; printf(“a*b=%d,a+b=%d\n”,c,d); return 0; }

  17. 标识符 用作:变量名、符号常量名、 函数名、数组名、类型名 规定:以字母或下划线打头 由字母、数字、下划线构成 如:_mode User_name xyz

  18. 标识符 • 大小写敏感 • 不可以是数字开头 • 标识符要直观,能表达它的功能(见名知意) • 对于由多个词构成的标识符,通常在两个词之间加上下划线或每一个词的第一个字母大写 • variablename • variable_name, VARIABLE_NAME • VariableName, variableName • 关键字(keyword)不可作为标识符 • int, float, for, while, if等 • 某些功能的变量采用习惯命名 如:for语句所采用的循环变量习惯用i, j, k

  19. C语言中的关键字

  20. 1、变量必须先定义后使用 • 2、定义变量的含义: • 规定变量的名字(区分其他变量) • 规定变量的类型(存储空间、存储方式、 • 取值范围、可以进行的操作) • 3、变量总是有值的 • (不被初始化的变量,其值为危险的随机数) int one; short x=6; 值可能会改变的数据----变量

  21. 4、整型常量 在程序运行过程中,其值不能被改变的量称为常量。 直接常量:从其字面形式即可判别的常量。 符号常量:用一个标识符代表的一个常量。 十进制数 八进制数: 以0开头的数 十六进制数:以0x开头的数 12、32767、32790、 0x64、10、010

  22. 2.3实型数据 • 1、实数的存储形式 • 实数采用指数形式存储,例如:123.456可以写成标准化指数形式0.123456,它包括前后两个部分,前面部分是数值部分,后面部分是指数部分。 0.123456 数值部分 指数部分 说明:标准化指数形式:其数值部分是一个小数,小数点前的数字是零,小数点后的第一位数字不是零。一个实数可以有多种指数表示形式,但只有一种属于标准化指数形式

  23. 0.85*1023 实数存储结构为: 指数部分 实数的符号位 数值部分

  24. 2、实型常量 十进制形式:由数字和小数点组成 小数点不能少 0.735 2.146 .5367 897. 指数形式:用e表示10,e后为整数 e前数字不能少 0.7e5 2.1e6 .5e3 89e-7 e5

  25. 取值范围 精度 区分 3、实型变量 单精度float 4 byte 3.4E-38~3.4E+38 双精度double 8 byte 1.7E-308~1.7E+308 内存的存储精度不同(7,15~16) 如: float a; a=111.111;

  26. 实型数据提供的有效数字位数 • float型数据提供7位有效数字 • double型数据提供16位有效数字 • 使用不当导致舍入误差 #include <stdio.h> main() { float a; double b; a = 123456.789e4; b = 123456.789e4; printf("%f\n%f\n",a,b); }

  27. 2.4 字符型数据 2.4.1. 字符的存储方式 • 字符包括字母(如A,a,X,x)、专用字符(如$,@,%,#)等。 • 计算机并不是将该字符本身存放到存储单元中(存储单元只能存储二进制信息),而是将字符的代码存储到相应的存储单元中。 • 附录A是字符与代码的对照表,这是国际通过的ASCII代码.

  28. 0 0 0 0 0 0 1 1 0 1 1 0 1 0 1 1 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0 1 1 0 0 1 1 1 0 1 部分字符的ASCII码 + 0 A a -

  29. 2.4.2 字符常量和字符变量 • 字符常量 • (1)用单引号包含的一个字符是字符型常量 • (2)只能包含一个字符 ‘a’,’A’, ‘1’ ‘abc’、“a” 例 

  30. 有些以“\”开头的特殊字符称为转义字符 \n 换行 \t 横向跳格 \r 回车 \\ 反斜杠 \ddd ddd表示1到3位八进制数字 \xhh hh表示1到2位十六进制数字 • printf("tg\n"); • c=‘\n’; • printf(“%c”,c);

  31. 2. 字符变量 • 字符型变量用来存放字符常量,注意只能放一个字符。 • 字符变量的定义形式如下:char c1,c2; • 在本函数中可以用下面语句对c1,c2赋值: • c1=‘a’;c2= ‘b’; • 一个字符变量在内存中占一个字节。

  32. 字符数据运算的简单例子 例题 2.4 逐个输出英文字母C,H,I,N,A。然后按反序输出,即A,N,I,H,C。 解题思路 可以把5个字母分别放在5个变量中,第1次按正序输出这5个字母,第2次按反序输出这5个字母。C语言提供字符型变量,用来存放字符数据。

  33. 编写程序 #include <stdio.h> void main() { char a='C',b='H',c='I',d='N',e='A'; /* a,b,c,d,e定义为字符变量 */ printf("%c%c%c%c%c\n",a,b,c,d,e); /* 顺序输出CHINA */ printf("%c%c%c%c%c\n",e,d,c,b,a); /* 反序输出CHINA */ } 说明: 1、第3行是定义字符变量a,b,c,d,e。字符要用单撇号括起来。一个字符变量放一个字母字符。 2、第4,5行输出5个字母。输出字符所用的格式说明为“%c”。 3、运行结果: CHINA ANIHC

  34. 3.字符数据与整型数据在一定条件下可以通用 • 一个字符常量存放到一个字符变量中,实际上并不是把该字符的字型放到内存中去,而是将该字符的相应的ASCII代码放到存储单元中。这样使字符型数据和整型数据之间可以通用。 注意: 一个字符数据既可以以字符形式输出,也可以以整数形式输出。

  35. 运行结果: • a b • 97 98 例2.5向字符变量赋以整数。#include <stdio.h>void main() {char c1,c2; c1=97; c2=98; printf(“%c %c\n”,c1,c2); printf(“%d %d\n”,c1,c2);} • 说明:在第3和第4行中,将整数97和98分别赋给c1和c2,它的作用相当于以下两个赋值语句: • c1=′a′;c2=′b′; • 因为’a’和’b’的ASCII码为97和98

  36. 例2.6大小写字母的转换#include <stdio.h>void main() {char c1,c2;c1=’a’; c2=’b’; c1=c1-32; c2=c2-32; printf(“%c %c″,c1,c2); } • 运行结果:A B • 说明:程序的作用是将两个小写字母a和b转换成大写字母A和B。从ASCII代码表中可以看到每一个小写字母比它相应的大写字母的ASCII码大32。C语言允许字符数据与整数直接进行算术运算。     

  37. 2.4.3 字符串常量 • 字符串常量是一对双撇号括起来的字符序列. • 合法的字符串常量: • “How do you do.”, “CHINA”, “a”, “$123.45” • 可以输出一个字符串,如 • printf(“How do you do.”);

  38. ‘a’是字符常量,“a”是字符串常量,二者不同。‘a’是字符常量,“a”是字符串常量,二者不同。 • 如:假设C被指定为字符变量:char c  • c=‘a’; • c=“a”;c=“CHINA”;  • 结论:不能把一个字符串常量赋给一个字符变量。

  39. C规定:在每一个字符串常量的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。C规定:在每一个字符串常量的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。 • C规定以字符’\0’作为字符串结束标志。 如:如果有一个字符串常量”CHINA” ,实际上在内存中是: 它占内存单元不是5个字符,而是6个字符,最后一个字符为’\0’。但在输出时不输出’\0’。

  40. 2.5 符号常量 常量的形式:直接常量与符号常量 #define PRICE30 int main( ) { int num, total; num=10; total=num*PRICE; printf(“total=%d”,total); return 0; } 值不会改变的数据----常量

  41. 2.5.1 为什么要用符号常量 例题 2.7 已知圆的半径为r,求圆周长c,圆面积s,圆球体积v。 解题思路 圆周长 圆面积 c=2 s= 有了以上公式就可以进行计算了

  42. 2.5 符号常量 编写程序 #include <stdio.h> void main() {double r=3.67,c,s,v; c=2*3.1415926*r; s=3.1415926*r*r; v=4/3*3.1415926*r*r*r; printf("c=%f\ns=%f\nv=%f\n",c,s,v); } 说明: 运行结果: c=23.059290 s=42.313797 v=155.291633

  43. 2.5 符号常量 说明: 程序中多次出现常数3.1415926,降低程序的可读性。可用一个符号来代表一个常量,如可以用一个符号名PI来代表圆周率3.1415926。这样就不必在每处都重复写3.1415926,而用PI来代表,这个PI就叫符号常量。#define PI 3.1415926

  44. 2.5 符号常量 2.5.2 符号常量的性质和使用方法 • #define不是C语句,该行的末尾没有分号。它是一个“预编译命令”。 • 不要把符号常量与变量混淆, 符号常量只是一个符号,不占存储单元。它只是简单地进行字符置换(如把字符PI置换为字符3.1415926)。不论置换的字符是否有含义都进行置换。 • 习惯上,符号常量名用大写,变量名用小写,以示区别。 • 使用符号常量的好处 • 含义清楚 • 在需要改变一个常量时能做到“一改全改”。

  45. 其他: (1)C语言规定,两个整型数据相除结果是整型。因此,4/3的值是整数1,而没有小数部分。可以改用实数,写成4.0/3.0。程序第6行改为 v=4.0/3.0*3.1415926*r*r*r;再编译和运行,得到正确的v值。 (2)可调用pow函数,求 r 3,其函数形式是pow(r,3),函数值是double型。

  46. 注意: • 变量定义: • C规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”。 • 例如: • int a,b(指定变量a、b为整型) • unsigned short c,d;(指定变量c、d为无符号短整型) • long e,f;(指定变量e、f为长整型)

  47. 注意! • 不要对变量所占的内存空间字节数想当然 • 用sizeof获得变量或者数据类型的长度 • 现场演示程序的运行结果 #include <stdio.h> main() { printf("Data type Number of bytes\n"); printf("------------ ---------------------\n"); printf("char %d\n", sizeof(char)); printf("int %d\n", sizeof(int)); printf("short int %d\n", sizeof(short)); printf("long int %d\n", sizeof(long)); printf("float %d\n", sizeof(float)); printf("double %d\n", sizeof(double)); }

  48. 2.6 算术运算符和算术表达式 • 2.6.1 算术运算符 • (1)基本的算术运算符: • + (加法运算符,或正值运算符。如:3+5、+3) • - (减法运算符,或负值运算符。如:5-2、-3) • * (乘法运算符。如:3*5) • / (除法运算符。如:5/3) • % (模运算符,或称求余运算符,%两侧均应为整型数据,如:7%4的值为3)。

  49. 2.6 算术运算符和算术表达式 • (2) 运算符的优先级与结合性 • C语言规定了运算符的优先级 • 在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。 • C规定了各种运算符的结合方向(结合性) • 算术运算符的结合方向为“自左至右”,即先左后右 。

  50. 2.6 算术运算符和算术表达式 • (3)自增、自减运算符 • 作用是使变量的值增1或减1 • 如: • ++i,--i(在使用i之前,先使i的值加 • (减)1) • i++,i--(在使用i之后,使i的值加( • 减)1)

More Related