型。
(C语言的数据结构是以数据类型形式出现的) 1.数据类型分类: 整型 int
基本类型 字符型 单精度型 float 实型(浮点型)
枚举类型 双精度型 double 数据类型 数组类型
构造类型 结构体类型 struct 共用体(联合)类型 union 指针类型* 空类型void
说明:在程序中对用到的所有数据都必须指定其数据类型。 2.C语言中的常量和变量
常量:——在程序运行过程中,其值不能被改变的量。 变量:——在程序运行过程中,其值可以改变的量。 说明:1)常量和变量,都要有一个名字表示它; 习惯上,符号常量(别名)名用大写,变量用小写。 符号常量的定义为: #define P 30
其它常量:直接用数据表示 例: 23 45.5 ‘e’ 3e+2 2)在C语言中,对变量要先定义,后使用。
3)如果一个变量被指定为一确定类型后,在C语言编译时,就能为其分配相应的存储单元。 a 变量名 存储地址)2000 3 变量值 存储单元 地址的概念
3.常用的基本数据类型 (1)整型
1)整型常量:十进制整数 123,-11,0 非0开头 八进制整型 0123,-011 0开头
十六进制整型 0x11 0x20 0x0D 0XFF 0x4e0x/0X开头
说明:在一个整常量后面加一个字母:l或L,是长整型常量。22L0733L 0xae4l
2)整型变量:
定义 存储字节 数的范围
基本型 int x (2字节) -32768~32767
短整型 short int x (2字节) -32768~32767
长整型 long int x (4字节)-2,147,483,648~2,147,483,647 无符号型 unsigned int x (2字节) 0~65535 unsigned short x(2字节) 0~65535
unsigned long x (4字节) 0~4,294,967,295 注: 数据在内存中是以:二进制形式存放 如:9 为 00001001
例: x=13。 x=015 。 x=0xD 存储结构 见P44 图3.5 注:数据超过数据范围,会发生数据溢出 例3.2、3.3 (2)实型(浮点数)
1)实型常量: 十进制整数 1.23 .0123 指数形式 1.23e3,1.00e-3 2)实型变量:数的表示范围P46表3.2
单精度 float x(4字节)3.4x10-38~3.4x1038 TC默认 双精度 double x (8字节)1.7x10-308~1.7x10308 说明:实型常量不分float和double,只有十进制表达方式
有的C编译系统64位存储方式,如尾加f或F可表示32位:324.567f 例:x=1.23。 x=123e3P47例3.4(存储精度) (3)字符型
1)字符常量:
a) 用单引号括起来的一个字符 ‘a’‘A’
b) 转义字符(由“\\专用字母” ) 书P48表3.3 例3.5 \\0字符串结束符 \\n换行 \\t水平制表 \\ddd八进制数 \\xdd十六进制数 2)字符变量: char c(1字节)
说明:一个字符变量,只能放一个字符常量。实际是把该常量的ASCII值,送入字符变量中。即:‘B’(66) c (字符变量)
书P374ASCII表 p50例3.6-7 c=‘B’c的内容为66
故:字符数据可以进行算术运算;即:c=‘B’+2 为68 字符数据在内存中的存储方式 书P50
unsigned char 0-255 char -128-127有符号数在TC中是用补码表示的
127(0x7f) 0111 1111 128(0x80) 1000 0000 复习:补码的规定:
正数:其原码、反码、补码相同
负数:最高位为1,其余各位为原码的反码(原码的相应位取反),然后对整个数加1。
140(0x8c) 1000 1100→1111 0011 + 1(取反加1)→1111 0100→-0x74 -0x74 1000 1011 + 1(取反加1) → 1000 1100 → 0x8c (0x80为负数-74 高位为1) 3)字符串常量
用双引号括起来的字符 “a” ,“ABFD”“a”=“a\\0” <> ‘A’
说明:C规定,在每一个字符串的结尾应加一个“字符串结束标志”(\\0),
以便系统判断字符串是否结束。
4.各类数值间的混合运算
1)整型、字符型、单精度型、双精度型数据——可以混合运算 2)字符型、整型——可以通用 规则:高double float long unsigned
低int char,short
例如 10+’a’+1.5-8765.1234*’b’-858873.593200 (TC默认6位小数) 10+97+1.5-8765.1234*98 二.运算符和表达式
C表达式:由变量、常量、函数等运算对象和运算符组成的式子 C运算符作用:
1)能把一些基本运算模块用单一的运算符处理 2)使用丰富的运算符,构成多种表达式
C运算符有优先级,优先级高的先执行,同级的由结合规则决定其处理规则
C运算符有两种结合规则:
1)从左到右的结合运算顺序;即:a=5+x-10;运算对象与左边运算符结合
2)从右到左的结合运算顺序;即:x=y=7;运算对象与右边运算符结合
C运算符分类 书P55 1.基本运算符(算术运算符) C语言有7个基本运算符
1)单目运算符:(表示符号) 正号“+” 负号“-”
2)双目运算符:+、- 、*、/、%(模运算,求余运算,两侧为整数) 说明:
a)运算顺序的结合方向从左到右
b)求余(取模)运算符是对两个整数相除的余数,计算结果的符号与第
一个数的符号相同。即:-5%3 值为-2、 -5%-3 值为-2、 5%-3 值为2 2.自增、自减运算符(优先级高于算术,右结合) 作用:——使变量的值增1或减1
++i(--i)——在使用i之前,先使i的值加1(减1),然后再使用i。
i++(i--)——先使用i的值,然后再使i加1(减1)。 例:i =4。
j=++i。 i 值为5,值为5; j=i++。 i 值为5,j值为4
说明:1)自增、自减运算符++(--),只能用于变量,不能用于常量或表达式
即:5++ 、 (a+b)++ —— 不合法 2)运算顺序的结合方向从右到左 例 例: main(){
int i=3 z,x,y。 z=(i++)+(i++)+(i++)
x=y=3。
//结果:z值为9 i值为6 z=x+++y。
//变量x右结合运算符++(不是3+4+5=12) printf(\。 }
输出结果:z=6 x=4 y=3
如果:z= -x+++y。 输出结果:z=0 x=4 y=3 x先为-4,然后+y,最后x++
3.赋值运算符和赋值表达式(优先级低于算术,右结合) (1)“=”——赋值运算符
作用:将一个数据赋给一个变量即:x=21
注意: 如果赋值运算符两侧的类型不一致,在赋值时,要进行类型转换。P61例3.9
即:float f 。 f=23 f值为23.0000符号位扩展 (2)复合的赋值运算符
“+=、-=、*=、/=、%=”—— 在赋值符“=”之前加上其它运算符 称复合运算符(也称为自反运算符) 例:a+=3 等价于 a=a+3 x*=y+8 等价于 x=x*(y+8) y/=4 等价于 y=y/4 m%=3 等价于 m=m%3
说明:
C语言采用这种复合运算符:
为了简化程序,使程序精练;提高编译效率。 (3)赋值表达式
格式:变量=表达式 表达式:
可以是 1)常量、变量、算术表达式; 2)赋值表达式
即:a=(b=5) 或 a=b=5 (运算顺序的结合方向从右到左) 例:
a=b=c=6 。 a=5+(c=6) (结果a=11 c=6)
如果:a=3。 求:a+=a-=a*a。 [有:1] a*a。 9 2)a= a-(a*a)。 -6 3) a+=-6 ] -6+-6 a为:-12 结果值为:-12
4.逗号运算符和逗号表达式(优先级最低,左结合) 用“,”将两个表达式连接起来。
格式:表达式1,表达式2 即: 3+5,6*9; 例: 3+5,6*9; 值为54
(先求解表达式1,再求解表达式2,最后逗号表达式的值为表达式2的值)
a=2*5,a*3; a值为10 结果值为:30(先求:a=2*5,后求:a*3) x=(a=2*5,a*3),a+4 a值为10 x值为30 结果值为:14 说明:
使用逗号表达式的目的,只是为了得到各个表达式的值(常用于循环语句)
解表达式1的结果可能影响解表达式2的值
5.强制类型转换运算符(优先级高于算术,右结合) 在要转换的数据前,用小括号括上要转换的数据类型 即: (int)x; (int)(a+b)(int)x+y 格式:(类型名)表达式
C一般会自动进行数据类型转换P56例3.8,用于不能自动转换的地方x%3(float f)
6.关系运算符和关系表达式(书P87)(优先级低于算术,左结合,高于赋值)
(1)6种关系运算符
< <= > >= (优先级高) = = !=(优先级低) (2)关系表达式
表达式 关系运算符 表达式
即:a>b a+b>=b+c (a=4)<(b=8) ‘x’= = ‘y’