




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PProgramming in rogramming in C C程序设计程序设计 华东师大计算机系 2013年3月第1页/共33页 Ch2 数据类型 计算机是处理数据的, 但是如果仅仅将数据理解成数字, 就显得意义和用途太狭窄了. 一般的编程语言的 基本数据类型 至少包含以下 3 类: 数值 整数 实数 用于计数和计算 字符/字符串 用于文字处理 逻辑数据 推理、分析、条件 很多语言还包括: 日期时间、货币等。 变体型:VB、C#、JavaScript 等 不同的语言规定不同,同一语言的不同版本也不同。 C语言用库函数处理日期时间。第2页/共33页 C 语言 的 基本数据类型: 数值 整数
2、实数 字符 逻辑数据 C 整数 和 实数 分各种不同规格。/计算要求, 历史渊源。 C 字符型 分 字符数据 和 字符串数据 C 没有逻辑型数据,用0-1代替,1 = true, 0 = false. C 新增加的基本类型: 指针 对应 内存地址 空 什么也没有。 用于函数参数传递,表示无数据或者无格式数据。第3页/共33页 C 语言 的 聚合数据类型: 聚合类型的类型指聚合方式: 数组 = 多个同类型数据,比如 整数数组。 结构体 = 多个不同类型数据,如 (学号,姓名,性别,年龄,专业) 共用体 = 不同类型数据 共用 同一数据区 枚举 =符号常量的集合, 表示有限值数据,比如星期几。 C
3、的数据类型小结 / 见教材第4页/共33页 常量与变量 : 标准答案: 在程序运行期间, 其值不变的量称为常量, 其值可以改变的量称为变量。不同的理解: 姓名. 常量是数据的具体值,独立于计算机领域。 比如 123, -2.8, “张三”, 等. 变量是储存数据的容器room. 变量应该有一个名字(标识符),在内存中占据一定的存储单元,在该存储单元中存放变量的值。 在赋值语句 i=j 中, 等号左边代表变量的存储单元, 右边代表变量的值: 将 j 的值复制到 i 单元. 附: 存储单元在内存中的编号值, 作为变量的地址. 占据多个单元的, 以最小的编号值作为变量的地址(首地址). 第5页/共3
4、3页标识符: 变量、常量、类型、过程、函数、对象的名字。 标识符命名规则: 由字母、数字或下划线组成,第一个字符必须是字母或下划线。中文版似乎可用中文,但是最好不用。 不要与关键字同名. - 什么是关键字? 见下页 正确或错误标识符命名的实例。/ 等级考试常考 正确形式: count _test23 high_balance for1 错误形式: 2count hi! high.balance for ANSI标准规定,标识符可以为任意长度,但外部名必须至少能由前8个字符唯一地区分。/ 某些OS的限制第6页/共33页保留字|关键字: 编程时,有些词汇有规定的含义,不能用作其它用途。 比如 if
5、 用于条件语句,不能用于变量命名。 C语言有32个关键字:第7页/共33页标识符能否与库函数同名: 等级考试的坑爹题: 比如变量取名 int sin=5; 可否? 标准答案: 可以, 代价是 sin 失去原有意义, sin(x) 不再代表正弦函数了. 但是这违反软件工程原则. 我们只能说, 编译器不会认为语法错误. 也可以执行. 但是如果作为一个大程序的一部分, 就有可能会导致问题. 而且会令阅读程序的人产生困惑和混淆. 另, 常量也可以用标识符表示,格式是:/非C语句! #define 标识符 数值 例如 第8页/共33页标识符: 推荐的命名规范: 简单程序可用 a,b,x0,y2,xx,p
6、x 等短名字。 实用程序最好能“见名知义”,例如: name/xm(姓名)、sex/xb(性别)、age/nl(年龄)、salary/gz(工资) 长名字的取名规则: Pascal 命名法:StudentName, StuNameNode 驼峰 命名法: studentName, stuNameNode 匈 牙 利 命 名 法 : s t r S t u d e n t N a m e , lpStuNameNode 注: Pascal命名法也称大驼峰命名法(Upper Camel Case)第9页/共33页 整型常量 C 的整数采用三种进制: 十进制。如:123, -456。日常使用。 八进
7、制数. 以0开头. 0-7. 如: 0123等于83。019 不合法. 16进制数. 以0 x 或0X 开头. 0-9 A B C D E F. 大小写均可 如: 0 xA2 等于十进制数 162。 八进制和16进制用于讨论机内数据, 所以无负数.汇编语言用尾缀, 如 10110001B是2进制, FFH是16进制数. 为显示专业级水平, 可以使用尾缀型16进制数讨论内存.第10页/共33页 整数的内存形式: 计算机用高电位和低电位表示值, 高电位记 1, 低电位记 0. 所以一个储存位可表示0或1两个状态, 称为1 比特bit. 比如: 十进制的 1万 = 机内 0010 0111 0001
8、 0000 有点长, 所以要采用分割写法. 大整数的分割写法: 十进制:thousands制,万位制。 二进制:八进制,十六进制。/i.e.是缩略式 例:10000D = 2710H =023420Q 0 010 011 1 00 010 000 “数据在内存中以二进制形式存放。” /Binary第11页/共33页附录: 2 进制与8、16进制的转换 28 000 0001 1010 2 011 3100 4 101 5110 6111 7 216 0000 00001 10010 2 0011 30100 4 0101 50110 60111 7 2161000 81001 91010 A
9、1011 B1100 C 1101 D1110 E1111 F第12页/共33页 整数的内存形式: 若干数学关系 一个储存位可表示0或1两个状态, 称为1 比特bit. 2个储存位可表示00, 01, 10,11 四个状态, 3bits可表示000,001,010,011,100,101,110,111八个状态. 一般地, m bits 可表示 2m 个符号。 数据以 byte 字节为组织单位. 读音bait 1 byte = 8 bits 一个变量占据几个字节?1 byte 可表示 256个符号。 n bytes 可表示 256n 个符号。 如果用一个字节表示整数, 只能表示256个数, 也
10、太少了. 16位计算机用2 bytes表示整数, 能表示65536个数. 32位计算机用4 bytes表示整数, 能表示 232 个数.第13页/共33页 内存形式的“解释” 练习: 4 bits 可表示 16个符号。你用来表示什么? 解答1: 整数 0, 16) 0000,0001,0010,0011,0100,0101,0110,0111 0 1 2 3 4 5 6 7 1000,1001,1010,1011,1100,1101,1110,1111 8 9 10 11 12 13 14 15 解答2: 整数 -8, 8) 负数为什么用补码?/钟算术/反码+1 0000,0001,0010,
11、0011,0100,0101,0110,0111 0 1 2 3 4 5 6 7 1000,1001,1010,1011,1100,1101,1110,1111 -8 -7 -6 -5 -4 -3 -2 -1 钟算术 = 解答1 和 解答2 几何兼容. 其他解答当然也可以.第14页/共33页 推广上页: 内存形式的“解释” m bits 可表示 2m 个符号。你怎么对应整数 ? 解答1: 整数 0, 2m) / 不含 2m ! 解答1对应无符号整数. 解答2: 记 s=m-1 整数 - 2s, 2s) 负数用补码?/钟算术 解答2对应符号整数. C 语言默认为符号整数. n bytes 可表示
12、 28n 个符号。称为整数变量的规格. Turbo C 时代 16位计算机 默认 2 字节整数, VC+ 时代 32位计算机 默认 4 字节整数, 216 = 65536. 215 = 32768 练习: 代入解答1和2.第15页/共33页 推广上页: 内存形式的“解释” n bytes 可表示 28n 个符号。称为整数变量的规格. C 语言为整数变量设置了 3 种规格: short, long, int(默认规格). 但没有指定具体大小. Turbo C 和 VC+: short = 2bytes, long = 4bytes int : Turbo C 默认2 bytes, VC+ 默认4
13、 bytes, 此外, char=1byte 也可以用于表示整数. C99 允许 long long=8bytes, C 语言默认为符号整数. 最高位为符号位. 前缀unsigned 表示无符号数. 全部是正整数. 根据前面的公式, 练习: 列出C的整型变量所有类型, 写出表示的数值范围.第16页/共33页 推广上页: 内存形式的“解释” C语言的8种整型类型:可省略的修饰符 signed char -128, 128) unsigned char 0, 256) = 0, 255 signed int unsigned int signed short int -32768,32767 un
14、signed short int 0, 65536) signed long int unsigned long int 注: long long 型未必都支持, 不在C89标准内. 第17页/共33页例: 整型变量的定义, 赋值, 显示 #include void main( ) int a= -11, c=3; unsigned char b= 2, d=6; printf(a+c=%d, b+d=%un,a+c,b+d); int a= -11, c=3; unsigned char b= 2, d=6; 也可以写成 int a, c; unsigned char b, d; a= -1
15、1; c=3; b= 2, d=6; 前者是声明的同时予以赋值, 这称为初始化, 或者赋初值. 如果声明后不赋值而直接打印值, 或参与运算, 则不同语言和版本的规定是不同的: 当前版本是 B+EA. 语法错误 B.随机值 C. 0 D.某个默认值 E.运行时报错第18页/共33页例: 整型变量的溢出 #include void main( ) short a,b; char c=400; / int 改short 演示。 a=32767; b=a+1; printf(%d, %d, %d n,a,b,c); 运行结果: 32767,-32768, -112解释结果:为什么? - 这个有点难!
16、如果 c=40000呢? / 定律: 相差整数倍, 落入范围. 如果显示格式不符, 则按照显示格式溢出, 例如 char c=400; printf(“%u n”,c); 答案显示: 4294967184第19页/共33页整型常量的类型 整数常量一般是不区分类型的。但是大数赋给小规格变量会导致溢出。 例:一个-32768+32767范围内的整数,可赋给short或 long型变量。超过上述范围的整数,可以赋给long型变量。如果赋给short型变量,程序不会报错,但是会丢失数据。同规格 unsigned 与 signed 之间互相赋值,不会丢失数据。但是可能影响计算结果。 整常量后面加后缀,可
17、强制表示数据类型,主要用于函数调用。如函数形参为 long 型,则要求实参也为 long 型。 后缀u 或 U表示 unsigned int 型,如12345u。 后缀 l 或 L 表示 long型。例:123l,432L,0L 等级考试考常量形式是否合法: 比如 0XABL, 123UL 等.第20页/共33页 实数型常量 实型常量的表示形式 (均为十进制) 小数形式, 15.75, -0.0025, 指数形式 1575e-2, -2.5e-3, 25E-4(浮点制、科学记数法)表示1.58109。 / E或e之前必须有数字,E或e后面必须为整数, 等级考试考常量形式是否合法: 比如 123
18、E2, 1.23e-2, 0., .0, 0.0, .0e0, 等. /经检验这些均合法. 机器内存:二进浮点制。略。第21页/共33页 实数型变量: 规格和解释 实型变量的规格:单精度 、双精度、长双精度 float, double, long double / sizeof = 4 8 8 float型数据4 byte= 32bits = 7位10进制数字 double型数据8 byte=64bits = 15-16位 有效数字取值范围以绝对值计: float: 1.401298E-45 3.402823E+38 double: 4.94E-324 1.7977E+308 实型常量的后缀
19、f 或者 F 确保按照较短规格处理。 (实型常量默认自动保存为双精度型) / 80bits double的运算速度反而比单精度快. 也有相反说法.第22页/共33页 实数型变量: 规格和解释 例: float x,y; double z; float型数据4 byte= 32bits = 7位10进制数字 double型数据8 byte=64bits = 15-16位有效数字 float double printf(“%.25fn%.25f ”,x,y);结果: 又例: , y; y=x+20; 问: y 计算结果? 上机自行实验. 预测结果: 加不上去, 因为有效数字不够.第23页/共33页
20、 字符型数据: 字符常量 用单引号括起一个字符。如a, 9, !, 字符串常量 用双引号括起一串字符。如: “China”,“YES&NO”,“33312-2341”,“A” 等。 字符集: ASCII 码 / 计算机可处理的字符 变量规格: 1 byte (8bits) 内存解释:按照ASCII 码, 如 0100 0001 = A ASCII 码的两种表示法: A = 65 = 41H 0110 0001 = a = 97 = 61H 换言之, 字符在内存中也是二进制. 是解释成整数还是字符依赖于上下文. C 的字符可与整数通用, 但渐受限制.第24页/共33页 字符型数据: 字符
21、常量在内存中占一个字节。 用单引号括起的字符,如a、?、B、5、和*等都是合法的字符常量。 它们的存储形式如下所示字符常量字符常量存储形式存储形式十进制表示十进制表示A01 000 00165a01 100 00197?00 111 11163500 11010153第25页/共33页 转义字符: 在ASCII码表中有一些非印刷的控制字符, 例如回车、响铃、退格等。为了能够表示它们,C语言采用在反斜杠()字符后加其他字符的方法来解决。这称为转义字符。 例如,n 表示换行字符。 语言字符集中的任何一个字符均可用转义字符来表示。 ddd 和xhh 正是为此而提出的。ddd 和hh 分别为八进制和十
22、六进制的ASCII 代码。 如101 表示字母“A” ,102 表示字母“B”,134 表示反斜线,X0A 表示换行等。 第26页/共33页 转义字符: 常用的一些转义字符, 及其十进制ASCII码。第27页/共33页常用 字符常量 (10进制ASCII值) A Z: 64+k, a z : 96+k, k=126. 0 9: 48+k, k=09. space = 32 在程序中可根据需要用不同形式来表示一个字符八进制八进制形式形式十六进制十六进制形式形式141x61053x2b047x27012xa十进制十进制形式形式97433910说明说明小写字母小写字母a加号字符加号字符+单引号单引号
23、换行换行字符字符字符字符常量常量a+n第28页/共33页字符变量 字符变量用于存放字符,在内存中占一个字节的存储单元。 字符变量的定义形式如下: char c1,c2; 可以把字符常量赋值给字符变量,例如: c1=a;c2=b; 字符型数据在内存中的存放方式: 其实是存放该字符的ASCII码 例如: char c1,c2;c1=a; c2=b;第29页/共33页字符变量的声明、赋值、显示void main( ) char c1 = a, c2 = b; /声明 / 赋值 printf(“%c %c”,c1,c2); / 显示 字符变量只能存放一个字符,并且不能够放字符串。 这是错的:c1 =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中文写作能力测试试题及答案
- 2025年综合素质评价相关试卷及答案
- 2025年智能家居与家电设计考试题及答案
- 2025年艺术鉴赏与批评专业试卷及答案
- 2025年消防工程师执业考试试卷及答案
- 2025年工业工程与管理专业考试题及答案
- 2025年国学与传统文化课程考试试题及答案
- 2025年家庭教育与亲子沟通课程考试试卷及答案
- 2025年计算机图形学基础考试题及答案
- 2025年经济法与公司法考试卷及答案
- 2025年地理会考简答题思路模板
- 鼻饲误吸的预防与处理
- 2025年矫形器装配工竞赛考试题(附答案)
- 2025年行政执法证资格考试必刷经典题库及答案(共150题)
- 2025代谢相关脂肪性肝病基层诊疗与管理指南解读课件
- 自体输血知识培训课件
- 2025年高中语文课内文言文《谏太宗十思疏》理解性默写含答案
- 2024年山东枣庄事业单位招聘考试真题
- 19电学专题实验-《练习使用欧姆表》专项提升(含答案)
- 《无人机操控基础》课件
- 收集土木APS例题及资料
评论
0/150
提交评论