280 likes | 411 Views
本章教学内容: 3 .1 C 语言的数据类型 3 .2 常量与变量 3 .3 整型数据 3 .4 浮点型数据 3.5 字符型数据 3.6 变量赋初值 3.7 各类数值型数据间的混合运算 3.8 算术运算符和算术表达式 3.9 赋值语句和赋值表达式 3.10 逗号运算符和逗号表达式. 第 3 章 数据类型、运算符与表达式. 本章重点: 基本数据类型 常见运算符 算术表达式 赋值语句. 数组类型. 结构类型 struct. 联合类型 union. 枚举类型 enum. 3.1 C 语言的数据类型.
E N D
本章教学内容: • 3.1 C语言的数据类型 • 3.2 常量与变量 • 3.3 整型数据 • 3.4 浮点型数据 • 3.5 字符型数据 • 3.6 变量赋初值 • 3.7 各类数值型数据间的混合运算 • 3.8 算术运算符和算术表达式 • 3.9 赋值语句和赋值表达式 • 3.10 逗号运算符和逗号表达式 第3章 数据类型、运算符与表达式 • 本章重点: • 基本数据类型 • 常见运算符 • 算术表达式 • 赋值语句 计算机工程学院 伍俊明地
数组类型 结构类型 struct 联合类型 union 枚举类型 enum 3.1 C语言的数据类型 • 数据类型——描述数据的存储结构、取值范围、操作种类等 • C语言中的数据类型 整型 int 基本类型 字符型 char 单精度实型float 实型(浮点型) 双精度实型double 数据类型 构造类型 指针类型 空类型(无值类型) void 计算机工程学院 伍俊明
3.2 常量与变量 3.2.1 常量与符号常量 • 常量:在程序运行的过程中其值不能被改变的量 • 常量区分为不同的类型: 整型 100,125,-100,0 实型 3.14 , 0.125,-3.789 字符型 ‘a’, ‘b’,‘2’ 字符串 “a”, “ab”, “1232” 计算机工程学院 伍俊明
3.2 常量与变量 • 符号常量——通过符号名代表一个常量π #define PI 3.14159 #include <stdio.h> void main(){ float r, c, s; r=2.0; c=2*PI*r; s=PI*r*r; printf(“r=%f, c=%f, s=%f\n”, r, c, s); } • 说明:PI已经定义为符号常量,以后给它赋值是错误的,如 • PI=3.14; • 所有符号常量将在编译前进行替换! 计算机工程学院 伍俊明
3.2 常量与变量 3.2.2 变量 • 变量:在程序执行的过程中其值可以改变的量 • 变量代表内存中具有特定属性的一个存储单元,该单元的编号就是内存地址,该单元中存放的数据就是变量的值。为方便使用,可给该单元取一个名字,叫做变量名。 变量名 r 210006 2.0 变量值 存储单元 存储单元 计算机工程学院 伍俊明
3.2 常量与变量 • 变量的命名规则:以字母或下划线打头的字母、数字和下划线组成的序列,C标准至少识别31个。 • 举例: • sum,_total, month, Student_name,lotus_1_2_3,BASIC, li_ling,r,R • M.D.John, ¥123,3D64,a>b • 注意: • 变量名必须“先定义、后引用” • 变量名尽量“见名知义”,便于理解 • 每个变量定义时必须指明其类型 例:int i, j, k; float r, c, s; • 变量定义的一般形式: 数据类型 变量列表; 计算机工程学院 伍俊明
3.3 整型数据 一、整型数据的表示方法 • 十进制数:123,-456,4 • 八进制数:0123(等于十进制数83),-011 • 十六进制数:0x123(等于十进制数291),-0x34 二、整型数据在内存中的存放形式 • TC中占2个字节,VC++6.0中占4个字节 • 正数原码表示,负数补码表示 i 10 -10 j 符号位 计算机工程学院 伍俊明
3.3 整型数据 三、变量的分类 • 根据数值范围分三类: • 基本整型 int • 短整型 short int,或short • 长整型 long int,或long • 按有无符号分类,共6小类 • 基本整型 [singed] int, unsigned int • 短整型 [signed] short [int],unsigned short [int] • 长整型 [signed] long [int],unsigned long [int] 计算机工程学院 伍俊明
3.3 整型数据 计算机工程学院 伍俊明
3.3 整型数据 四、整型变量的定义——一般置于函数的开头 int a, b; unsigned short c,d; long e, f; • 例3.2 整型变量的定义与使用 • 例3.3 整型数据的溢出 整型数据的运算: 加:+ 减:- 乘:* 整除:/ 取余:% 计算机工程学院 伍俊明
3.3 整型数据 五、整型常量的类型 • 范围在-32768~+32767之间的默认为int型,超出者默认为long int型; • 一些编译系统中short int与int型数据在内存中存储结构相同,因此两者没有区别; • 整型常量后面加一个字母u或U,如12345u,表示无符号整数,-12345u按补码53191视为无符号整数; • 整型常量后面加一个字母l或L,如123l、456L,表示长整数。 计算机工程学院 伍俊明
3.4 浮点型数据 一、浮点型常量的表示方法 • 十进制小数表示法:0.123,-2.345,0.0 • 指数形式:123e3,-3.456E-2 二、浮点型变量的存储结构 • 单精度浮点数占4个字节,双精度浮点数占8个字节 • 浮点数按指数方式存储 • 1e3、1.8e-3、-123e-6、-.1e-3 • e3、2.1e3.5、.e3、e 指数部分 3.14159 小数部分 符号位 计算机工程学院 伍俊明
3.4 浮点型数据 三、浮点数的分类 • 浮点型数据分单精度、双精度和长双精度三类 • 浮点型变量的定义及浮点数的舍入误差 float x=3.14159, y; double u, v=-1.320; long double t; 说明:一个浮点型变量只能保证的有效数字是7位有效数字,后面的数字是无意义的,并不准确地表示该数。应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数 运行结果:123456.789e5 计算机工程学院 伍俊明
3.4 浮点型数据 四、浮点数的类型 • C语言编译系统将浮点数视为双精度浮点数来处理。 • 例:f是一个浮点型变量 f=2.45678*4523.65; • 系统先把2.45678和4523.65作为双精度数,然后进行相乘的运算,得到的乘也是一个双精度数。最后取其前7位赋给浮点型变量f。如是在数的后面加字母f或F(如1.65f, 654.87F),这样编译系统就会把它们按单精度(32位)处理 计算机工程学院 伍俊明
3.5 字符型数据 一、字符常量 • 字符常量:用一对单引号括起来的单个字符。 正确: ‘a’,‘A’ ,‘6’ ,‘$’ ,‘?’ ,‘\n’ 错误: ‘abc’、“a” • 控制字符(转义符):以反斜杠 ‘\’开头 \n 换行 \t 横向跳格 \r 回车 \\ 反斜杠 \ddd ddd表示1到3位八进制数字 \xhh hh表示1到2位十六进制数字 计算机工程学院 伍俊明
3.5 字符型数据 二、字符变量 char c1, c2=‘b’, c3; c1=‘a’; c3=‘ ’; 三、字符数据的存储格式 • 一个字符在内存中占用一个字节 • 字符以ASCII码方式存储 • 字符可以ASCII码参与运算,大小写字符可以转换 • 说明:程序的作用是将两个小写字母a和b转换成大写字母A和B。从ASCII代码表中可以看到每一个小写字母比它相应的大写字母的ASCII码大32。C语言允许字符数据与整数直接进行算术运算。 c2 c1 97 98 01100001 01100010 计算机工程学院 伍俊明
3.5 字符型数据 四、字符串常量 • 字符串常量:用一对双引号括起来的若干字符 “Hello”, “¥1234.56”,“a” • 字符型变量不能当作字符串变量来作用 char c; c=“a”; 但c=‘a’; • 字符串的存储结构:在末字符后面跟一个 ‘\0’ CHINA a 计算机工程学院 伍俊明
3.6 变量赋初值 • 变量初始化:在定义变量的同时给出其初值 例:int a=3; float f=3.56, g; char c1, c2=‘a’; /*只对c2赋了初值*/ int b=3, c=3, d=3; /*对a、b、c赋了初值*/ • 注意: • 不能通过连等方式赋初值 int b=c=d=3 • 初值只赋给‘=’前的一个变量 int b, c, d=3;/*只将d赋值为3,bc未赋初值*/ 计算机工程学院 伍俊明
3.7 各类型数值间的混合运算 • 假设:i是整型变量,f是float型变量,d是double型变量,e是long型变量。 • 试分析表达式: • 10+‘a’+ i*f - d/e • 数值型数据可以混合运算 • 整型:int,short,long • 浮点型:float,double,long double • 不同类型的数据混合运算时,必须先转换成同一类型的数据,然后才能运算,这种转换是自动进行的 double float 高 longe unsigned 低 char、 short int 计算机工程学院 伍俊明
3.8 算术运算符和算术表达式 一、C语言运算符简介 (1)算术运算符 (+ - * / %) (2)关系运算符 (><==>=<=!=) (3)逻辑运算符 (!&&||) (4)位运算符 (<< >> ~ |∧&) (5)赋值运算符 (=及其扩展赋值运算符) (6)条件运算符 (?:) (7)逗号运算符 (,) (8)指针运算符 (*和&) (9)求字节数运算符(sizeof) (10)强制类型转换运算符( (类型) ) (11)分量运算符(.->) (12)下标运算符([ ]) (13)其他 (如函数调用运算符()) 计算机工程学院 伍俊明
3.8 算术运算符和算术表达式 二、算术运算符和算术表达式 • 基本的算术运算符 • + (加法运算符,或正值运算符。如:3+5、+3) • - (减法运算符,或负值运算符。如:5-2、-3) • * (乘法运算符。如:3*5) • / (除法运算符。如:5/3,5.0/3.0) • % (模运算符,或称求余运算符,%两侧均应为整型数据,如:7%4的值为3)。 • 算术表达式及运算符的优先级: • 算术表达式是由运算对象(常量、变量、函数)、运算符和左右括号连接而成的式子 • 先乘除、后加减,同级运算自左向右 • 例:a*b/c-1.5+′a′ 计算机工程学院 伍俊明
3.8 算术运算符和算术表达式 二、算术运算符和算术表达式 • 强制类型转换运算符:(类型名)(表达式) 例:(double)a,(int)(x+y),(float)(5%3) 注意:(int)x+y只将x转换成整型数,然后与y相加 • 自增、自减运算符:只对变量实施,自右向左进行 • ++i,--i /*在使用i之前,先使i的值加(减)1*/ • i++,i-- /*在使用i之后,再使i的值加(减)1 */ • 假设:i等于3,分析执行(1)j=++i; (2)j=i++之后i和j之值 • 假设:i等于 3,分析执行j=-i++之后i和j之值 计算机工程学院 伍俊明
3.8 算术运算符和算术表达式 三、表达式使用中的问题说明 • ANSI未规定子表达式的求值顺序 如:a=f1()+f2() 中,先计算f1(),还是先计算f2()? 又如:i=3; 表达式(i++)+(i++)+(i++) 在有的系统中为12(i为6),有的系统中为9(i为6) • 为避免误解,建议增加有益的括号 如:i+++j应写成 (i++)+j的形式 • 一调用函数时,实参数的求值顺序,C标准并无统一规定 例:printf(“%d、 %d”, i, i++)有的输出3、3,有的输出4、3 建议:j=i++; printf(“%d、%d”, j, i) 计算机工程学院 伍俊明
3.9 赋值运算符与赋值表达式 一、赋值运算符= • 先计算表达式的值,然后将该值赋给变量 二、类型转换 • 如变量与表达式的类型不同,将自动转换 • 类型转换时,可能引起值的变化 • 有符号数与无符号数的相互转换 • 长型数转换为短型数 三、复合赋值运算符:+=,-=,*=,/=,%=,&=,^=,|= • a+=3 等价于a=a+3 • x*=y+8 等价于x=x*(y+8) • x%=y+3 等价于x=x%(y+3) 变量=表达式; 计算机工程学院 伍俊明
3.9 赋值运算符与赋值表达式 四、赋值表达式 • 赋值表达式也得到一个值,同时变量也得到一个值 例:a=(b=5)等价于a=b=5,相当于b=5; a=b;表达式为5 例:a=5+(c=6);结果c等于6,a等于11, 表达式值为11 例:a=(b=10)/(c=2);结果c为2,b为10,a为5,表达式为5 例:(a=3*5)=4*3先计算3*5,将15赋给a,然后计算4*3,将 12赋给a,最后表达式值为12 例:a初值为12,a+=a-=a*a; 结果a为-264,表达式为-264 先做a-=a*a,即a=a-a*a值 为12-144=-132 再做a+=a,即a=a+a值 为-264 • 分析print(“%d”, a=b);若b初值为3,b值赋给a,输出a值 变量=表达式 计算机工程学院 伍俊明
3.10 逗号表达式 • 逗号表达式 • 依次计算表达式1、表达式2、直到表达式n的值,并将表达式n的值作为逗号表达式的值 例:3+5,6+8其值为14 例:a=3*5,a*4先将a赋成15,然后求解a*15,并将60作为整个表达式的值 例:(a=3*5,a*4),a+5先计算出a的值为3*5,即15,再计算出a*4值 为60,再计算出a+5为20作为整个表达式的值 • 逗号运算符的优先级最低 例:x=(a=3,6*3)先将3赋给a,计算出6*3的值 作为括号中逗号表达式的值18,并赋给x,故x为18 例:x=a=3,6*3中x、a均赋值 为3,表达式值为18 表达式1,表达式2,……,表达式n, 计算机工程学院 伍俊明
第3章 数据类型、运算符与表达式 编写由给定半径计算球体积的程序。π取3.1416。 已知球体积公式为:V=4/3πR3,C表达式为:v=4/3*pi*r*r*r; /*程序功能: 计算球体积,演示自动类型转换规则 */ # define pi 3.1416 main() { float r,v ; printf(“r =”); scanf(“%f”,&r); v=4/3*pi*r*r*r; /*计算球体积:错误*/ printf(“\n v = %f”,v); v=4.0/3*pi*r*r*r; /*计算球体积:正确*/ printf(“\n v = %f”,v); v=4*pi*r*r*r/3; /*计算球体积:正确*/ printf(“\n v = %f”,v); } • 作业(P67) • 3.6 • 3.9 • 3.10 • 3.11* • 3.12 • 案例分析 计算机工程学院 伍俊明