大学计算机C语言_第1页
大学计算机C语言_第2页
大学计算机C语言_第3页
大学计算机C语言_第4页
大学计算机C语言_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

5、常量和变量常量和变量 标识符与变量标识符与变量1 1标识符标识符 在在c c 语言中,标识符是对变量、符号常量、函数、数组、文件等用语言中,标识符是对变量、符号常量、函数、数组、文件等用户定义对象的命名。户定义对象的命名。 标识符可以是一个或多个字符。标识符的第一个字符必须是英文字标识符可以是一个或多个字符。标识符的第一个字符必须是英文字母或下画线,随后的字符必须是字母、数字或下画线。不能以数字打母或下画线,随后的字符必须是字母、数字或下画线。不能以数字打头。头。 下面是一些正确或错误标识符命名的示例。下面是一些正确或错误标识符命名的示例。 正确标识符正确标识符 错误标识符错误标识符 weig

6、ht 2xweight 2x length a|#b length a|#b color2 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。 i

7、ntint a,b; a,b; float x,y,z; float x,y,z;c c语言有五种基本数据类型:字符型、整型、实型、双精度实型、语言有五种基本数据类型:字符型、整型、实型、双精度实型、和空类型。定义这五种类型的变量时须使用的类型说明符分别为和空类型。定义这五种类型的变量时须使用的类型说明符分别为charchar、intint、floatfloat、doubledouble和和voidvoid。 -7-第第2 2章章 数据类型与表达式数据类型与表达式2.3 整型数据整型数据整型常量整型常量1 1不同进制数的使用不同进制数的使用 十进制整数的表示与通常在算术中的表示一样,例如:十进

8、制整数的表示与通常在算术中的表示一样,例如:321321,+321+321。 八进制整数必须以数字八进制整数必须以数字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 in

10、tunsigned int。 无符号短整型:无符号短整型:unsigned short intunsigned short int。 无符号长整型:无符号长整型:unsigned long intunsigned long int。-9-第第2 2章章 数据类型与表达式数据类型与表达式2.3 整型数据整型数据类类 型型占占 字字 节节 数数取取 值值 范范 围围intint2 2字节字节-32768-327683276732767shortshort2 2字节字节-32768-327683276732767longlong4 4字节字节-2147483648-21474836482147483

11、6472147483647unsigned intunsigned int2 2字节字节0 06553565535unsigned shortunsigned short2 2字节字节0 06553565535unsigned longunsigned long4 4字节字节0 042949672954294967295ansi标准定义的整数类型标准定义的整数类型 -10-第第2 2章章 数据类型与表达式数据类型与表达式2.3 整型数据整型数据3.3.不同类型的整型常量赋值给整形变量不同类型的整型常量赋值给整形变量 整型变量可分为整型变量可分为intint、short intshort int

12、、long intlong int、unsigned intunsigned int、unsigned shortunsigned short、unsigned longunsigned long等类别,将整型常量赋值给上述类等类别,将整型常量赋值给上述类别的整型变量时如何做到类型匹配?别的整型变量时如何做到类型匹配? 一个整型常数,若值在一个整型常数,若值在-32768-32768+32767+32767范围内,可将它赋值给范围内,可将它赋值给intint型型和和long intlong int型变量。型变量。一个整型常数,若值在一个整型常数,若值在-2147483648-214748364

13、8+2147483647+2147483647范围内,可以赋范围内,可以赋值给一个值给一个long intlong int型变量。型变量。常量无常量无unsignedunsigned型。但一个非负值的整数可以赋值给型。但一个非负值的整数可以赋值给unsigned intunsigned int型变量,只要它的范围在型变量,只要它的范围在0 06553565535范围内。范围内。在一个整常数后面加一个小写字母在一个整常数后面加一个小写字母l l或大写字母或大写字母l l,则认为是,则认为是longlong型型常量。例如,常量。例如,-123l-123l、123l123l、0l0l、0775l07

14、75l、0 x9el0 x9el等。等。-11-第第2 2章章 数据类型与表达式数据类型与表达式2.3 整型数据整型数据 3. 3. 整型变量的定义整型变量的定义对变量的定义,一般是放在一个函数的开头的声明部分。对变量的定义,一般是放在一个函数的开头的声明部分。【例【例2-12-1】 main()main() int int a; a; unsigned int unsigned int b; b; long c; long c; unsigned long d; unsigned long d; a=-100; a=-100; b=60000; b=60000; c=-2123456789;

15、 c=-2123456789; d=4123456789; d=4123456789; printf(a=%d,b=%u,c=%ld,d=%lu,a,b,c,d printf(a=%d,b=%u,c=%ld,d=%lu,a,b,c,d); ); 运行结果为运行结果为 a=-100,b=60000,c=-2123456789,d=4123456789a=-100,b=60000,c=-2123456789,d=4123456789-12-第第2 2章章 数据类型与表达式数据类型与表达式2.4 实型数据实型数据 实型常量的表示方法实型常量的表示方法 实型常数也称为浮点数,在实型常数也称为浮点数,在

16、c c语言中实型常数只使用十进制数表示,语言中实型常数只使用十进制数表示,它的书写方式有两种:它的书写方式有两种: 小数形式。小数形式。它是由整数、小数点、小数三部分组成,最多只能省略其它是由整数、小数点、小数三部分组成,最多只能省略其中的整数或小数部分,但不能二者都省略,也不能省略小数点。例如:中的整数或小数部分,但不能二者都省略,也不能省略小数点。例如:123.123.,-.123-.123,1.231.23,-1.23-1.23,12.012.0,0.0.,.0.0,0.00.0都是合法的十进制小都是合法的十进制小数形式。数形式。 指数形式。指数形式。它是由尾数、字母它是由尾数、字母e

17、e或或e e、指数三部分组成。尾数可以是一、指数三部分组成。尾数可以是一个十进制小数形式,也可以是一个整数形式,个十进制小数形式,也可以是一个整数形式, 如如123e-3123e-3或或123e-3123e-3都代表都代表12312310-310-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,12

18、.3e5.412.3e5.4却是非法的指数形式。却是非法的指数形式。-13-第第2 2章章 数据类型与表达式数据类型与表达式2.4 实型数据实型数据 实型变量实型变量1 1实型数据在内存中的存放形式实型数据在内存中的存放形式 实型数据是按指数形式存储的。系统把实型数据是按指数形式存储的。系统把一个实型数据分成尾数部分和指数部分分别一个实型数据分成尾数部分和指数部分分别存放。实型数据在内存中小数点位置不是固存放。实型数据在内存中小数点位置不是固定的,或者说是浮动的,故这种表示法称为定的,或者说是浮动的,故这种表示法称为浮点表示法。浮点表示法。2 2实型变量的定义实型变量的定义 对每一个实型变量都

19、应在使用前加以定对每一个实型变量都应在使用前加以定义。如义。如 float x,y;float x,y;3 3实型数据的舍入误差实型数据的舍入误差 由于实型变量是由有限的存储单元组成由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的。在的,因此能提供的有效数字总是有限的。在有效范围以外的数字将被舍去。由此可能会有效范围以外的数字将被舍去。由此可能会产生一些误差。请分析下面的程序:产生一些误差。请分析下面的程序:【例【例2-32-3】分析实型】分析实型数据的舍入误差。数据的舍入误差。main()main() float a; float a; a=12345.6789; a=1

20、2345.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+002-14-第第2 2章章 数据类型与表达式数据类型与表达式2.4 实型数据实型数据 双精度型数据双精度型数据1 1双精度常数双精度常数 双精度常数的书写方式与实型常数的书写方式相同,有十进制小数形双精度常数的书写方式与实型常数的书写方式相同,有十进制小数形式和指数形式两种式和指数形式两种,

21、,比实型数据的范围广、精度高。比实型数据的范围广、精度高。2 2双精度数据在内存中的表示形式双精度数据在内存中的表示形式 ansiansi并未具体规定每种类型数据的长度、精度和数值范围。并未具体规定每种类型数据的长度、精度和数值范围。 微机上常用的微机上常用的c c编译系统编译系统( (如如turbo cturbo c、ms cms c、borland c)borland c)实型数据:实型数据:3 3双精度变量的定义双精度变量的定义 双精度类型标识符双精度类型标识符doubledouble前还可加修饰符前还可加修饰符longlong,long double long double 比比dou

22、bledouble型的精度更高,表示的数值范围更大。型的精度更高,表示的数值范围更大。类类 型型二进制位数二进制位数有有 效效 数数 字字数数 值值 范范 围围floatfloat32326 67 71010-37-3710103838doubledouble6464151516161010-307-3071010308308long doublelong double128128181819191010-4931-4931101049324932-15-第第2 2章章 数据类型与表达式数据类型与表达式2.5 字符型数据字符型数据 字符常量字符常量 字符常量是用单引号(字符常量是用单引号( )

23、括起来的单个字符。例如)括起来的单个字符。例如aa、!、#、aa、 * * 等。等。 除字符常量外,将除字符常量外,将“”开头的特定字符串称为开头的特定字符串称为“转义字符转义字符”,意,意思是将反斜杠后面的字符串转换成另外的意义。思是将反斜杠后面的字符串转换成另外的意义。 转义字符转义字符 含含 义义ascii代码(十进制)代码(十进制)n换行,将当前位置移到下一行开头换行,将当前位置移到下一行开头10t水平制表(跳到下一个水平制表(跳到下一个tab位置)位置)9b退格,将当前位置移到前一格退格,将当前位置移到前一格8r回车,将当前位置移到本行开头回车,将当前位置移到本行开头13反斜杠字符反

24、斜杠字符“”92单引号字符单引号字符39双引号字符双引号字符34ddd一到三位八进制数一到三位八进制数ddd代表的字符代表的字符ddd (八进制)(八进制)xhh一到两位十六进制数一到两位十六进制数hh代表的字符代表的字符hh(十六进制)(十六进制)-16-第第2 2章章 数据类型与表达式数据类型与表达式ascii码码键盘键盘ascii 码码键盘键盘ascii 码码键盘键盘ascii 码码键盘键盘27esc32space33!3435#36$37%38&3940(41)42*43+4445-46.47/48049150251352453554655756857958:59;6063?6

25、465a66b67c68d69e70f71g72h73i74j75k76l77m78n79o80p81q82r83s84t85u86v87w88x89y90z9192939495_9697a98b99c100d101e102f103g104h105i106j107k108l109m110n111o112p113q114r115s116t117u118v119w120 x121y122z123124|125126-17-第第2 2章章 数据类型与表达式数据类型与表达式2.5 字符型数据字符型数据【例【例2-42-4】下面程序中使用了几种转义字符。下面程序中使用了几种转义字符。 main()mai

26、n() printf(abxbcdtefghtijkln printf(abxbcdtefghtijkln); ); printf(xxxxxxxxrmnoptqrst printf(xxxxxxxxrmnoptqrst uvwxnuvwxn); ); 程序运行时在显示屏上得到以下结果:程序运行时在显示屏上得到以下结果:abcd abcd efgh efgh ijklijklmnopmnopqrst qrst uvwxuvwx-18-第第2 2章章 数据类型与表达式数据类型与表达式2.5 字符型数据字符型数据 字符变量字符变量 字符变量用来存放字符常量,一字符变量用来存放字符常量,一个字符变量

27、只能放一个字符。个字符变量只能放一个字符。 字符变量的定义形式:字符变量的定义形式: char char 变量名表列;变量名表列; 例如:例如: char c1,c2;char c1,c2; c1=a; c1=a; c2=b; c2=b; c c语言编译系统规定用一个字节语言编译系统规定用一个字节来存放一个字符,将一个字符常量来存放一个字符,将一个字符常量赋值给一个变量,实际上是将该字赋值给一个变量,实际上是将该字符的符的asciiascii代码放到存储单元中。代码放到存储单元中。 【例【例2-52-5】将字符数据以不同的方式将字符数据以不同的方式输出。输出。 main()main() cha

28、r 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=a; c1=a; c2=b; c2=b; c3=c1+32; c3=c1+32; c4=c2+32; c4=c2+32; printf(%c,%c,c3,c

29、4); printf(%c,%c,c3,c4); a,b-19-第第2 2章章 数据类型与表达式数据类型与表达式2.5 字符型数据字符型数据 字符串常量字符串常量 定义:字符串就是用两个双引号(定义:字符串就是用两个双引号(“)括起来的若干个字符。)括起来的若干个字符。 例如,例如,chinachina、8838387288383872、aj200 aj200 存储:存储:每个字符串尾自动加一个每个字符串尾自动加一个 0 0 作为字符串结束标志作为字符串结束标志 例如:例如:字字 符串符串“china”china”在内存中在内存中 字符串的长度:字符串中所有字符的个数,其中每个转义字符当字符串

30、的长度:字符串中所有字符的个数,其中每个转义字符当作一个字符。作一个字符。 例如,字符串例如,字符串“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; -20-第第2 2章章 数据类型与表达式数据类型与表达式2.6 系统函数系统函数 简例简例【例【例2-72-7】假设根据自

31、变量假设根据自变量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 printf(%f,y);); -21-第第2 2章章 数据类型与表达式数据类

32、型与表达式2.6 系统函数系统函数 函数:函数:是可以被调用的一段程序。是可以被调用的一段程序。 库函数:库函数:软件开发商编写了很多标准函数,作为运算符的补充,供用户软件开发商编写了很多标准函数,作为运算符的补充,供用户调用,称之为库函数或系统函数。调用,称之为库函数或系统函数。 库函数存储在扩展名为库函数存储在扩展名为.lib.lib的文件中。的文件中。 按库函数类划分为:数学函数、字符函数、字符串函数、输入输出函按库函数类划分为:数学函数、字符函数、字符串函数、输入输出函数、动态存储分配函数等。其声明分别包含在数、动态存储分配函数等。其声明分别包含在math.hmath.h、ctype.

33、hctype.h、string.hstring.h、stdio.hstdio.h和和stdlib.hstdlib.h等文件中。如果程序需要调用这些库函等文件中。如果程序需要调用这些库函数,就要在源程序文件中使用文件包含命令:数,就要在源程序文件中使用文件包含命令: #include#include 或或 #include#include文件名文件名 输入输出函数输入输出函数scanf()scanf()和和printfprintf()()也是库函数,称为标准输入输出函也是库函数,称为标准输入输出函数,它们的声明包含在文件数,它们的声明包含在文件stdio.hstdio.h中。由于中。由于turb

34、o cturbo c允许使用标准输允许使用标准输入输出函数的时候省略头文件,所以上述例子中我们未使用入输出函数的时候省略头文件,所以上述例子中我们未使用#includestdio.h#include 。-22-第第2 2章章 数据类型与表达式数据类型与表达式求求tgtg x x的值的值doubledoubledoubledoubletan(x)tan(x)tantan求求x x的平方根,的平方根,x x00doubledoubledoubledoublesqrt(xsqrt(x) )sqrtsqrt求求sin sin x x的值的值doubledoubledoubledoublesin(x)s

35、in(x)sinsin产生产生90903276732767的随机整数的随机整数intintrand()rand()randrand求求x xy y的值的值doubledoubledoubledoublepow(x,ypow(x,y) )powpow求求loglog1010 x x的值,的值,x x00doubledoubledoubledoublelog10(x)log10(x)log10log10求求lnln x x的值,的值,x x00doubledoubledoubledoublelog(x)log(x)loglog求求e ex x的值的值doubledoubledoubledouble

36、exp(x)exp(x)expexp求求coscos x x的值,的值,x x的单位为弧度的单位为弧度doubledoubledoubledoublecos(xcos(x) )coscos求求x x的反正切的反正切doubledoubledoubledoubleatan(xatan(x) )atanatan求求x x的反正弦,的反正弦,-1-1x x11doubledoubledoubledoubleasin(xasin(x) )asinasin求求x x的反余弦,的反余弦,-1-1x x11doubledoubledoubledoubleacos(xacos(x) )acosacos求求x

37、x的绝对值的绝对值intintintintabs(x)abs(x)absabs功功 能能 说说 明明函数值类型函数值类型自变量类型自变量类型调用形式调用形式函函 数数 名名 常用数学函数常用数学函数-23-第第2 2章章 数据类型与表达式数据类型与表达式2.7 c运算符概述运算符概述c的运算符有以下几种:的运算符有以下几种: 算术运算符:(算术运算符:(+ +、- -、* *、/ /、% %),自加自减运算符(),自加自减运算符(+、-)。)。 类型转换运算符(类型转换运算符(( (类型符类型符) ))。)。 关系运算符(关系运算符( 、= 、=、=、!=!=)。)。 逻辑运算符(逻辑运算符(

38、! !、&、|)。)。 条件运算符(条件运算符(? :? :)。)。 位运算符:移位运算符(位运算符:移位运算符(),位逻辑运算符(),位逻辑运算符( 、& &、| |、 )。)。 求字节数运算符(求字节数运算符(sizeofsizeof)。)。 赋值运算符:基本赋值运算符(赋值运算符:基本赋值运算符(= =),算术自反赋值运算符(),算术自反赋值运算符(+=+=、-=-=、* *= =、/=/=、%=%=),位自反赋值运算符(),位自反赋值运算符(=、&=&=、|=|=、=)。)。 逗号运算符(逗号运算符(, ,)。)。 指针运算符(指针运算符(* *

39、、& &)。)。 下标运算符(下标运算符( )。)。 分量运算符(分量运算符(. .、-)。)。-24-第第2 2章章 数据类型与表达式数据类型与表达式2.8 算术运算符算术运算符 算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性算术表达式:算术表达式:用算术运算符和括号将运算对象连起来的、符合用算术运算符和括号将运算对象连起来的、符合c c语言规则语言规则的式子。的式子。例如:例如:合法的算术表达式:合法的算术表达式:a+ba+b* *(y/(-3)+x(y/(-3)+x* *x-pow(c,3)+15%6 x-pow(c,3)+15%6 不合法的算术表达

40、式:不合法的算术表达式:a a* */5+3/5+3,x(y+4)x(y+4),a/b%3.5a/b%3.5运算符的优先级和结合性:运算符的优先级和结合性:先按运算符的优先级别高低次序执行。如果优先按运算符的优先级别高低次序执行。如果优先级别相同,则按规定的先级别相同,则按规定的“结合方向结合方向”处理。处理。各种运算符的结合方向:各种运算符的结合方向: 算术运算符中的二元运算的结合方向为算术运算符中的二元运算的结合方向为“自左至右自左至右”。 例如:例如:9/29/2* *3%73%7:先执行:先执行“/”/”,再执行,再执行“* *”,最后执行,最后执行“%”%”。 算术运算符中的单目运算

41、符算术运算符中的单目运算符+ +、- -的结合方向为的结合方向为“自右至左自右至左” ” 。 例如:例如:-+-5-+-5等价于等价于-(+(-5)-(+(-5)。可以适当使用小括号可以适当使用小括号“()”()”来改变表达式的优先级和结合性。来改变表达式的优先级和结合性。-25-第第2 2章章 数据类型与表达式数据类型与表达式2.8 算术运算符算术运算符 自加、自减运算符自加、自减运算符使变量的值加一或减一。使变量的值加一或减一。前缀形式:前缀形式:+i+i, -i-i 先改变先改变i i的值,再使用的值,再使用i i的值。的值。后缀形式:后缀形式:i+i+,i-i- 先使用先使用i i的值

42、,再改变的值,再改变i i的值。的值。 相当于:相当于:i = i + 1i = i + 1 i = i 1 i = i 1例如:例如: intint i=3,j,k; i=3,j,k; j=i+; j=i+; k=+i; 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)+ ?+和和-的结合方向是的结

43、合方向是 自右至左自右至左 。 例如:例如:-x+ -x+ 相当于相当于-(x+)-(x+)-27-第第2 2章章 数据类型与表达式数据类型与表达式2.8 算术运算符算术运算符 类型转换运算符及类型转换类型转换运算符及类型转换 类型转换运算符类型转换运算符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 说明:强制转换得到所需类型的中间变量,原变量类型不变说明:强制转换得到所需类型的中间变量,原变量类型

44、不变-28-第第2 2章章 数据类型与表达式数据类型与表达式2.8 算术运算符算术运算符类型转换类型转换当表达式中出现不同类型的操作数时,要按一定的规则将其转换为相当表达式中出现不同类型的操作数时,要按一定的规则将其转换为相同的类型。遵循以下转换规则:同的类型。遵循以下转换规则:【例【例2-82-8】设设a a是整型变量,其值为是整型变量,其值为2 2,c c是字符变量,其值为是字符变量,其值为aa,x x是实是实型变量,其值为型变量,其值为1.51.5,则表达式:,则表达式: x+cx+c* *a/10-3/2a/10-3/2高高 double float double float long

45、longunsignedunsigned低低 int char, shortint char, short 横向朝左的箭头表示必定的转换。横向朝左的箭头表示必定的转换。 纵向箭头表示当运算对象为不同类纵向箭头表示当运算对象为不同类型时转换的方向。低级类型转换为型时转换的方向。低级类型转换为高级类型。高级类型。 转换是由系统自动进行。转换是由系统自动进行。-29-第第2 2章章 数据类型与表达式数据类型与表达式2.9 关系运算符和逻辑运算符关系运算符和逻辑运算符 关系运算符关系运算符115+4!=20-2不等于不等于!=0a=c等于等于=1w=k大于等于大于等于=0ab大于大于07*2=5小于等

46、于小于等于=11520小于小于结结 果果实实 例例含含 义义运运 算算 符符-30-第第2 2章章 数据类型与表达式数据类型与表达式2.9 关系运算符和逻辑运算符关系运算符和逻辑运算符 在比较时注意以下规则:在比较时注意以下规则: 如果两个操作数是数值型,则按其大小比较。如果两个操作数是数值型,则按其大小比较。 如果两个操作数是字符型,则按字符的如果两个操作数是字符型,则按字符的asciiascii码值进行比较,码值进行比较,即即asciiascii码值大的字符大。码值大的字符大。 表中前四种运算符优先级相同,后两种优先级相同。前四种的表中前四种运算符优先级相同,后两种优先级相同。前四种的优先

47、级高于后两种。关系运算符具有自左至右的结合性。优先级高于后两种。关系运算符具有自左至右的结合性。 关系运算符的优先级低于算术运算符。关系运算符的优先级低于算术运算符。 例例 当当a a的值为的值为2 2时,一个表达式的运算次序及结果如图时,一个表达式的运算次序及结果如图2-22-2所示。所示。 11 6 19 1301 a = 7+a* *3图图2-2 2-2 运算顺序运算顺序-31-第第2 2章章 数据类型与表达式数据类型与表达式2.9 关系运算符和逻辑运算符关系运算符和逻辑运算符 逻辑运算符逻辑运算符c c语言中提供了三种逻辑运算符:语言中提供了三种逻辑运算符: 单目逻辑运算符:单目逻辑运

48、算符:! !(逻辑(逻辑“非非”)。)。 双目逻辑运算符:双目逻辑运算符:&(逻辑(逻辑“与与”)。)。 双目逻辑运算符:双目逻辑运算符:|(逻辑(逻辑“或或”)。)。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 10 00 01 10 00 01 11 10 00 0表表2-7 2-7 逻辑运算的真值表逻辑运算的真值表-32-第第2 2章章 数据类型与表达式数据类型与表达式2.9 关系运算符和逻辑运算符关系运算符和逻辑运算符例例 a=4

49、.5a=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语言中唯一的三目运算符,一般格式为语言中唯一的三目运算符,一般格式为 表达式表达式1? 1? 表达式表达式2 2 :表达式:表达式3 3 【例【例2-92-9】将大写字母转换为小写字母,可编如下程序实现。将大写字母转换为小写字母,可编

50、如下程序实现。 main()main() char ch char ch; ; scanf(%c,&ch scanf(%c,&ch); /); /* * 输入一个字符,赋给变量输入一个字符,赋给变量chch* */ / ch=(ch=a& ch=a& ch=a&chch=(ch=a&ch=z)?(ch+32):ch; =z)?(ch+32):ch; * */ / printf(%c,ch printf(%c,ch);); -34-第第2 2章章 数据类型与表达式数据类型与表达式2.10 位运算符与长度运算符位运算符与长度运算符 原码、反码和补码原

51、码、反码和补码 当真值当真值 x=+xn-2xn-3x=+xn-2xn-3x0 x0时,它的原码、反码和补码完全相同,时,它的原码、反码和补码完全相同, xx原原=x=x反反=x=x补补=0 x=0 xn-2n-2x xn-3n-3x x0 0 当真值当真值x=-xn-2xn-3x=-xn-2xn-3x0 x0时,它的原码、反码和补码与时,它的原码、反码和补码与x x的关系:的关系: 其中其中 表示表示x xi i取反,即取反,即 n n位位032.x1xxxnn原012.1xxxxnn反1.1012xxxxnn补ix01xi1x0 xii当当-35-第第2 2章章 数据类型与表达式数据类型与

52、表达式2.10 位运算符与长度运算符位运算符与长度运算符【例【例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为负,则有为负

53、,则有 yy原原=1000000000100010=1000000000100010 y y反反=1111111111011101=1111111111011101 y y补补=1111111111011110=1111111111011110【例【例2-112-11】已知】已知xx补补=1111111111110010=1111111111110010,求真值,求真值x x。解:由解:由xx补补求出求出xx反反,则得,则得 xx反反=1111111111110010-1=1111111111110001=1111111111110010-1=1111111111110001 x x原原=10

54、00000000001110=1000000000001110 x x原原对应的符号位为对应的符号位为1 1,故其对应的真值为负,且数值位与原码各,故其对应的真值为负,且数值位与原码各位相同,即有位相同,即有 x=(- -000000000001110)2=14-36-第第2 2章章 数据类型与表达式数据类型与表达式2.10 位运算符与长度运算符位运算符与长度运算符 移位运算移位运算符符1 1左移位运算符左移位运算符 e1ne1n例如例如: : x=-32767 x=-32767,手工计算,手工计算x2x2的步骤如下:的步骤如下:第一步:第一步:xx原原=1111111111111111=11

55、11111111111111第二步:第二步:xx反反=1000000000000000=1000000000000000第三步:第三步:xx补补=1000000000000001=1000000000000001第四步:将第四步:将xx补补左移位两次得左移位两次得 00000000000001000000000000000100第五步:将上式看作结果数所对应的补码,求原码。由于符号位为第五步:将上式看作结果数所对应的补码,求原码。由于符号位为0 0,其,其原码还等于补码。原码还等于补码。第六步:由原码得到真值为第六步:由原码得到真值为4 4,这正是,这正是x2x2的运算结果。的运算结果。一般来

56、说,一个整数左移一位,其结果相当于这个整数乘以一般来说,一个整数左移一位,其结果相当于这个整数乘以2 2(数值溢出(数值溢出时例外)。时例外)。例如:例如: -21 -2 e1ne1n注意注意: : 对无符号数,右移时,左边高位移入对无符号数,右移时,左边高位移入0 0。 对于有符号的值,如果原来符号位为对于有符号的值,如果原来符号位为0 0(该数为正),则左边也是移(该数为正),则左边也是移入入0 0;如果符号位原来为;如果符号位原来为1 1(该数为负),则左边移入(该数为负),则左边移入0 0还是还是1 1,要取决,要取决于所用的计算机系统。有的系统移入于所用的计算机系统。有的系统移入0

57、0,有的系统移入,有的系统移入1 1。turbo cturbo c及多及多数数c c编译系统是移入编译系统是移入1 1,即保持数的正负性不变。,即保持数的正负性不变。一般来说,一个整数右移一般来说,一个整数右移1 1位,其结果相当于这个整数除以位,其结果相当于这个整数除以2 2。例如:例如: 142142,相当于,相当于1414连续两次除以连续两次除以2 2并取整,即其值为并取整,即其值为3 3。-38-第第2 2章章 数据类型与表达式数据类型与表达式2.10 位运算符与长度运算符位运算符与长度运算符 位逻辑运算符位逻辑运算符1 1按位取反运算符按位取反运算符 以以intint型数据为例,若型

58、数据为例,若a a的值为的值为2 2,则,则 aa补补=0000000000000010=0000000000000010按位取反得按位取反得 11111111111111011111111111111101上式对应的原码为上式对应的原码为 10000000000000111000000000000011从而知从而知(a)(a)的值为的值为-3-3。2 2按位与运算符按位与运算符& &按位与运算符按位与运算符& &的作用是对两个操作数按位求逻辑与。的作用是对两个操作数按位求逻辑与。 0010100000000000 0010100000000000(&)

59、0010110000000000-39-第第2 2章章 数据类型与表达式数据类型与表达式2.10 位运算符与长度运算符位运算符与长度运算符 3 3按位或运算符按位或运算符| | 按位或运算符按位或运算符| |的作用是对两个操作数按位求逻辑或。的作用是对两个操作数按位求逻辑或。 4 4按位异或运算符按位异或运算符 按位异或运算符使参加运算的两个数按位求异或,即当两个二进位相按位异或运算符使参加运算的两个数按位求异或,即当两个二进位相异则结果为异则结果为1 1,相同则结果为,相同则结果为0 0。 0010110000000000 0010100000000000(|)0010110000000000 0000010000000000 0010100

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论