《C语言教程第3章数据类型运算符与表达式课件》由会员分享,可在线阅读,更多相关《C语言教程第3章数据类型运算符与表达式课件(81页珍藏版)》请在金锄头文库上搜索。
1、3.1 C语言的数据类型3.2 常量与变量3.3 整型数据3.4 浮点型数据3.5 字符型数据3.6 变量赋初值第第3章章 数据类型、运算符与表达式数据类型、运算符与表达式C语言教程第3章数据类型、运算符与表达式3.7 各类数值型数据间的混合运算3.8 算术运算符和算术表达式3.9 赋值运算符和赋值表达式3.10 逗号运算符和逗号表达式习题C语言教程第3章数据类型、运算符与表达式3.1 C3.1 C语言的数据类型语言的数据类型字符型 char (占1个字节)基本数据类型 整型 int (占2/4个字节) 长整型 long (占4字节) 实型(浮点型)单精度型 float (占4字节)双精度型
2、double (占8字节)C语言教程第3章数据类型、运算符与表达式3.2 3.2 常量与变量常量与变量 3.2.1 常量和符号常量常量和符号常量 1.常量的概念 在程序运行过程中,其值不能被改变的量称为常量。量。 2.常量的分类 (1)整型常量整型常量 如:12,-90 (2)实型常量实型常量 如:1.72,-9.73, 3.65e-6 (3)字符常量字符常量 如:a, +, n, 0 (4)字符串常量字符串常量 如:“max”, “good”, “123” (5)符号常量符号常量 习惯上其常用大写字母。 常量的类型,可通过书写形式来判别。C语言教程第3章数据类型、运算符与表达式 例例3.1
3、(TL3-1.C) #include #define PRICE 30 void main( ) int num, total; num=10; total =num * PRICE; printf(“total = %dn”, total); 程序演示C语言教程第3章数据类型、运算符与表达式3.2.2 3.2.2 变量变量 1.变量的概念变量的概念 在程序运行过程中,其值可以被改变的量称为变量。 2.变量的两个要素变量的两个要素(1)变变量量名名。每个变量都必须有一个名字变量名,变量命名遵循标识符命名规则。(2)变变量量值值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变
4、量的值。C语言教程第3章数据类型、运算符与表达式用户标识符可以作为:1. 变量名变量名2. 符号常量符号常量3. 数组名数组名4. 自定义的函数名自定义的函数名5. 指针变量名指针变量名6. 结构体类型名结构体类型名7. 共用体类型名共用体类型名8. 枚举类型名枚举类型名9. 文件指针变量名等文件指针变量名等C语言教程第3章数据类型、运算符与表达式 .标识符命名规则标识符命名规则(1)有效字符:只能由字字母母、数数字字和和下下划划线线组成,且以字母或下划线开头。(2)有效长度:随随系系统统而而异异,但至少前个字符有效。如果超长,则超长部分被舍弃。 例如,由于student_name和stude
5、nt_number的前个字符相同,有的系统认为这两个变量,是一回事而不加区别。 在Turbo C 中,变量名(标识符)的有效长度为32个字符,缺省值为32。C语言教程第3章数据类型、运算符与表达式 (3)C语言的关键字关键字不能用作变量名。 注注意意:C语言对英文字母的大小敏感,即同一字母的大小写,被认为是两个不同的字符 (即即C语言区分大小写字母语言区分大小写字母) 。 习惯上,变量名和函数名中的英文字母用小写,以增加可读性。 关键字必须用关键字必须用小写。C语言教程第3章数据类型、运算符与表达式 思考题思考题: 在C语言中,变量名total与变量名TOTAL、ToTaL、tOtAl等是同一
6、个变量吗?C语言教程第3章数据类型、运算符与表达式标识符命名的良好习惯标识符命名的良好习惯见名知意见名知意: 所谓“见名知意”是指,通过变量名就知道变量值的含义。通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。 例如,name/xm(姓名)、 sex/xb(性别)、age/nl(年龄)、salary/gz(工资)。C语言教程第3章数据类型、运算符与表达式n在在C语言程序中,所用的语言程序中,所用的变量必须先定义、变量必须先定义、后使用。后使用。 (P16.C)n变量的分类:变量的分类: (1)整型变量整型变量(可用来存放整型常量)(可用来存放整型常量) (2)实型
7、变量实型变量(可用来存放实型常量)(可用来存放实型常量) (3)字符型变量字符型变量(可用来存放字符型常量)(可用来存放字符型常量)注意注意:C语言中没有字符串变量语言中没有字符串变量程序演示C语言教程第3章数据类型、运算符与表达式 4.变量的定义与初始化变量的定义与初始化 (1)变量定义的一般格式 存存储储类类型型 数数据据类类型型 变变量量名名1, 变变量量名名2;例如: float max, min,length, area; int sum,num1,num2; char c1,c2; double x,y,z;C语言教程第3章数据类型、运算符与表达式3.3 整型数据整型数据 3.3.
8、1 整型常量的表示方法整型常量的表示方法 .三种表示形式三种表示形式 整型常量即整常数,在语言中可用三种形式表示: 十进制整数十进制整数 例如10、36。 八八进进制制(以数字开头)。 例如012。 十十六六进进制制(以数字+小写字母x开头)。例如0x36。C语言教程第3章数据类型、运算符与表达式3.3.2 整型变量n1. 整型数据在内存中的存放形式数据在内存中是以数据在内存中是以二进制补码形式二进制补码形式存放的。存放的。 如果定义了一个整型变量i: int i; /* 定义为整型变量 */ i=10; /* 给 i 赋以整数10 */ C语言教程第3章数据类型、运算符与表达式负数的补码负数
9、的补码C语言教程第3章数据类型、运算符与表达式2. 整型变量的分类整型变量的分类三种整型变量:(1) 基本整型,以 int 表示。(2) 短整型, 以short int表示,或以 short 表示。(3) 长整型, 以 long int 表示,或以 long 表示。C语言教程第3章数据类型、运算符与表达式归纳起来,可以用以下归纳起来,可以用以下6种整型变量种整型变量 即:有符号基本整型 signed int 无符号基本整型 unsigned int有符号短整型 signed short int无符号短整型 unsigned short int有符号长整型 signed long int无符号长
10、整型 unsigned long intC语言教程第3章数据类型、运算符与表达式整型变量的分类短整型短整型 short int (占2个字节) 整型变量整型变量基本整型基本整型 int (占2个字节)长整型长整型 long int (占4个字节)无符号长整型无符号长整型 unsigned long int (占4B)无符号短整型无符号短整型 unsigned short int (占2B)无符号基本整型无符号基本整型 unsigned short int (占2B)C语言教程第3章数据类型、运算符与表达式int a; unsigned int b;C语言教程第3章数据类型、运算符与表达式一个整
11、数一个整数(以以13为例为例)在存储单元中在存储单元中的存储情况的存储情况C语言教程第3章数据类型、运算符与表达式3. 整型变量的定义整型变量的定义int a,b; (指定变量a、b为整型)unsigned short c,d; (指定变量c、d为无符号短整型) long e,f; (指定变量e、f为长整型)C语言教程第3章数据类型、运算符与表达式例例3.2整型变量的定义与使用。整型变量的定义与使用。#include void main( ) int a,b,c,d; /*指定a、b、c、d为整型变量*/ unsigned u; /*指定u为无符号整型变量*/ a=12;b=-24;u=10;
12、 c=a+u;d=b+u; printf(a+u=%d,b+u=%dn,c,d); 运行结果为a+u=22,b+u=-14C语言教程第3章数据类型、运算符与表达式4. 整型数据的溢出整型数据的溢出例3.3 整型数据的溢出。 main( ) int a,b; a=32767; b=a+1; printf(%d,%d,a,b); C语言教程第3章数据类型、运算符与表达式运行结果为32767,-32768C语言教程第3章数据类型、运算符与表达式3.3.3 整型常量的类型整型常量的类型注意以下几点:(1) 一个整数,如果其值在-32768+32767范围内,认为它是int型,它可以赋值给 int型 和
13、 long int 型变量。C语言教程第3章数据类型、运算符与表达式注意以下几点:注意以下几点:(2) 一个整数,如果其值超过了上述范围,而在-2147483648+2147483647范围内,则认为它是长整型,可以将它赋值给一个long int型变量。C语言教程第3章数据类型、运算符与表达式注意以下几点:注意以下几点:(3) 如果某一计算机系统的c版本(例如turbo c)确定short int与int型数据在内存中占据的长度相同,则它的表数范围与int型相同。因此,一个int型的常量也同时是一个short int型常量,可以赋给int型或short int型变量。C语言教程第3章数据类型、
14、运算符与表达式注意以下几点:注意以下几点:(4) 一个整常量后面加一个字母u,认为是unsigned int型,如12345u,在内存中按unsigned int规定的方式存放(存储单元中最高位不作为符号位,而用来存储数据,见图2.4(b)。如果写成-12345u,则先将-12345转换成其补码53191,然后按无符号数存储。C语言教程第3章数据类型、运算符与表达式注意以下几点:注意以下几点:(5) 在一个整常量后面加一个字母 l或 L,则认为是 long int 型常量。C语言教程第3章数据类型、运算符与表达式3.4 浮点型数据浮点型数据3.4.1 浮点型常量的表示方法浮点型常量的表示方法实
15、数有两种表示形式:(1) 十进制小数形式。十进制小数形式。 它由数字和小数点组成(注意必须有小注意必须有小数点数点)。 .123、 123.、 123.0、 0.0 都是十进制小数形式。C语言教程第3章数据类型、运算符与表达式(2) 指数形式。指数形式。 如 123e3 或 123E3 都代表123103。但注意字母 e (或 E )之前必须有数字,且e后面的指数必须为整数指数必须为整数。 如 e3、2.1e3.5、e3、 e 等都不是合法的指数形式。C语言教程第3章数据类型、运算符与表达式3.4.2 浮点型变量浮点型变量1. 实型数据在内存中的存放形式 C语言教程第3章数据类型、运算符与表达
16、式2. 实型变量的分类实型变量的分类C实型变量分为以下三类:单精度 ( float 型 占4B)双精度 ( double 型 占8B )长双精度型 ( long double 占8B/10B) C语言教程第3章数据类型、运算符与表达式对每一个实型变量都应在使用前对每一个实型变量都应在使用前加以定义加以定义floatx,y, (指定x、y为单精度实数)double z; (指定z为双精度实数) long double t; (指定t为长双精度实数) C语言教程第3章数据类型、运算符与表达式3. 浮点型数据的舍入误差浮点型数据的舍入误差例3.4实型数据的舍入误差。 main( ) float a,
17、b; a = 123456.789e5; b = a + 20 ; printf(%f,b); C语言教程第3章数据类型、运算符与表达式3.4.3 浮点型常量的类型浮点型常量的类型C编译系统将实型常量作为双精度双精度来处理。C语言教程第3章数据类型、运算符与表达式3.5 字符型数据字符型数据3.5.1 字符常量字符常量 C的字符常量是用单引号单引号(即撇号)括起来的一个字符一个字符。 如 a,x,d,?, 等都是字符常量。注意,a和A是不同的字符常量。C语言教程第3章数据类型、运算符与表达式转义字符转义字符 C还允许用一种特殊形式的字符常量,就是以一个“”开头的字符序列。 n, t, 0 dd
18、d, xhhC语言教程第3章数据类型、运算符与表达式3.5.2 字符变量字符变量 字符型变量用来存放字符常量,请注意只能放一个字符只能放一个字符,不要以为在一个字符变量中可以放一个字符串(包括若干字符)。字符变量的定义形式如下:charc1,c2; c1=a;c2=b;C语言教程第3章数据类型、运算符与表达式3.5.3 字符数据在内存中的存储字符数据在内存中的存储形式及其使用方法形式及其使用方法字符的相应的字符的相应的ASCII代码代码放到存储单元中放到存储单元中C语言教程第3章数据类型、运算符与表达式例例3.6向字符变量赋予整数。向字符变量赋予整数。main( ) char c1,c2; c
19、1=97; c2=98; printf(%c %cn,c1,c2);/*以字符形式输出*/ printf(%d %dn,c1,c2);/*转换为整数形式输出*/ C语言教程第3章数据类型、运算符与表达式字符型数据和整型数据是通用的字符型数据和整型数据是通用的C语言教程第3章数据类型、运算符与表达式例例3.7大小写字母的转换。大小写字母的转换。main( ) char c1,c2; c1=a; c2=b; c1=c1-32; c2=c2-32; printf(%c%c,c1,c2); 运行结果为A BC语言教程第3章数据类型、运算符与表达式字符数据与整型数据可以互相赋值字符数据与整型数据可以互相
20、赋值如:int i; char c; i=a; c=97; printf(%c,%dn,c,c); printf(%c,%dn,i,i);输出:a,97 a,97C语言教程第3章数据类型、运算符与表达式3.5.4 字符串常量字符串常量 字符串常量是一对双引号双引号括起来的若若干字符序列干字符序列。如:“how do you do.”, “CHINA”, “a”, “123.45”, “” 可以输出一个字符串,如: printf( how do you do.);C语言教程第3章数据类型、运算符与表达式注意:注意: 不要将字符常量字符常量与字符串常量字符串常量混淆。a是字符常量,“a”是字符串常
21、量,二者不同。 假设 c 被指定为字符变量: char c; c=a; 是正确的。而 c=a; 是错误的。 c=“CHINA 也是错误的。C语言教程第3章数据类型、运算符与表达式字符串结束标志字符串结束标志 C规定以字符0作为字符串结束标志。0是一个ASCII码为0的字符,从ASCII代码表中可以看到ASCII码为0的字符是“空操作字符”,即它不引起任何控制动作,也不是一个可显示的字符。C语言教程第3章数据类型、运算符与表达式字符串常量与字符常量的区别n例如:例如:a 与与 “a”(1)定定界界符符不不同同:字字符符常常量量使使用用单单引引号号,而而字符串常量使用双引号;字符串常量使用双引号;
22、(2)长长度度不不同同:字字符符常常量量的的长长度度固固定定为为1,而而字字符符串串常常量量的的长长度度,可可以以是是0,也也可可以以是是某某个整数;个整数;(3)存存储储要要求求不不同同:字字符符常常量量存存储储的的是是字字符符的的ASCII码码值值,而而字字符符串串常常量量,除除了了要要存存储储有有效效的的字字符符外外,还还要要存存储储一一个个结结束束标标志志0。前者占一个字节;后者占二个字节前者占一个字节;后者占二个字节。C语言教程第3章数据类型、运算符与表达式3.6 变量赋初值变量赋初值 C语言允许在定义变量的同时使变量初始化。 如:int a=3; /* 指定a为整型变量,初值为3
23、*/float f=3.56; /* 指定f为实型变量,初值为 3.56 */char c=a; /* 指定c为字符变量,初值为 a */也可以使被定义的变量的一部分赋初值。 如: int a,b,c=5;C语言教程第3章数据类型、运算符与表达式 所所谓谓变变量量初初始始化化是是指指在在定定义义变变量量 的同时进行赋初值的操作。的同时进行赋初值的操作。变量初始化的一般格式变量初始化的一般格式存储类型 数据类型 变量名1=初值1, 变量名2=初值2;例 如 : float radius=2.5, length, area; int a=2,b=3,c; char c1=a, c2=B;C语言教程
24、第3章数据类型、运算符与表达式3.7 各类数值型数据间的混合各类数值型数据间的混合运算运算C语言教程第3章数据类型、运算符与表达式3.8 算术运算符和算术表达式算术运算符和算术表达式n3.8.1 C运算符简介1算术运算符 ( + - * / % )2关系运算符 ( = = = !=)3逻辑运算符 ( ! & | )4位运算符 ( | & )5赋值运算符 (=及其扩展赋值运算符)6条件运算符 ( ? :)C语言教程第3章数据类型、运算符与表达式7逗号运算符 (,)8指针运算符 (*和&)9求字节数运算符 (sizeof)10强制类型转换运算符 ( (类型) )11分量运算符 (-)12下标运算符
25、 ()13其他 (如函数调用运算符() 本章只介绍算术运算符算术运算符和赋值运算符赋值运算符,在以后各章中结合有关内容将陆续介绍其他运算符。C语言教程第3章数据类型、运算符与表达式3.8.2 算术运算符和算术表达式算术运算符和算术表达式1. 基本的算术运算符n+ + (加法运算符,或正值运算符。如3+5、+3)n- - (减法运算符,或负值运算符。如5-2、-3)n* * (乘法运算符。如3*5)n/ / (除法运算符。如5/3)n% % (模运算符,或称求余运算符,% %两侧必须两侧必须为整型数据为整型数据,如7%4的值为3)。C语言教程第3章数据类型、运算符与表达式说明说明n两个整数相除的
26、结果为整数结果为整数,如5/3的结果值为1,舍去小数部分。C语言教程第3章数据类型、运算符与表达式2. 算术表达式和运算符的优先级算术表达式和运算符的优先级与结合性与结合性nc算术表达式算术表达式:用算术运算符和括号将运算对象(也称操作数)连接起来的、符合c语法规则的式子,称c算术表达式。nC语言规定了运算符的优先级优先级和结合性结合性。左结合性:左结合性: “自左至右的结合方向”右结合性:右结合性:运算符的结合方向为“自右至左”C语言教程第3章数据类型、运算符与表达式3. 强制类型转换运算符强制类型转换运算符其一般形式为: (类型名类型名)(表达式表达式)C语言教程第3章数据类型、运算符与表
27、达式例例3.8强制类型转换。强制类型转换。 main() float x; int i; x=3.6; i=(int)x; printf(x=%f, i=%d,x,i); 运行结果如下: x=3.600000, i=3 x类型仍为float型,值仍等于3.6。C语言教程第3章数据类型、运算符与表达式4. 自增、自减运算符(自增、自减运算符(+/-)n其功能详见下表C语言教程第3章数据类型、运算符与表达式表表1 “+“+、-”-”运算符运算符整型、整型、字符型字符型单目单目指针型指针型变量变量同运同运算对算对第第2级级或数组或数组元素元素象的象的类型类型自右向左自右向左对象对象数数名名 称称运算
28、运算符符运算规则运算规则及功能及功能运算对运算对象象运算运算结果结果优先级与优先级与结合性结合性加加1(前(前缀)缀)+先加先加1,后,后使用使用加加1(后(后缀)缀)+先使用,先使用,后加后加1减减1(前(前缀)缀)-先减先减1,后,后使用使用减减1(后(后缀)缀)-先使用,先使用,后减后减1C语言教程第3章数据类型、运算符与表达式 如果i的原值等于3,则执行下面的赋值语句: j=+i;(i的值先变成4, 再赋给,j的值为4) =i+;(先将 i的值3赋给,的值为3,然后i变为4)C语言教程第3章数据类型、运算符与表达式又如: i=3; printf(%d,+i);输出“4”。若改为 pri
29、ntf(%d,i+);则输出“3”。C语言教程第3章数据类型、运算符与表达式注意:注意: (1) 自增运算符(+)和自减运算符(-),只能用于变量,而不能用于常量或表达式。 如5+或(a+b)+都是不合法的。 (2) +和-的结合方向是“自右至左”。C语言教程第3章数据类型、运算符与表达式5. 有关表达式使用中的问题说明有关表达式使用中的问题说明n (1) C运算符和表达式使用灵活,利用这一点可以巧妙地处理许多在其他语言中难以处理的问题。n 但是应当注意:ANSI C 并没有具体规定表达式中的子表达式的求值顺序。允许各编译系统自己安排。 (i+)+(i+)+(i+) /* i=3 */C语言教
30、程第3章数据类型、运算符与表达式n (2) C语言中有的运算符为一个字符,有的运算符由两个字符组成,在表达式中如何组合呢? 如 i+ (i+)+ 是理解为(i+)+呢?还是i+(+)呢? C编译系统在处理时尽可能多地(自左而右)将若干个字符组成一个运算符(在处理标识符、关键字时也按同一原则处理)。C语言教程第3章数据类型、运算符与表达式 (3) C语言中类似上述这样的问题还有一些。例如,在调用函数时,实参数的求值顺序,C标准并无统一规定。 如i的初值为3,如果有下面的函数调用:printf(%d,%d,i,i+); Trubo C 编译系统先处理i+,后处理I(从右向左),即输出4,3。C语言
31、教程第3章数据类型、运算符与表达式3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式n1. 赋值运算符 变量名变量名=表达式表达式C语言教程第3章数据类型、运算符与表达式2. 类型转换类型转换 如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。(1) 将实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分舍弃实数的小数部分。 int=float 如:i=3(3.56) int=double 如:j=6(6.783456)C语言教程第3章数据类型、运算符与表达式 (2) 将整型数据赋给单、双精度变量时,将整型数据赋给单、双精度变量时,数值不变,但以浮点数形
32、式存储到变量中。数值不变,但以浮点数形式存储到变量中。nfloat=int 如:f=2.0 (2)(4B)ndouble=int 如:f1=7.0(7)(8B)n (3) 将一个double型数据赋给float变量时,截取其前面7位有效数字,存放到float变量的存储单元(32位)中。但应注意数值范围不能溢出。nfloat= double (4B)(7位有效数字)ndouble= float (8B)(16位有效数字)C语言教程第3章数据类型、运算符与表达式(4) 字符型数据赋给整型变量字符型数据赋给整型变量nint=char (Turbo C)C语言教程第3章数据类型、运算符与表达式n (5
33、) 将一个int、short、long型数据赋给一个char型变量时,只将其低低8位原封不位原封不动地送到动地送到char型变量型变量(即截断)。char=intchar= shortchar= longC语言教程第3章数据类型、运算符与表达式 (6) 将带符号的整型数据(int型)赋给long型变量时,要进行符号扩展,将整型数的16位送到long型低16位中,如果int型数据为正值(符号位为0),则long型变量的高16位补0;如果int型变量为负值(符号位为1),则long型变量的高16位补1,以保持数值不改变。nlong = int (4B)nint= long (低2B)C语言教程第3
34、章数据类型、运算符与表达式C语言教程第3章数据类型、运算符与表达式(7) 将将unsigned int型数据赋给型数据赋给long int型型变量时,不存在符号扩展问题,只需将高位变量时,不存在符号扩展问题,只需将高位补补0即可。即可。nlong int= unsigned intnint= unsigned int (注意:别超界!)(注意:别超界!)nlong= unsigned longC语言教程第3章数据类型、运算符与表达式n (8) 将非unsigned型数据赋给长度相同的unsigned型变量,也是原样照赋(连原有的符号位也作为数值一起传送)。nunsigned int=intnU
35、nsigned long=longC语言教程第3章数据类型、运算符与表达式例例3.9有符号数据传送给无符号变量。有符号数据传送给无符号变量。 main() unsigned int a; int b=-1; a=b; printf(%u,a); 运行结果为:65535C语言教程第3章数据类型、运算符与表达式3.复合的赋值运算符(复合的赋值运算符(+=,-=,*=,/=,%=) a+=3 等价于a=a+3 x*=y+8 等价于 x=x*(y+8) x%=3 等价于 x=x%34. 赋值表达式n例 int a=-3; a+=a-=a*a 执行后a=?C语言教程第3章数据类型、运算符与表达式3.10
36、 逗号运算符和逗号表达式逗号运算符和逗号表达式n C语言提供一种特殊的运算符逗号运算符。n逗号表达式的一般形式为: 表达式表达式1,表达式,表达式2逗号表达式的求解过程是: 先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。(即最(即最右侧的值)右侧的值)C语言教程第3章数据类型、运算符与表达式逗号的作用逗号的作用n1. 分隔符n2. 逗号运算符nprintf(%d,%d,%d “,(a,b,c),b,c);C语言教程第3章数据类型、运算符与表达式求字节数运算符求字节数运算符sizeof:其作用:其作用:可求出相应参数所占 的内存字节数。例:sizeof(int); sizeof(float); sizeof(double); sizeof(char); sizeof(“good”);- 2/4- 4- 8- 1- 5C语言教程第3章数据类型、运算符与表达式