第二章 数据类型和表达式

  • 格式:doc
  • 大小:114.50 KB
  • 文档页数:8

第二章数据类型和表达式§2.1 基本字符集、关键字和标识符一.一.基本字符集字符是C的基本元素,C语言允许使用的基本字符集:1.1.26个大写字母A B C D E F G H I J K L M N O P Q R S T U V W X Y Z2.2.26个小写子母a b c d e f g h I j k l m n o p q r s t u v w x y z3.3.10个阿拉伯数字0 1 2 3 4 5 6 7 8 94.4.其他字符!" # % & ' ( ) * + , - . / : < = > ? [ \ ] ^ _ { | } ~5.5.空格字符以及制表符合换行符等控制字符二.二.关键字(P375,附录II)C中具有固定意义的字符串。

(1)(1)C中的关键字共32个,必须用小写字母(2)(2)关键字不可用于变量名、函数名等。

auto break case char const continue default do doubleelse enum extern float for goto if int long registerreturn short signed sizeof static struct switch typedefunion unsigned void volatile while三.三.标识符是由字母、下划线和数字三种字符组成(1)(1)第一个字符必须为字母或下划线(2)(2)C对标识符的长度规定为任意,Turbo C区分32 个字符(3)(3)C区分大小写(4)(4)不允许关键字作为标识符标识符用于命名变量、类型、函数和其他各种用户定义的对象。

§2.2 C数据类型程序=算法+数据结构+结构化程序设计方法+语言工具和环境算法是解决问题的步骤。

解决问题的过程要涉及到数据,数据的形式是数据结构。

C语言提供的数据结构是以数据类型的形式出现的。

整型int字符型char基本类型实型(浮点型) 单精度型float双精度型doubleC数据类型枚举类型构造类型结构体类型共用体类型指针类型空类型void以下章节介绍相应数据类型。

§2.3 常量与变量一.一.常量在程序运行过程中保持不变的量,称为常量。

常量分为不同的类型,它们分别是:整型常量,如:12、100、-50实型常量,如:3.8、-0.88字符常量,如:'A'、'5'字符串,如:"string"符号常量,以标识符代表一个常量,通常大写。

看一个符号常量的例子#define PI 3.14main( ){int r;float s;s=PI*r*r;printf("area=%f\n",s);}二.二.变量在程序运行过程中,其值可以改变的量称为变量,变量名为标识符。

1.1.变量的物理意义(变量以名标识)地址:在内存中的位置即内存单元的编号(只是不关心或不知道)值:相应地址单元中存放的内容2.2.变量的定义定义的一般形式:[存储类型说明符] 数据类型说明符变量名1,…变量名n;说明变量存储方式规范存储在该变量中的值的取值范围和所能可省略参加的运算例如int student; /*定义了整型变量student*/3.3.几点说明a.a.符号常量与变量两者的名字都是标识符,但所代表的值,一个不可变,一个可变。

b.b.C语言要求对所用到的变量作强制定义,“先定义后使用”,用处有三:(书P40)●●凡未被事先定义的,不作为变量名●●指定变量的数据类型,在编译时,为其分配相应的内存单元●●指定变量的数据类型,在编译时,可检查其参加的运算是否合法§2.4 整型数据2.4.1 2.4.1整型变量在介绍C语言的整型变量之前,简单的介绍一下计算机中的数值表示。

在计算机中数值可以采用多种不同的方法,一般常用的有:原码、反码和补码。

1.原码只将最高位作符号位(以0代表正,1代表负),其余的各位代表数值本身的绝对值(以二进制表示)。

如:+7 的原码为:00000111-7 的原码为:10000111+0 的原码为:00000000-0 的原码为:10000000显然,+0和-0表示的是同一个0,而在内存中却有两个不同的表示。

也就是说,0的表示不唯一,这不适合计算机的运算。

2. 反码如果是一个正数,则它的反码与原码相同。

如果是一个负数,则符号位为 1,其余各位是对原码取反。

如:+7 的反码为:00000111-7 的反码为:11111000+0 的反码为:00000000-0 的反码为:11111111同样,反码0的表示也不唯一。

用反码表示数,现已不多用。

3.补码如果是一个正数,则它的补码与原码相同。

如果是一个负数,则将该数的绝对值的二进制形式,按位取反,然后再加1。

如:+7 的补码为:00000111-7 的补码为:11111001+0 的补码为:00000000-0 的补码为:100000000补码0的表示是唯一的,所以计算机是以补码形式存放数的。

例:计算25-18=?,用补码运算。

25的补码为:00011001-18的补码为:1110111000011001+ 1110111000000111一.一.整型变量的分类B 有符号和无符号的区别在于对最高位的解释1[1] (见书P44 图3.5)二.二.整型变量的定义看几个例子:int a,b;unsigned short c,d;long e,f;做几个练习:为变量a赋值12,为变量b赋值为-12;如何定义?2.4.2 整型常量一.一.整型常量的表示形式:1.1.十进制整数如:782.2.八进制整数:以0开头,如:0713.3.十六进制整数:以0x开头,如:0x7a5二.二.整型常量的类型1.1.按整数范围来区分2.2.非负整数亦可认为是无符号型3.3.整数后加L或l,强调为长整型常量;例如:582L 整数后加U或u,强调为无符号型整型常量(见书P45的5点说明)§2.5 实型数据一.一.实型变量实型变量的类型:单精度和双精度。

二.二.实型常量实型常量的表示形式:1.1.小数形式:由数字和小数点组成,如:0.38、38.5等2.2.指数形式:尾数+e(E)+ 指数如:1.35E2=1.35*1020.11E5=0.11*105注意:1.1.E前必须有数字,E后的指数必须为整数;2.2.实型常量不区分float或double;1[1]有符号是将数据存储单元的最高位作为符号位:0为正,1为负;无符号是将数据存储单元的最高位作为数值的一部分。

如:float a;a=112234.567; 但float变量只截取7位有效数字,所以最后两位数字不起作用。

§2.6 字符型数据2.6.1 字符常量一.一.可视字符:以单引号括起来的一个可打印字符;例:'A', 'x' , ','二.二.转义字符:以\开头的字符序列表示一个字符,通常用于不可打印的字符。

常用的转义字符:(书P48)三.三.一个例子main( ){printf(" ab c\t de\rf\tg\n");printf("h\ti\b\bj k\n");}2.6.2 字符变量一.一.字符变量的类型类型名称类型说明符长度取值范围字符型char80~255二.二.字符变量的定义字符变量类型说明符变量名列表例:char c1,c2;[注] 字符变量用来存放字符常量,只能是一个字符。

三.三.字符数据在内存中的存储形式及其使用方法一个字符占一个字节的存储单元,存储单元存放的是该字符相应的ASCII码值(是以二进制形式存放的),因此可有256个字符。

1.1.ASCII字符集+128个扩展字符2.2.在内存中存储的代码值形式,亦可看作整型,字符数据和整型数据可以互相赋值。

3.3.对有符号的字符变量,其所占据的字节的最高位表示符号,则可把字符处理为带符号的整数。

例如:c1='A'2.6.3 字符串常量字符串常量形式:以双引号括起来的字符序列。

1.1.若在字符串中含有" 和\ 字符,必须使用转义字符形式2.2.字符串的长度=字符串中字符的个数,而字符串常量在内存中存储时,系统自动在其末尾加上'\0'作为字符串结束标志,所以存储字符串的所用字节数比字符串长1。

例如:"Happy New Year !" "CHINA" "315" "He said:\ "Hello!\""比较'a' 与"a"的区别。

[注意] C 语言中没有字符串变量,只能用字符数组存放字符串常量。

§2.7 变量赋初值变量初始化:在变量定义的同时,根据程序需要赋初值。

例如:int i=5,j=5; float f,g=3.5; [说明]1. 1. 对于几个变量赋同一初值,不可写成:int i=j=5; 2. 2. 初值必须是常量或操作数是常量的算术表达式。

3. 3. 初始化不是在编译阶段完成的,是在程序运行时执行本函数时赋以初值的。

例如:int i=5; 相当于 int i; i=5;§2.8 各类数值型数据间的混合运算在C 语言中,整型、实型和字符型数据间可以混合运算。

不同类型的数据先转换为同一类型,然后进行运算。

转换规则见书P54。

§2.9 算术运算符和算术表达式2.9.1运算符和表达式运算符的分类:1. 1. 按运算符的操作对象个数分类:单目;双目;三目 2. 2. 按功能分类:(见P55)表达式:将运算符和变量、常量、函数按一定语法规则结合起来的式子。

2.9.2 算术运算符和算术表达式一. 一. 基本算术运算符+ 加法运算符 - 减法运算符 * 乘法运算符/ 除法运算符 (整型/整型,结果为整数,即取商的整数部分)(操作数有一个为实型,则商亦为实型) % 模运算符 (操作数必为整型,结果为相除的余数)二.二.算术表达式用算术运算符、自加自减运算符、括号将运算对象连接起来的式子称为算术表达式。

三.三.表达式求值求值过程大小表达式值类型在表达式求值过程中:1.1.优先级高的先求值。

[优先级]决定了不同的运算符求值的先后顺序,优先级高的先求值;2.2.当一个运算对象两侧的运算符优先级相同时,根据结合性决定求值顺序。

[结合性]左结合:“从左到右”,运算对象先与左边的运算符相结合右结合:“从右到左”,运算对象先与右边的运算符相结合(见附录IIIP375)3.3.数据类型(1)(1)操作数同类型:运算结果保持同类型;操作数不同类型:将精度低的转换为精度高的类型(2)(2)转换方式自动转换方式强制类型转换格式:(类型名) (表达式)(类型名)是单目运算符,优先级较高对表达式进行类型转换,一定加括号例:int a,x;float y;x=12;y=38.5;a=y%x; /*非法*/a=(int)y%x;四.四.自增、自减运算符++(自增) 使变量的值加1--(自减) 使变量的值减1++i: i加1,再返回i的值i++: 返回i的值,然后i加1,--i: i减1,再返i的值i--: 返回i的值,然后i减1例:int i=3,j;j=++i;j=i++;i和j的值为几?[注意]1.++,--,只能用于变量,如:++6、(a+b)++等都是非法的2.++,--结合方向从右到左,如:-x++ 若是左结合性就是非法的3.++,--会带来副作用,如:(x++)+(x++)+(x++) 设x的值为3,表达式的值为几?(其他的见书p58)§2.10 赋值运算符和赋值表达式一.一.简单的赋值运算符:=1.1.左操作数必须是变量2.2.赋值运算符为右结合性二.二.赋值运算中的类型转换赋值运算符左右两边的类型通常要一致;若不一致,系统会自动处理:1.1.实型赋给整型,截去小数部分;2.2.整型赋给实型,数值不变,以浮点形式存储3.3.字符赋给整型三.三.复合赋值运算符op=: (op是算术运算符或位运算符)+=,-=,*=,/=,%=,&=,|=,^=,>>=,<<=1.1.作用:将左右操作数进行算术运算或位运算,然后将运算结果与左操作数进行赋值运算2.2.可看作简化形式:左op= 右;左=左op 右例:x*=5 相当于x=x*5y/=a+b 相当于y=y/(a+b)例:a=12a=+10四.四.赋值表达式形式:<变量> <赋值运算符> <表达式>例:a=5a=b=5a=(b=4)+(c=6)§2.11 逗号运算符和逗号表达式一.一.运算符:,[说明] 逗号运算符是所有运算符中优先级最低的。