《大学计算机C语言.ppt》由会员分享,可在线阅读,更多相关《大学计算机C语言.ppt(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-2-第第2 2章章 数据类型与表达式数据类型与表达式本本 章章 内内 容容 1.C语言的数据类型语言的数据类型 2.常量和变量常量和变量 3.整型数据整型数据 4.实型数据实型数据 5.字符型数据字符型数据 6.系统函数系统函数 7.C运算符概述运算符概述 8.算术运算符算术运算符 9.关系运算符和逻辑运算符关系运算符和逻辑运算符 10.位运算符与长度运算符位运算符与长度运算符11.赋值运算符和赋值表达式赋值运算符和赋值表达式 12.逗号运算符和逗号表达式逗号运算符和逗号表达式13.运算符的优先级与表达式的分类运算符的优先级与表达式的分类-3-第第2 2章章 数据类型与表达式数据类型与表达式
2、2.1 C语言的数据类型语言的数据类型 数据类型是一个值的集合和定义在这个值集上的一组操作的总称。数据类型是一个值的集合和定义在这个值集上的一组操作的总称。数数据据类类型型明明显显或或隐隐含含地地规规定定了了在在程程序序执执行行期期间间变变量量或或表表达达式式所所有有可可能能的的取取值范围,以及在这些值上允许进行的操作。值范围,以及在这些值上允许进行的操作。C C语言的各种数据类型:语言的各种数据类型:基本类型基本类型数据类型数据类型字符型字符型整型整型实型实型双精度实型双精度实型枚举类型枚举类型构造类型构造类型指针类型指针类型空类型空类型数组类型数组类型结构体类型结构体类型共用体类型共用体类
3、型-4-第第2 2章章 数据类型与表达式数据类型与表达式2.2 常量和变量常量和变量 常量和符号常量常量和符号常量 1 1常量常量 在程序运行过程中,其值不能被改变的量称为常量,又叫常数。在程序运行过程中,其值不能被改变的量称为常量,又叫常数。常常量量区区分分为为不不同同的的类类型型,如如100100,0 0,-8-8为为整整型型常常量量,25.3225.32,0.1420.142为实型常量,为实型常量,AA,BB是字符型常量。是字符型常量。常常量量不不需需要要事事先先定定义义,只只在在程程序序中中需需要要的的地地方方直直接接写写出出即即可可。常常量量的类型也不需要事先说明,它们的类型是由书写
4、方式自动默认的。的类型也不需要事先说明,它们的类型是由书写方式自动默认的。2 2符号常量符号常量 用一个符号(标识符)代表一个常量,例如:用一个符号(标识符)代表一个常量,例如:#define MAXNUM 1000#define MAXNUM 1000#define TRUE 1#define TRUE 1#define FALSE 0#define FALSE 0 符号常量的定义格式如下:符号常量的定义格式如下:#define#define 符号常量符号常量 常量常量 -5-第第2 2章章 数据类型与表达式数据类型与表达式2.2 常量和变量常量和变量 标识符与变量标识符与变量1 1标识符标
5、识符 在在C C 语语言言中中,标标识识符符是是对对变变量量、符符号号常常量量、函函数数、数数组组、文文件件等等用用户定义对象的命名。户定义对象的命名。标标识识符符可可以以是是一一个个或或多多个个字字符符。标标识识符符的的第第一一个个字字符符必必须须是是英英文文字字母母或或下下画画线线,随随后后的的字字符符必必须须是是字字母母、数数字字或或下下画画线线。不不能能以以数数字字打打头。头。下面是一些正确或错误标识符命名的示例。下面是一些正确或错误标识符命名的示例。正确标识符正确标识符 错误标识符错误标识符 weight 2x weight 2x length a|#b length a|#b co
6、lor2 red!color color2 red!color save _$123 save _$123-6-第第2 2章章 数据类型与表达式数据类型与表达式2.2 常量和变量常量和变量 2 2变量变量 在程序运行过程中,其值可以改变的量称为变量。在程序运行过程中,其值可以改变的量称为变量。在在C C语言中,要求对所有用到的变量语言中,要求对所有用到的变量“先定义,后使用先定义,后使用”。例如:例如:定义两个整型变量定义两个整型变量a a、b b和三个实型变量和三个实型变量x x、y y、z z。int a,b;int a,b;float x,y,z;float x,y,z;C C语言有五种
7、基本数据类型:字符型、整型、实型、双精度实型、语言有五种基本数据类型:字符型、整型、实型、双精度实型、和空类型。定义这五种类型的变量时须使用的类型说明符分别为和空类型。定义这五种类型的变量时须使用的类型说明符分别为charchar、intint、floatfloat、doubledouble和和voidvoid。-7-第第2 2章章 数据类型与表达式数据类型与表达式2.3 整型数据整型数据整型常量整型常量1 1不同进制数的使用不同进制数的使用 十进制整数的表示与通常在算术中的表示一样,例如:十进制整数的表示与通常在算术中的表示一样,例如:321321,+321+321。八进制整数必须以数字八进
8、制整数必须以数字0 0开头,例如:开头,例如:01230123表示表示(123)(123)8 8。十六进制整数必须以十六进制整数必须以0 x0 x开头,例如开头,例如0 x123 0 x123 表示表示(123)(123)1616。-8-第第2 2章章 数据类型与表达式数据类型与表达式2.3 整型数据整型数据 整型变量整型变量1 1整型数据在内存中的存放形式整型数据在内存中的存放形式 在在计计算算机机中中,数数是是用用二二进进制制表表示示的的,把把一一个个数数连连同同其其符符号号在在计计算算机机中中加加以以数数值值化化,这这样样的的数数称称为为机机器器数数,机机器器数数可可以以用用不不同同的的
9、码码制制(原原码、补码)表示。码、补码)表示。2 2整型变量的分类整型变量的分类 根据数值的范围将整型变量分为以下六种类型:根据数值的范围将整型变量分为以下六种类型:有符号基本整型:有符号基本整型:signed intsigned int。有符号短整型:有符号短整型:signed short intsigned short int。有符号长整型:有符号长整型:signed long intsigned long int。无符号基本整型:无符号基本整型:unsigned intunsigned int。无符号短整型:无符号短整型:unsigned short intunsigned short
10、int。无符号长整型:无符号长整型:unsigned long intunsigned long int。-9-第第2 2章章 数据类型与表达式数据类型与表达式2.3 整型数据整型数据类类 型型占占 字字 节节 数数取取 值值 范范 围围intint2 2字节字节-32768-327683276732767shortshort2 2字节字节-32768-327683276732767longlong4 4字节字节-2147483648-214748364821474836472147483647unsigned intunsigned int2 2字节字节0 06553565535unsign
11、ed shortunsigned short2 2字节字节0 06553565535unsigned longunsigned long4 4字节字节0 042949672954294967295ANSI标准定义的整数类型标准定义的整数类型-10-第第2 2章章 数据类型与表达式数据类型与表达式2.3 整型数据整型数据3.3.不同类型的整型常量赋值给整形变量不同类型的整型常量赋值给整形变量 整整型型变变量量可可分分为为intint、short short intint、long long intint、unsigned unsigned intint、unsigned unsigned sho
12、rtshort、unsigned unsigned longlong等等类类别别,将将整整型型常常量量赋赋值值给给上上述述类类别的整型变量时如何做到类型匹配?别的整型变量时如何做到类型匹配?一一个个整整型型常常数数,若若值值在在-32768-32768+32767+32767范范围围内内,可可将将它它赋赋值值给给intint型型和和long long intint型变量。型变量。一一个个整整型型常常数数,若若值值在在-2147483648-2147483648+2147483647+2147483647范范围围内内,可可以以赋赋值给一个值给一个long long intint型变量。型变量。常
13、常量量无无unsignedunsigned型型。但但一一个个非非负负值值的的整整数数可可以以赋赋值值给给unsigned unsigned intint型变量,只要它的范围在型变量,只要它的范围在0 06553565535范围内范围内。在在一一个个整整常常数数后后面面加加一一个个小小写写字字母母l l或或大大写写字字母母L L,则则认认为为是是longlong型型常量。例如,常量。例如,-123l-123l、123L123L、0L0L、0775L0775L、0 x9EL0 x9EL等。等。-11-第第2 2章章 数据类型与表达式数据类型与表达式2.3 整型数据整型数据 3.3.整型变量的定义整
14、型变量的定义对变量的定义,一般是放在一个函数的开头的声明部分。对变量的定义,一般是放在一个函数的开头的声明部分。【例【例2-12-1】main()main()int a;int a;unsigned int b;unsigned int b;long c;long c;unsigned long d;unsigned long d;a=-100;a=-100;b=60000;b=60000;c=-2123456789;c=-2123456789;d=4123456789;d=4123456789;printf(a=%d,b=%u,c=%ld,d=%lu,a,b,c,d);printf(a=%d
15、,b=%u,c=%ld,d=%lu,a,b,c,d);运行结果为运行结果为 a=-100,b=60000,c=-2123456789,d=4123456789 a=-100,b=60000,c=-2123456789,d=4123456789-12-第第2 2章章 数据类型与表达式数据类型与表达式2.4 实型数据实型数据 实型常量的表示方法实型常量的表示方法 实实型型常常数数也也称称为为浮浮点点数数,在在C C语语言言中中实实型型常常数数只只使使用用十十进进制制数数表表示示,它的书写方式有两种:它的书写方式有两种:小小数数形形式式。它它是是由由整整数数、小小数数点点、小小数数三三部部分分组组成
16、成,最最多多只只能能省省略略其其中中的的整整数数或或小小数数部部分分,但但不不能能二二者者都都省省略略,也也不不能能省省略略小小数数点点。例例如如:123.123.,-.123-.123,1.231.23,-1.23-1.23,12.012.0,0.0.,.0.0,0.00.0都都是是合合法法的的十十进进制制小小数形式。数形式。指指数数形形式式。它它是是由由尾尾数数、字字母母e e或或E E、指指数数三三部部分分组组成成。尾尾数数可可以以是是一一个十进制小数形式,也可以是一个整数形式,个十进制小数形式,也可以是一个整数形式,如如123e-3123e-3或或123E-3123E-3都代表都代表1
17、2310-312310-3的值。的值。注注意意:字字母母e e(或或E E)之之前前必必须须有有数数字字,且且后后面面指指数数必必须须为为整整数数,如如-0.32E-20.32E-2,2E42E4,-.23E-2-.23E-2,.0E3.0E3,0.E-50.E-5,0E00E0等等都都是是合合法法的的指指数数形形式式,而而E-5E-5,.E2.E2,却是非法的指数形式。,却是非法的指数形式。-13-第第2 2章章 数据类型与表达式数据类型与表达式2.4 实型数据实型数据 实型变量实型变量1 1实型数据在内存中的存放形式实型数据在内存中的存放形式 实实型型数数据据是是按按指指数数形形式式存存储
18、储的的。系系统统把把一一个个实实型型数数据据分分成成尾尾数数部部分分和和指指数数部部分分分分别别存存放放。实实型型数数据据在在内内存存中中小小数数点点位位置置不不是是固固定定的的,或或者者说说是是浮浮动动的的,故故这这种种表表示示法法称称为为浮点表示法。浮点表示法。2 2实型变量的定义实型变量的定义 对对每每一一个个实实型型变变量量都都应应在在使使用用前前加加以以定定义。如义。如 float x,y;float x,y;3 3实型数据的舍入误差实型数据的舍入误差 由由于于实实型型变变量量是是由由有有限限的的存存储储单单元元组组成成的的,因因此此能能提提供供的的有有效效数数字字总总是是有有限限的
19、的。在在有有效效范范围围以以外外的的数数字字将将被被舍舍去去。由由此此可可能能会会产生一些误差。请分析下面的程序:产生一些误差。请分析下面的程序:【例【例2-32-3】分析实型】分析实型数据的舍入误差。数据的舍入误差。main()main()float a;float a;a=12345.6789;a=12345.6789;printf(n%f,a);printf(n%f,a);printf(n%e,a);printf(n%e,a);在在Turbo CTurbo C中程序运中程序运行结果为:行结果为:12345.67871112345.6787111.234568e+0021.234568e+
20、002-14-第第2 2章章 数据类型与表达式数据类型与表达式2.4 实型数据实型数据l 双精度型数据双精度型数据1 1双精度常数双精度常数 双双精精度度常常数数的的书书写写方方式式与与实实型型常常数数的的书书写写方方式式相相同同,有有十十进进制制小小数数形形式和指数形式两种式和指数形式两种,比实型数据的范围广、精度高。比实型数据的范围广、精度高。2 2双精度数据在内存中的表示形式双精度数据在内存中的表示形式 ANSI ANSI并未具体规定每种类型数据的长度、精度和数值范围。并未具体规定每种类型数据的长度、精度和数值范围。微机上常用的微机上常用的C C编译系统编译系统(如如Turbo CTur
21、bo C、MS CMS C、Borland C)Borland C)实型数据:实型数据:3 3双精度变量的定义双精度变量的定义 双双精精度度类类型型标标识识符符doubledouble前前还还可可加加修修饰饰符符longlong,long long double double 比比doubledouble型的精度更高,表示的数值范围更大。型的精度更高,表示的数值范围更大。类类 型型二进制位数二进制位数有有 效效 数数 字字数数 值值 范范 围围floatfloat32326 67 71010-37-3710103838doubledouble6464151516161010-307-30710
22、10308308long doublelong double128128181819191010-4931-4931101049324932-15-第第2 2章章 数据类型与表达式数据类型与表达式2.5 字符型数据字符型数据l 字符常量字符常量 字字符符常常量量是是用用单单引引号号()括括起起来来的的单单个个字字符符。例例如如AA、!、#、aa、*等。等。除除字字符符常常量量外外,将将“”“”开开头头的的特特定定字字符符串串称称为为“转转义义字字符符”,意意思是将反斜杠后面的字符串转换成另外的意义。思是将反斜杠后面的字符串转换成另外的意义。转义字符字符 含含 义ASCII代代码(十(十进制)制
23、)n换行,将当前位置移到下一行开行,将当前位置移到下一行开头10t水平制表(跳到下一个水平制表(跳到下一个Tab位置)位置)9b退格,将当前位置移到前一格退格,将当前位置移到前一格8r回回车,将当前位置移到本行开,将当前位置移到本行开头13反斜杠字符反斜杠字符“”92单引号字符引号字符39双引号字符双引号字符34ddd一到三位八一到三位八进制数制数ddd代表的字符代表的字符ddd(八(八进制)制)xhh一到两位十六一到两位十六进制数制数hh代表的字符代表的字符hh(十六(十六进制)制)-16-第第2 2章章 数据类型与表达式数据类型与表达式ASCII码码键盘键盘ASCII 码码键盘键盘ASCI
24、I 码码键盘键盘ASCII 码码键盘键盘27ESC32SPACE33!3435#36$37%38&3940(41)42*43+4445-46.47/48049150251352453554655756857958:59;6063?6465A66B67C68D69E70F71G72H73I74J75K76L77M78N79O80P81Q82R83S84T85U86V87W88X89Y90Z9192939495_9697a98b99c100d101e102f103g104h105i106j107k108l109m110n111o112p113q114r115s116t117u118v119w120
25、 x121y122z123124|125126-17-第第2 2章章 数据类型与表达式数据类型与表达式2.5 字符型数据字符型数据【例【例2-42-4】下面程序中使用了几种转义字符。下面程序中使用了几种转义字符。main()main()printf(abxbcdtefghtijkln);printf(abxbcdtefghtijkln);printf(xxxxxxxxrmnoptqrst printf(xxxxxxxxrmnoptqrstuvwxn);uvwxn);程序运行时在显示屏上得到以下结果:程序运行时在显示屏上得到以下结果:abcd abcd efgh efgh ijklijklmno
26、pmnopqrst qrst uvwxuvwx-18-第第2 2章章 数据类型与表达式数据类型与表达式2.5 字符型数据字符型数据 字符变量字符变量 字字符符变变量量用用来来存存放放字字符符常常量量,一一个字符变量只能放一个字符。个字符变量只能放一个字符。字符变量的定义形式:字符变量的定义形式:char char 变量名表列;变量名表列;例如:例如:char c1,c2;char c1,c2;c1=A;c1=A;c2=B;c2=B;C C语语言言编编译译系系统统规规定定用用一一个个字字节节来来存存放放一一个个字字符符,将将一一个个字字符符常常量量赋赋值值给给一一个个变变量量,实实际际上上是是将
27、将该该字字符的符的ASCIIASCII代码放到存储单元中。代码放到存储单元中。【例【例2-52-5】将字符数据以不同的方式将字符数据以不同的方式输出。输出。main()main()char c1,c2;char c1,c2;c1=A;c1=A;c2=B;c2=B;printf(%c,%cn,c1,c2);printf(%c,%cn,c1,c2);printf(%d,%d,c1,c2);printf(%d,%d,c1,c2);A,B 65,66【例【例2-62-6】大小写字母的转换。大小写字母的转换。main()main()char c1,c2,c3,c4;char c1,c2,c3,c4;c1
28、=A;c1=A;c2=B;c2=B;c3=c1+32;c3=c1+32;c4=c2+32;c4=c2+32;printf(%c,%c,c3,c4);printf(%c,%c,c3,c4);a,b-19-第第2 2章章 数据类型与表达式数据类型与表达式2.5 字符型数据字符型数据 字符串常量字符串常量定义:字符串就是用两个双引号(定义:字符串就是用两个双引号(“)括起来的若干个字符。)括起来的若干个字符。例如,例如,ChinaChina、8838387288383872、AJ200 AJ200 存储:存储:每个字符串尾自动加一个每个字符串尾自动加一个 0 0 作为字符串结束标志作为字符串结束标志
29、 例如:例如:字字 符串符串“CHINA”“CHINA”在内存中在内存中字字符符串串的的长长度度:字字符符串串中中所所有有字字符符的的个个数数,其其中中每每个个转转义义字字符符当当作一个字符。作一个字符。例例如如,字字符符串串“China”“China”,、ABCDABCD、“101102x43x44”“101102x43x44”的长度分别为的长度分别为5 5、4 4、6 6、4 4。字符常量与字符串常量不同字符常量与字符串常量不同没有字符串变量,用字符数组存放没有字符串变量,用字符数组存放C H I N A 0a a a 0 a 0例例 a a“a”“a”例例:char ch;ch=A;-2
30、0-第第2 2章章 数据类型与表达式数据类型与表达式2.6 系统函数系统函数 简例简例【例【例2-72-7】假设根据自变量假设根据自变量x x不同的值求下式的值:不同的值求下式的值:x x7 7+sinx-log+sinx-log1010(x+3)(x+3)在在C C语言中可使用以下程序:语言中可使用以下程序:#include#include main()main()float x,y;float x,y;scanf(%f,&x);scanf(%f,&x);y=pow(x,7)+sin(x)-log10(x+3);y=pow(x,7)+sin(x)-log10(x+3);printf(%f,y
31、);printf(%f,y);-21-第第2 2章章 数据类型与表达式数据类型与表达式2.6 系统函数系统函数 函数:函数:是可以被调用的一段程序。是可以被调用的一段程序。库库函函数数:软软件件开开发发商商编编写写了了很很多多标标准准函函数数,作作为为运运算算符符的的补补充充,供供用用户户调用,称之为库函数或系统函数。调用,称之为库函数或系统函数。库函数存储在扩展名为库函数存储在扩展名为.lib.lib的文件中。的文件中。按按库库函函数数类类划划分分为为:数数学学函函数数、字字符符函函数数、字字符符串串函函数数、输输入入输输出出函函数数、动动态态存存储储分分配配函函数数等等。其其声声明明分分别
32、别包包含含在在math.hmath.h、ctype.hctype.h、string.hstring.h、stdio.hstdio.h和和stdlib.hstdlib.h等等文文件件中中。如如果果程程序序需需要要调调用用这这些些库库函函数,就要在源程序文件中使用文件包含命令:数,就要在源程序文件中使用文件包含命令:#include#include 或或#include#include文件名文件名 输输入入输输出出函函数数scanfscanf()()和和printfprintf()()也也是是库库函函数数,称称为为标标准准输输入入输输出出函函数数,它它们们的的声声明明包包含含在在文文件件stdio
33、.hstdio.h中中。由由于于Turbo Turbo C C允允许许使使用用标标准准输输入入输输出出函函数数的的时时候候省省略略头头文文件件,所所以以上上述述例例子子中中我我们们未未使使用用#include#include。-22-第第2 2章章 数据类型与表达式数据类型与表达式求求tg tg x x的值的值doubledoubledoubledoubletan(x)tan(x)tantan求求x x的平方根,的平方根,x x00doubledoubledoubledoublesqrt(x)sqrt(x)sqrtsqrt求求sin sin x x的值的值doubledoubledoubled
34、oublesin(x)sin(x)sinsin产生产生90903276732767的随机整数的随机整数intintrand()rand()randrand求求x xy y的值的值doubledoubledoubledoublepow(x,y)pow(x,y)powpow求求loglog1010 x x的值,的值,x x00doubledoubledoubledoublelog10(x)log10(x)log10log10求求ln ln x x的值,的值,x x00doubledoubledoubledoublelog(x)log(x)loglog求求e ex x的值的值doubledouble
35、doubledoubleexp(x)exp(x)expexp求求cos cos x x的值,的值,x x的单位为弧度的单位为弧度doubledoubledoubledoublecos(x)cos(x)coscos求求x x的反正切的反正切doubledoubledoubledoubleatan(x)atan(x)atanatan求求x x的反正弦,的反正弦,-1-1x x11doubledoubledoubledoubleasin(x)asin(x)asinasin求求x x的反余弦,的反余弦,-1-1x x11doubledoubledoubledoubleacos(x)acos(x)aco
36、sacos求求x x的绝对值的绝对值intintintintabs(x)abs(x)absabs功功 能能 说说 明明函数值类型函数值类型自变量类型自变量类型调用形式调用形式函函 数数 名名 常用数学函数常用数学函数-23-第第2 2章章 数据类型与表达式数据类型与表达式2.7 C运算符概述运算符概述C的运算符有以下几种:的运算符有以下几种:算术运算符:(算术运算符:(+、-、*、/、%),自加自减运算符(),自加自减运算符(+、-)。)。类型转换运算符(类型转换运算符((类型符类型符))。)。关系运算符(关系运算符(、=、=、=、!=!=)。)。逻辑运算符(逻辑运算符(!、&、|)。)。条件
37、运算符(条件运算符(?:?:)。)。位运算符:移位运算符(位运算符:移位运算符(),位逻辑运算符(),位逻辑运算符(、&、|、)。)。求字节数运算符(求字节数运算符(sizeofsizeof)。)。赋赋值值运运算算符符:基基本本赋赋值值运运算算符符(=),算算术术自自反反赋赋值值运运算算符符(+=+=、-=-=、*=*=、/=/=、%=%=),位自反赋值运算符(),位自反赋值运算符(=、&=&=、|=|=、=)。)。逗号运算符(逗号运算符(,)。)。指针运算符(指针运算符(*、&)。)。下标运算符(下标运算符()。)。分量运算符(分量运算符(.、-)。)。-24-第第2 2章章 数据类型与表达
38、式数据类型与表达式2.8 算术运算符算术运算符 算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性算算术术表表达达式式:用用算算术术运运算算符符和和括括号号将将运运算算对对象象连连起起来来的的、符符合合C C语语言言规规则则的的式子。式子。例如:例如:合法的算术表达式:合法的算术表达式:a+b*(y/(-3)+x*x-pow(c,3)+15%6 a+b*(y/(-3)+x*x-pow(c,3)+15%6 不合法的算术表达式:不合法的算术表达式:a*/5+3a*/5+3,x(y+4)x(y+4),a/b%3.5a/b%3.5运运算算符符的的优优先先级级和和结结合合性性:先先按按
39、运运算算符符的的优优先先级级别别高高低低次次序序执执行行。如如果果优优先级别相同,则按规定的先级别相同,则按规定的“结合方向结合方向”处理。处理。各种运算符的结合方向:各种运算符的结合方向:算术运算符中的二元运算的结合方向为算术运算符中的二元运算的结合方向为“自左至右自左至右”。例如:例如:9/2*3%79/2*3%7:先执行:先执行“/”“/”,再执行,再执行“*”“*”,最后执行,最后执行“%”“%”。算术运算符中的单目运算符算术运算符中的单目运算符+、-的结合方向为的结合方向为“自右至左自右至左”。例如:例如:-+-5-+-5等价于等价于-(+(-5)-(+(-5)。可以适当使用小括号可
40、以适当使用小括号“()”“()”来改变表达式的优先级和结合性。来改变表达式的优先级和结合性。-25-第第2 2章章 数据类型与表达式数据类型与表达式2.8 算术运算符算术运算符 自加、自减运算符自加、自减运算符使变量的值加一或减一。使变量的值加一或减一。前缀形式:前缀形式:+i+i,-i-i 先改变先改变i i的值,再使用的值,再使用i i的值。的值。后缀形式:后缀形式:i+i+,i-i-先使用先使用i i的值,再改变的值,再改变i i的值。的值。相当于:相当于:i=i+1i=i+1 i=i 1 i=i 1例如:例如:int i=3,j,k;int i=3,j,k;j=i+;j=i+;k=+i
41、;k=+i;printf(%d,%d,%d,i,j,k);printf(%d,%d,%d,i,j,k);-26-第第2 2章章 数据类型与表达式数据类型与表达式2.8 算术运算符算术运算符说明:说明:+和和-运算符只能用于变量,不能用于常量或表达式。运算符只能用于变量,不能用于常量或表达式。分析:分析:(a+b)+?(a+b)+?+和和-的结合方向是的结合方向是 自右至左自右至左。例如:例如:-x+-x+相当于相当于-(x+)-(x+)-27-第第2 2章章 数据类型与表达式数据类型与表达式2.8 算术运算符算术运算符 类型转换运算符及类型转换类型转换运算符及类型转换 类型转换运算符类型转换运
42、算符l 一般形式:一般形式:(类型名类型名)()(表达式表达式)例例 (int)(x+y)(int)(x+y)(int)x+y (int)x+y (double)(3/2)(double)(3/2)(int)3.6 (int)3.6 l说明:强制转换得到所需类型的中间变量,原变量类型不变说明:强制转换得到所需类型的中间变量,原变量类型不变-28-第第2 2章章 数据类型与表达式数据类型与表达式2.8 算术运算符算术运算符类型转换类型转换当当表表达达式式中中出出现现不不同同类类型型的的操操作作数数时时,要要按按一一定定的的规规则则将将其其转转换换为为相相同的类型。遵循以下转换规则:同的类型。遵循
43、以下转换规则:【例例2-82-8】设设a a是是整整型型变变量量,其其值值为为2 2,c c是是字字符符变变量量,其其值值为为AA,x x是是实实型变量,其值为型变量,其值为1.51.5,则表达式:,则表达式:x+c*a/10-3/2x+c*a/10-3/2高高 double float double float longlongunsignedunsigned低低 int char,short int char,short横向朝左的箭头表示必定的转换。横向朝左的箭头表示必定的转换。纵纵向向箭箭头头表表示示当当运运算算对对象象为为不不同同类类型型时时转转换换的的方方向向。低低级级类类型型转转换
44、换为为高级类型。高级类型。转换是由系统自动进行。转换是由系统自动进行。-29-第第2 2章章 数据类型与表达式数据类型与表达式2.9 关系运算符和逻辑运算符关系运算符和逻辑运算符l 关系运算符关系运算符115+4!=20-2不等于不等于!=0A=C等于等于=1W=K大于等于大于等于=0ab大于大于07*2=5小于等于小于等于=11520小于小于结结 果果实实 例例含含 义义运运 算算 符符-30-第第2 2章章 数据类型与表达式数据类型与表达式2.9 关系运算符和逻辑运算符关系运算符和逻辑运算符在比较时注意以下规则:在比较时注意以下规则:如果两个操作数是数值型,则按其大小比较。如果两个操作数是
45、数值型,则按其大小比较。如如果果两两个个操操作作数数是是字字符符型型,则则按按字字符符的的ASCIIASCII码码值值进进行行比比较较,即即ASCIIASCII码值大的字符大。码值大的字符大。表表中中前前四四种种运运算算符符优优先先级级相相同同,后后两两种种优优先先级级相相同同。前前四四种种的的优先级高于后两种。关系运算符具有自左至右的结合性。优先级高于后两种。关系运算符具有自左至右的结合性。关系运算符的优先级低于算术运算符。关系运算符的优先级低于算术运算符。例例 当当a a的值为的值为2 2时,一个表达式的运算次序及结果如图时,一个表达式的运算次序及结果如图2-22-2所示。所示。11 6
46、19 1301 a=7+a*3图图2-2 2-2 运算顺序运算顺序-31-第第2 2章章 数据类型与表达式数据类型与表达式2.9 关系运算符和逻辑运算符关系运算符和逻辑运算符 逻辑运算符逻辑运算符C C语言中提供了三种逻辑运算符:语言中提供了三种逻辑运算符:单目逻辑运算符:单目逻辑运算符:!(逻辑(逻辑“非非”)。)。双目逻辑运算符:双目逻辑运算符:&(逻辑(逻辑“与与”)。)。双目逻辑运算符:双目逻辑运算符:|(逻辑(逻辑“或或”)。)。a ab b!a!a!b!ba&ba&ba|ba|b非非0 0非非0 00 00 01 11 1非非0 00 00 01 10 01 10 0非非0 01
47、10 00 01 10 00 01 11 10 00 0表表2-7 2-7 逻辑运算的真值表逻辑运算的真值表-32-第第2 2章章 数据类型与表达式数据类型与表达式2.9 关系运算符和逻辑运算符关系运算符和逻辑运算符例例 a=4.5 a=4.5,b=5.0b=5.0,c=2.5c=2.5,d=3.0d=3.0图图2-3 2-3 运算顺序运算顺序 1 7.0 8.0 A=1.0&a+c b+d|!5 00 0 0-33-第第2 2章章 数据类型与表达式数据类型与表达式2.9 关系运算符和逻辑运算符关系运算符和逻辑运算符 条件运算符条件运算符 条件运算符是条件运算符是C C语言中唯一的三目运算符,
48、一般格式为语言中唯一的三目运算符,一般格式为 表达式表达式1?1?表达式表达式2 2:表达式:表达式3 3 【例【例2-92-9】将大写字母转换为小写字母,可编如下程序实现。将大写字母转换为小写字母,可编如下程序实现。main()main()char ch;char ch;scanf(%c,&ch);/*scanf(%c,&ch);/*输入一个字符,赋给变量输入一个字符,赋给变量ch*/ch*/ch=(ch=A&ch=A&ch=A&ch=A&ch=Z)?(ch+32):ch;*/printf(%c,ch);printf(%c,ch);-34-第第2 2章章 数据类型与表达式数据类型与表达式2.
49、10 位运算符与长度运算符位运算符与长度运算符 原码、反码和补码原码、反码和补码 当真值当真值 x=+xn-2xn-3x0 x=+xn-2xn-3x0时,它的原码、反码和补码完全相同,时,它的原码、反码和补码完全相同,x x原原=x=x反反=x=x补补=0 x=0 xn-2n-2x xn-3n-3xx0 0 当真值当真值x=-xn-2xn-3x0 x=-xn-2xn-3x0时,它的原码、反码和补码与时,它的原码、反码和补码与x x的关系:的关系:其中其中 表示表示x xi i取反,即取反,即 n n位位-35-第第2 2章章 数据类型与表达式数据类型与表达式2.10 位运算符与长度运算符位运算
50、符与长度运算符【例例2-102-10】假假设设某某计计算算机机的的字字长长为为1616位位,试试写写出出二二进进制制数数+100010+100010和和-100010100010的原码、反码和补码。的原码、反码和补码。解:解:x=+000000000100010 x=+000000000100010 y=-000000000100010 y=-000000000100010 x x对应的机器数如下:对应的机器数如下:xx原原=x=x反反=x=x补补=0000000000100010=0000000000100010 真值真值y y为负,则有为负,则有 y y原原 y y反反 y y补补【例【例