C语言程序设计 第2章 数据类型
本章学习内容 常量和变量,整型和实型 标识符命名,变量的定义和赋值 计算数据类型占用内存空间的大小
2.1 常量与变量 C语言程序处理的数据形式 常量(Constant) 变量(Variable) 在程序中不能改变其值的量 其值在程序执行过程中是可以改变的
一个简单的C程序例子 编译预处理命令 程序注释 并列的两个函数 其中主函数是 程序的入口 #include <stdio.h> /*函数功能:计算两个整数相加之和 入口参数:整型数据a和b 返回值: 整型数a和b之和 */ int Add(int a, int b) { return (a + b); } /*主函数*/ main() int x, y, sum = 0; printf("Input two integers:"); scanf("%d%d", &x, &y); /*输入两个整型数x和y*/ sum = Add(x, y); /*调用函数Add计算x和y相加之和*/ printf("sum = %d\n", sum); /*输出x和y相加之和*/ 程序注释 并列的两个函数 其中主函数是 程序的入口
C程序常见符号分类 关键字(Keyword) 标识符(Identifier) 又称保留字( C Reserved Word ) A word that has special meaning in C 标识符(Identifier) 系统预定义标识符(C Standard Identifier) A word having special meaning but may be redefined (but is not recommended!!) 用户自定义标识符 变量,函数名,……
C程序常见符号分类 运算符(Operator) 分隔符(Separator) 其他符号 常量(Constant) 详见附录C 空格、回车/换行、逗号等 其他符号 {和}标识函数体或语句块 /*和*/是程序注释的定界符 常量(Constant)
2.1.1常量(Constant) 在程序中不能改变其值的量 包括: 十进制 长整型 无符号整型 八进制 十六进制 在程序中不能改变其值的量 包括: 整型(如 0,67, -2, 123L, 123u, 022, 0x12) 默认为int 实型(如 2.3, 1.2e-5, 2.73F, 2.73L) 默认为double 字符型(如 'z', '3', '$', '\n' ) 用\开头的字符为转义字符, 代表1个字符 字符串(如 "UKM", "1", "5a" ) 枚举型 十进制小数 指数形式 单精度实型 长双精度实型
2.1.2变量(Variable ) 变量的值在程序执行过程中是可以改变的 变量的属性 Name 变量名 Type 变量类型 Value 变量的值 Address 变量的存储单元——地址
变量声明(Variable Declaration) 变量的声明 类型关键字 变量名; 使用变量的基本原则 变量必须先声明,后使用 所有变量必须在第一条可执行语句前声明 声明的顺序无关紧要 一条声明语句可声明若干个同类型的变量
变量声明(Variable Declaration) 声明变量是初始化变量的最好时机 不被初始化的变量,其值为随机数 结果会是什么?
变量赋值(Variable Assignment) 运算规则: 变量 表达式 语法: 变量 = 表达式 ; 规则: 左值和右值类型一致 Valid Example: Invalid Example: int x; int y; x = 12; y = 5.75;
2.3数据类型(Data Type) 为什么要区分类型? 变量的类型决定了 数据的存储形式 合法的取值范围 占用内存空间的大小 可参与的运算种类
数据类型(Data Type) 数据类型 基本类型 构造类型 指针类型 无类型 整型 实型(浮点型) 字符型 枚举类型 数组类型 结构体类型 共用体类型 单精度实型 双精度实型 基本整型 长整型 短整型 无符号整型 长双精度实型
基本数据类型 int float double char 整数,在目前绝大多数机器上占4个字节 TC 2.0,2个字节 单精度浮点数,4个字节 double 双精度浮点数,8个字节 char 字符,1个字节 表示256个ASCII字符,或0~255的整数
数据类型修饰符 short long unsigned short int,简写为short,短整数,2个字节 long int,简写为long,长整数,4个字节 long double,长双精度(高精度)浮点数,10个字节 unsigned 用来修饰char、int、short和long 无符号整数(正整数和0)
不同类型取值范围不同 C语言直接提供的任何类型都有取值范围
不同类型取值范围不同 Most significant bit (MSB) is sign(最高位为符号位)
2.4如何计算变量或数据类型 所占内存空间的大小 英文称谓 中文称谓 换算方法 bit(b) 位(比特) Byte(B) 字节 1 B = 8 b Kilobyte(KB) 千字节 1 KB = 1 024 B Megabyte(MB) 兆字节 1 MB = 1 024 KB Gigabyte(GB) 吉字节 1 GB = 1 024 MB Terabyte(TB) 太字节 1 TB = 1 024 GB 1 TB = 1 024 GB 为什么是1024而不是更容易计算的1000? 为什么是8而不是更直观的10? 这将在计算机原理课解答。 1 GB = 1 024 MB 1 MB = 1 024 KB 1 KB = 1 024 B 1 B = 8 b
2.4如何计算变量或数据类型 所占内存空间的大小 一个位有多大? 只能是0或者1,二进制 一个字节有多大? 可以表示0~255之间的整数 未来的趋势是任何字符,无论英文、中文还是其它文字,都用两个字节来表示。这种编码叫做UNICODE
不同类型占用的内存字节数不同 同种类型在不同的平台其占字节数不尽相同 不要对变量所占的内存空间字节数想当然 如int在16位、32位和64位系统上分别占2、4和8个字节 不要对变量所占的内存空间字节数想当然 用sizeof获得变量或者数据类型的长度 现象与危害 在平台间移植时会出现问题,导致数据丢失或者溢出 注意!
sizeof到底是什么? C语言的关键字,并非函数 两种语法形式 sizeof(类型) 计算类型占用的字节数 结果为类型占用的字节数 结果为表达式值所属类型占用的字节数 一般都使用sizeof(变量名)
现场演示例2.2 在TC和VC、CB下的运行结果 #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)); }
2.5变量的赋值和赋值运算符 变量 = 表达式 ; 简单赋值(Simple Assignment) 语法: 变量 = 表达式 ; Don’t forget the semicolon !! Every assignment expression has a value
多重赋值 Multiple Assignment 语法: 变量1 = 变量2 = 表达式 ; Don’t forget the semicolon !! 变量1 = (变量2 = 表达式) ; 右结合:从右向左赋值
多重赋值 Multiple Assignment Example: int a, b; float x, y; . . . a = b = 0; x = y = 100.0; b ?? a x ?? y 100.0
作业 习题 2.1, 2.2
Questions and answers