版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第第 2 2 章章 基本数据及其运算基本数据及其运算2.1 基本类型数据基本类型数据2.2 输入和输出基础输入和输出基础2.3 数据运算数据运算2.4 表达式表达式22.1 2.1 基本类型数据基本类型数据C语言中,基本数据有三种:语言中,基本数据有三种: 整数:整数是不带小数点和指数符号整数:整数是不带小数点和指数符号的数据。的数据。 浮点数:浮点数是带有小数点或指数浮点数:浮点数是带有小数点或指数符号的数值数据。符号的数值数据。 字符:字符型数据表示一个字符,占字符:字符型数据表示一个字符,占用一个字节(用一个字节(8个二进制位)。个二进制位)。 32.1.1 整型数据 按其数值范围大小
2、划分成三种:按其数值范围大小划分成三种:1. 1. 基本型:用基本型:用 int int 标记标记2. 2. 短整型:用短整型:用 short int short int 标记,简写为标记,简写为 shortshort3. 3. 长整型:用长整型:用 long int long int 标记,简写为标记,简写为 longlong 按值内部的最高位不同理解又有两类:按值内部的最高位不同理解又有两类:1.1.带符号:存储单元最高位作为符号位带符号:存储单元最高位作为符号位2.2.不带符号:存储单元中全部二进位用作存不带符号:存储单元中全部二进位用作存放数据本身,而没有符号位。放数据本身,而没有符号
3、位。 表示方法:表示方法: unsigned int unsigned int、 unsigned unsigned shortshort、 unsigned long unsigned long4int i, j; /* 定义带符号的整型变量定义带符号的整型变量 */unsigned short k; /* 定义无符号短整型变量定义无符号短整型变量 */long m, n; /* 定义带符号的长整型变量定义带符号的长整型变量 */ 说明:不同版本占用字节数说明:不同版本占用字节数 例如例如 shortintlongTurbo C224VC+6.0244类型类型版本版本5 常用的整数表示的数值
4、范围常用的整数表示的数值范围1616位例位例111111111111111符号位:符号位:0表示正表示正数据位数据位图图2-1(a) 2-1(a) 带符号整数,值为带符号整数,值为3276732767(即(即215-1215-1) 111111111111111符号位:符号位:1表示负表示负数据位数据位图图2-1(b) 2-1(b) 带符号整数,带符号整数,-1-1(负数用补码表示)(负数用补码表示) 1111111111111111数据位数据位图图2-1(c) 2-1(c) 无符号整数,值为无符号整数,值为6553565535(即(即216-1216-1) 6 十进制整数:如十进制整数:如
5、0 0,123123,-45-45。 八进制整数:以数字八进制整数:以数字0 0开头,并由开头,并由0 07 7组成的数组成的数字符序列。如:字符序列。如:01230123表示八进制整数,其值等于十表示八进制整数,其值等于十进制整数为:进制整数为:1 1* *82 + 282 + 2* *81 + 3 = 8381 + 3 = 83 十六进制整数:以十六进制整数:以0 x(0 x(或或0X)0X)开头,并由十六进开头,并由十六进制数的数字符组成的数字符序列。表示十六进制数制数的数字符组成的数字符序列。表示十六进制数的数字符有的数字符有 16 16 个:个:0 09 9 和和 A A、B B、C
6、 C、D D、E E、F F,其中六个字母也可以小写。其中六个字母也可以小写。如:如:0 x1230 x123表示十六进制整数,其值等于十进制整表示十六进制整数,其值等于十进制整数为:数为:1 1* *162 + 2162 + 2* *161 + 3 = 291161 + 3 = 291;0 xabc0 xabc,其值等,其值等于于1010* *162 + 11162 + 11* *161 + 12 = 2748161 + 12 = 2748。 整型常量的书写形式整型常量的书写形式7 long long 型整数:在整型常数后加字母型整数:在整型常数后加字母 L L 或或 l l,即为,即为lo
7、ng long 型整型常数。型整型常数。 例如:例如:0L0L、132L 132L 等。等。 不带符号的整型:在整型常数后加字母不带符号的整型:在整型常数后加字母 U U 或或 u u,即为,即为 unsigned unsigned 型整型常数。型整型常数。例如:例如:1U1U、122U 122U 等。等。 不带符号的不带符号的 long long 型整数:在整型常数型整数:在整型常数后同时加上字母后同时加上字母 U U 和和 L L,表明该整型,表明该整型常 数 是常 数 是 u n s i g n e d l o n g u n s i g n e d l o n g 型 。型 。例如例如
8、: 22UL: 22UL、35LU 35LU 等。等。 长整型整数和无符号整数的表示长整型整数和无符号整数的表示8 按数值范围大小和精度不同分成三种:按数值范围大小和精度不同分成三种:1. 单精度型:用单精度型:用 float 标记标记 如:如: float x, y; 2. 双精度型:用双精度型:用 double 标记标记 如:如: double result;3. 长双精度实型:用长双精度实型:用 long double 标记标记 如:如:long double z;2.1.2 2.1.2 浮点型数据浮点型数据91. float 型型 在内存中占用在内存中占用4个字节个字节(32个二进位个
9、二进位),约,约7个个十进位有效数字,能表示绝对值约为十进位有效数字,能表示绝对值约为10-381038。2. double 型型 在内存中占用在内存中占用8个字节个字节(64个二进位个二进位),约,约15个十进位有效数字,能表示绝对值约为个十进位有效数字,能表示绝对值约为10-308 10308。3. long double 型型 long double型数据一般占用比型数据一般占用比double型数据型数据更多的字节,但在更多的字节,但在VC中,也只占用中,也只占用8个字节。个字节。2.1.2 浮点型数据(续)浮点型数据(续)10说明:说明:(1)(1)整数部分和小数部分可以任选,但不可同
10、整数部分和小数部分可以任选,但不可同时没有。时没有。(2)(2)小数点和指数部分不可以同时都没有。小数点和指数部分不可以同时都没有。 (3)(3)指数部分是以一个字母指数部分是以一个字母e e或或E E开头,后跟一开头,后跟一个整数。个整数。例如:合法的浮点常数:例如:合法的浮点常数:7.7.、.457.457、1E51E5、1.5e-6 1.5e-6 不正确的浮点常数:不正确的浮点常数: E4 E4、.E5.E5、4.0E4.0E浮点数的一般书写格式浮点数的一般书写格式 正负号正负号 整数部分整数部分. .小数部分小数部分 指数部分指数部分11(4) 在浮点数后加在浮点数后加f表示表示flo
11、at;加;加L(或或l)表示表示long double 型,在浮点数的最后不加任型,在浮点数的最后不加任何字母,何字母,C系统认为此数是系统认为此数是 double 型。型。例如:例如: 1.5 表示表示double型型 1.5f 表示表示float型型 1.5L表示表示long double型型浮点数说明浮点数说明12(2)(2)浮点数运算有一定的计算误差浮点数运算有一定的计算误差例如:要判别两个浮点型变量例如:要判别两个浮点型变量x x和和y y是否相等是否相等正确:正确:fabs(x-y)1e-6fabs(x-y)1e-6 / /* * x x与与y y非常接近则认为相等非常接近则认为相
12、等* */ / 错误:错误:x = y x = y / /* * x x与与y y不可能完全相等不可能完全相等 * */ /浮点数注意点浮点数注意点(1)(1)接受的浮点数与书写会有一定的误差接受的浮点数与书写会有一定的误差例如例如: float x = 1.23456789; : float x = 1.23456789; 因因x x只能存储约只能存储约7 7位有效数字位有效数字, ,浮点数浮点数1.234567891.23456789所对应的二进制形式中,超出存储位数所对应的二进制形式中,超出存储位数的那些位不会被存储。的那些位不会被存储。13字符型数据用于表示一个字符值。字符型数据用于表
13、示一个字符值。字符型数据的内部表示是字符的字符型数据的内部表示是字符的ASCIIASCII代码代码( (二进制形式二进制形式) )。字符型数据的类型符用字符型数据的类型符用charchar来标记。来标记。 如:如:char c1, c2; char c1, c2; 字符型数据可看作是字符型数据可看作是-128-128127127或或0 0255255的的一个小整数。一个小整数。2.1.3 2.1.3 字符型数据字符型数据14普通字符常量:用单引号括住的一个字符。普通字符常量:用单引号括住的一个字符。例如:例如:aa、BB、$ $ 【例【例2.12.1】字符型数据与整型数据通用的示例】字符型数据
14、与整型数据通用的示例程序。程序。#include #include void main()void main() char c1, c2; / char c1, c2; /* * 定义两个字符型变量定义两个字符型变量c1c1和和c2 c2 * */ / c1 = 97; / c1 = 97; /* * a a的的 ASCII ASCII 码值码值为为 97 97 * */ / c2 = c1+1; / c2 = c1+1; /* * 字符型数据与整型数字符型数据与整型数据混合运算据混合运算 * */ / printf(c1 = %c, c1s ASCII code = printf(c1 =
15、%c, c1s ASCII code = %d n, c1, c1);%d n, c1, c1); printf(c2 = %c, c2s ASCII code = printf(c2 = %c, c2s ASCII code = %d n, c2, c2);%d n, c2, c2); 字符型常量书写方法普通字符常字符型常量书写方法普通字符常量量c1 = a, c1s ASCII code = 97c2 = b, c2s ASCII code = 98 15转义字符常量:用转义字符常量:用 字符或字符或 字符列字符列来来标记。标记。( (详见表详见表2-1) 2-1) 例如:例如: r r
16、:回车符,光标位置移到当前行首:回车符,光标位置移到当前行首 n n :换行符,光标位置移到下一行首:换行符,光标位置移到下一行首t t :制表符,使输出位置横向跳至下一个:制表符,使输出位置横向跳至下一个输出区开始列。输出区开始列。0 0 :字符串结束符:字符串结束符 ddd ddd :dddddd为为1 1至至3 3个个8 8进制数字。如进制数字。如1212也也能表示换行符能表示换行符n n 。字符型常量书写方法转义字符常字符型常量书写方法转义字符常量量 16转义符转义符 含含 义义aa响铃响铃bb退格(退格(BackspaceBackspace键)键)nn换行符,光标位置移到下一行首换行
17、符,光标位置移到下一行首rr回车符,光标位置移到当前行首回车符,光标位置移到当前行首tt水平制表符(水平制表符(TabTab键)键)反斜杠符反斜杠符 单引号符单引号符 双引号符双引号符 00字符串结束符字符串结束符dddddddddddd为为1 1至至3 3个个8 8进制数字进制数字如,如,1212也能表示换行符也能表示换行符nnxhhxhhhhhh为为1 1至至2 2个个1616进制数字进制数字如,如,x41x41也能表示大写字母也能表示大写字母AA表表2-1 转义字符及其含义转义字符及其含义 17字符串常量:用双引号括起来的一串字符。字符串常量:用双引号括起来的一串字符。例如:例如:I a
18、m a student.I am a student.、ChinaChina、a a 普通字符与字符串的区别普通字符与字符串的区别字符型常量书写方法字符串常量字符型常量书写方法字符串常量形式形式字符数字符数存储存储输入输出输入输出普通普通字符字符单引号括住单引号括住1单个变量单个变量%c或或%d字符串字符串双引号括住双引号括住0n数组数组%s18例如:例如:char c=achar c=a正确正确 char c= a char c= a 错误错误又如:字符串又如:字符串ChinaChina机内表示机内表示: : 字符型数据可与整型数据混合运算字符型数据可与整型数据混合运算 字符型数据以字符型数
19、据以 ASCII ASCII 代码的二进代码的二进制形式存储,与整数的存储形式相类似。制形式存储,与整数的存储形式相类似。因此,在因此,在C C程序中,字符型数据和整型程序中,字符型数据和整型数据之间可以通用,字符型数据与整型数据之间可以通用,字符型数据与整型数据可混合运算。数据可混合运算。字符型与字符串常量的区别字符型与字符串常量的区别C h i n a192.2 2.2 输入和输出基础输入和输出基础2.2.1 单字符的输出和输入单字符的输出和输入1. 单个字符的输出函数单个字符的输出函数格式:格式:putchar(ch)功能:将一个字符输出到标准输出功能:将一个字符输出到标准输出设备(通常
20、指显示器)上。设备(通常指显示器)上。其中:其中: ch可以是字符型常量或变量,也可以是字符型常量或变量,也可以是可以是 整型常量或变量。整型常量或变量。20【例【例2.2】使用】使用putchar( )函数示例函数示例#include void main() char ch= h; int i = i; putchar(67); /* 输出字母输出字母C,对应的,对应的ASCII码值为码值为67 */ putchar(ch); /* 输出字母输出字母h */ putchar(i); /* 输出字母输出字母i */ putchar(n); /* 输出字母输出字母n */ putchar(141
21、); /* 输出字母输出字母a,对应的,对应的ASCII码值为码值为141(八进制)(八进制)*/ putchar(n); /* 换行换行 */程序输出程序输出 China 212. 单个字符输入函数单个字符输入函数格式:格式:getchar()getchar()功能:从标准输入设备上(通常为键盘)读功能:从标准输入设备上(通常为键盘)读入入 一个字符。一个字符。说明:说明:1. 1. 该函数没有参数,它只能接受一个输入字该函数没有参数,它只能接受一个输入字符。符。2. getchar()2. getchar()得到的字符可以赋给一个字符得到的字符可以赋给一个字符变量或整型变量,也可以不赋给任
22、何变量。变量或整型变量,也可以不赋给任何变量。例如:将输入的字符直接输出例如:将输入的字符直接输出 putchar(getchar() putchar(getchar()22【例【例2.3】使用】使用getchar( )函数示例函数示例#include void main() char c; c = getchar(); /* 输入一个字符输入一个字符 */ putchar(c); /* 输出读入的字符输出读入的字符 */ putchar(n); /* 换行换行 */若:程序运行时从键盘键入字符若:程序运行时从键盘键入字符 Z 和和Enter键键则:程序输出则:程序输出 Z 232.2.2 2
23、.2.2 格式输出和输入格式输出和输入1. 格式输出函数格式输出函数格式:格式:printf(格式控制字符串格式控制字符串,输出项表输出项表)其中:其中:(1)格式控制字符串是用双引号括起来格式控制字符串是用双引号括起来的字符串,包含三类内容:的字符串,包含三类内容: 普通字符:要求按原样输出的字符。普通字符:要求按原样输出的字符。 转义字符:要求按转义字符的意义输出。转义字符:要求按转义字符的意义输出。例如:例如:n表示输出时回车换行,表示输出时回车换行, b表示退表示退格。格。 格式转换说明:以格式转换说明:以“%”开头后加修饰符和开头后加修饰符和格式符。常用的有格式符。常用的有%d、%f
24、、%c、%s等。等。242.2.2 格式输出和输入格式输出和输入 printf函数函数(2) 输出项表:每一个输出项可以是一个常量、变输出项表:每一个输出项可以是一个常量、变量或表达式等。量或表达式等。每个格式对应一个输出项。每个格式对应一个输出项。例如:例如: int a=3, b=5; printf(a=%d,b=%d, a+b=%dn,a,b,a+b);输出结果:输出结果: a=3,b=5,a+b=8 a=3,b=5,a+b=825 输出格式符输出格式符 格式符格式符 意意 义义 d或或i以十进制形式输出整型以十进制形式输出整型 o 以八进制形式输出整型以八进制形式输出整型 x或或X以十
25、六进制形式输出整型以十六进制形式输出整型 u 以无符号十进制形式输出整型以无符号十进制形式输出整型 f 以小数形式输出单、双精度浮点数以小数形式输出单、双精度浮点数 e或或E以指数形式输出单、双精度浮点数以指数形式输出单、双精度浮点数 c输出一个字符输出一个字符 s 输出字符串输出字符串 % 输出一个字符输出一个字符%26 格式修饰符格式修饰符- 左对齐标志,默认时为右对齐左对齐标志,默认时为右对齐+ 正数输出带正号正数输出带正号# 对八进制数前加对八进制数前加0;对十六进制数;对十六进制数前加前加0 x;对浮点数总显示小数点。;对浮点数总显示小数点。数字数字 指定数据输出的宽度。若宽度指定数
26、据输出的宽度。若宽度为为*,表示宽度由下一个输出项的,表示宽度由下一个输出项的整数值指出。整数值指出。例如:例如:printf(%*c,10, *)则:等同与则:等同与%10c,即先输出,即先输出9个空格,个空格,再输出一个再输出一个*27 格式修饰符(续)格式修饰符(续).数字数字 对对e、f格式,指定小数点之后输出的位格式,指定小数点之后输出的位数,默认时,输出数,默认时,输出6位小数。位小数。 对对s格式,指定输出的字符数。格式,指定输出的字符数。h 输出的是短整型输出的是短整型L 或或 l 对格式符对格式符 d、i、o、x,输出的是长整,输出的是长整型;对格式符型;对格式符 f、e 输
27、出的是输出的是 long double型。型。28 格式输出函数例格式输出函数例2.42.4【例【例1 1】int i = 1234; long j = 1234567L;int i = 1234; long j = 1234567L; printf(%d,%+6d, %-6d, %ldn, printf(%d,%+6d, %-6d, %ldn, i, i, i, j); i, i, i, j); 将输出将输出: 1234, ,1234 ,1234567: 1234, ,1234 ,1234567注意:对于注意:对于longlong型数据输出,在格式符前必须有长度型数据输出,在格式符前必须有长
28、度修饰符修饰符l l,表明输出,表明输出longlong型数据。型数据。【例【例2 2】int k = 045; long p = -1L; int k = 045; long p = -1L; printf(%#o, %4o, %6lon, k, k, p); printf(%#o, %4o, %6lon, k, k, p); printf(%#x, %4x, %6lXn, k, k, printf(%#x, %4x, %6lXn, k, k, p);p);将输出将输出: 045, 45,37777777777 (-1: 045, 45,37777777777 (-1的补码的补码) ) 0
29、x25, 25,FFFFFFFF 0 x25, 25,FFFFFFFF29 格式输出函数例(续)格式输出函数例(续)【例【例3 3】 printf(%d,%4u,%lun, u, printf(%d,%4u,%lun, u, u, -1);u, -1);将输出将输出: -1, , : -1, , 【例【例4 4】 printf(%c,%-3c,%2cn, 045, a, a); printf(%c,%-3c,%2cn, 045, a, a);/ /* * 八进制八进制045045对应的字符是对应的字符是% % * */ / 将输出将输出: %,a , a: %,a , a【例【例5 5】 pr
30、intf(%f,%8.3f,%-7.2f,%.7fn, printf(%f,%8.3f,%-7.2f,%.7fn, 123.4567f,123.4567f,123.4567f, 123.456789);123.4567f,123.4567f,123.4567f, 123.456789);将输出将输出: 123.456703, : 123.456703, 123.457,123.46 ,123.4567890 123.457,123.46 ,123.4567890 232-1即全即全1302. 2. 格式输入函数格式输入函数格式:格式:scanf(scanf(格式控制字符串格式控制字符串, ,数
31、据储存地址项表数据储存地址项表) )其中:其中:(1)(1)格式控制字符串是用双引号括起来的字符串格式控制字符串是用双引号括起来的字符串, ,主主要包括二类内容:要包括二类内容: 普通字符:要求用户必须按原样输入。普通字符:要求用户必须按原样输入。 格式转换说明:以格式转换说明:以”% %”开头后加修饰符和格式开头后加修饰符和格式符符(2)(2)数据存储地址项表数据存储地址项表: : 每一个地址项是一个变量每一个地址项是一个变量的地址(在变量名前加地址运算符的地址(在变量名前加地址运算符& &)31输入格式符表输入格式符表格式符格式符 意意 义义 d或或i以十进制形式输入整数以
32、十进制形式输入整数 o以八进制形式输入整数以八进制形式输入整数 x或或X以十六进制形式输入整数以十六进制形式输入整数 u以十进制形式输入无符号整数以十进制形式输入无符号整数 f以小数形式输入浮点数以小数形式输入浮点数 e以指数形式输入浮点数以指数形式输入浮点数 c输入字符数据输入字符数据 s输入字符串数据输入字符串数据32 格式修饰符格式修饰符* 赋值抑制符,即输入的数据不传送给变量赋值抑制符,即输入的数据不传送给变量数字数字 指定输入数据的数字符个数指定输入数据的数字符个数h 输入输入short型整数。型整数。l 或或 L 输入长整数、双精度或长双精度型数据。输入长整数、双精度或长双精度型数
33、据。例如:例如:int i; double j; scanf(%d%lf, &i, &j); /* 为变量为变量i输入整型数,为变量输入整型数,为变量j输入双精度数输入双精度数 */33 格式输入函数说明格式输入函数说明1. 格式控制字符串之后给出的是变量地址,而不是格式控制字符串之后给出的是变量地址,而不是变量名变量名(除非是指针除非是指针)。例如:例如: 为整型变量为整型变量 n 输入数据输入数据写成写成: scanf(%d, n) 是不正确的是不正确的应写成应写成: scanf(%d, &n)2. 在格式控制字符串中,如果有普通字符,则在输在格式控制字符串中,如果
34、有普通字符,则在输入数据时应输入与这些字符相同的字符。入数据时应输入与这些字符相同的字符。例如:例如: scanf(%d,%d, &i, &j)正确输入:正确输入: 1,2错误输入:错误输入: 1 234 格式输入函数说明格式输入函数说明3. 在用在用%c格式入字符时,空白类字符和转义字格式入字符时,空白类字符和转义字符都作为有效字符输入。若要取输入的一串空符都作为有效字符输入。若要取输入的一串空白类字符之后的第一个非空白类字符,可采用白类字符之后的第一个非空白类字符,可采用格式格式 %c。4. 在输入数值数据和字符串时,遇以下情况,就在输入数值数据和字符串时,遇以下情况,就认
35、为该数据结束:认为该数据结束: 遇空白类字符:空白符、制表符、换行符。遇空白类字符:空白符、制表符、换行符。 已读入由宽度所指定的字符数:如已读入由宽度所指定的字符数:如 %4d 多至多至 4 个数字符。个数字符。 对于输入数值数据,下一个字符不能构成正确对于输入数值数据,下一个字符不能构成正确的数据格式。的数据格式。35 格式输入函数说明例格式输入函数说明例例:例: int i; char c; float x; scanf(%d%c%f, &i, &c, &x)若输入字符为:若输入字符为:123a123x.26则:变量则:变量i为为123,变量,变量c为字符为字符a
36、,变量,变量x为为123.0。例:例: int i, j; scanf(%3d%*4d%d, &i, &j)若输入字符为:若输入字符为:123456 78则:则: 变量变量i为为123,j为为78。其中数据。其中数据 456 因赋值抑制因赋值抑制符符*的作用被跳过。的作用被跳过。36 格式输入函数说明格式输入函数说明5. s 格式用来输入字符串,输入的字符序列之后自格式用来输入字符串,输入的字符序列之后自动添加字符串结束标志符动添加字符串结束标志符0(因此,存储输入字(因此,存储输入字符序列的字符数组的长度必须比实际最长字符串符序列的字符数组的长度必须比实际最长字符串的字符数多
37、的字符数多1)。)。6. 请注意请注意c格式符和格式符和s格式符的区别。格式符的区别。例:例: char c100, s100; scanf(%4c, c); /* 输入输入4个字符个字符 */输入:输入: abcd结果:结果: scanf(%4s, s); /* 忽略前导空格忽略前导空格 */输入:输入: abcd结果:结果:abcdabcd037 格式输入函数例格式输入函数例2.52.5对下列输入,要让变量对下列输入,要让变量i和和j值分别为值分别为12和和234 (1) scanf(%d,%d,&i,&j);正确的输入:正确的输入:12,234(2) scanf(%d%d
38、, &i, &j);正确的输入:正确的输入:12 234 (3) scanf(%2d%3d, &i, &j);正确的输入:正确的输入:12234 (4) scanf(%d%*d%d, &i, &j);正确的输入:正确的输入:12 0 234 382.3 2.3 数据运算数据运算 运算符的优先级运算符的优先级 优先级用来标志运算符在表达式中的运算优先级用来标志运算符在表达式中的运算顺序。优先级高的先运算,优先级低的后运算。顺序。优先级高的先运算,优先级低的后运算。如:如:x-yx-y* *z z 相当于相当于 x-(y x-(y* *z) z) 运
39、算符的结合性运算符的结合性 在优先级相同情况下,表达式的计算顺序在优先级相同情况下,表达式的计算顺序由结合性来确定。大多数运算符的结合性是从由结合性来确定。大多数运算符的结合性是从左至右,只有单目、三目和赋值运算符的结合左至右,只有单目、三目和赋值运算符的结合性是从右至左的。如:性是从右至左的。如:x=a+b-c; a=b=c=1.5;x=a+b-c; a=b=c=1.5;392.3.1 赋值运算简单赋值运算赋值运算简单赋值运算简单赋值形式:简单赋值形式: 变量变量 = 表达式表达式执行过程:执行过程:(1)计算表达式,并将计算的值赋给变量;计算表达式,并将计算的值赋给变量;(2)如表达式类型
40、与变量类型不一致,将表达如表达式类型与变量类型不一致,将表达式值的类型自动转换成变量的类型;式值的类型自动转换成变量的类型;(3) 将表达式的值赋给变量。将表达式的值赋给变量。 说明:赋值运算符的结合性是说明:赋值运算符的结合性是“自右至左自右至左”。例例1:int x; double y; y = x = 3.5; /* x的值为的值为3, y的值为的值为3.0 */例例2:i=4+(j=7);/* 使使j值为值为7,i值为值为11 */例例3:i=(j=3)+(k=8); /* 使使j值为值为3,k为为8,i为为11 */402.3.1 赋值运算复合赋值运算赋值运算复合赋值运算 在赋值运算
41、符在赋值运算符“=”“=”之前加上其他运算符,可构之前加上其他运算符,可构成复合运算符。成复合运算符。复合运算符:复合运算符: += +=、-=-=、* *= =、/=/=、%=%=、=、&=&=、=、|=|=例:例:x + = 5.0 x + = 5.0 等价于等价于 x = x + 5.0 x = x + 5.0 (将(将“x +”“x +”移到移到“=”“=”右侧)右侧) x x * * = u + v = u + v 等价于等价于 x = x x = x * * (u + (u + v)v) a + = a - = b + 2 a + = a - = b + 2 等价于
42、等价于 a = a+(a=a- a = a+(a=a-(b+2)(b+2)412.3.2 算术运算一般运算符算术运算一般运算符单目运算符:单目运算符:+(+(取正取正) )、-(-(取负取负) )双目运算符:双目运算符:+(+(加加) )、-(-(减减) )、* *( (乘乘) )、/(/(除除) )、%(%(求余求余) )说明说明:(1) :(1) 两个整数相除结果为整数,如两个整数相除结果为整数,如: 7/4 = 1: 7/4 = 1 (2) (2) 求余运算符求余运算符(%): (%): 要求参与运算的两个分量均为整要求参与运算的两个分量均为整型数据,如型数据,如 5 % 3 = 2 5
43、 % 3 = 2。求余运算所得结果的符号与被除数。求余运算所得结果的符号与被除数的符号相同。的符号相同。如如: -5 % 3 = -2 , 5 % -3 = 2 : -5 % 3 = -2 , 5 % -3 = 2 。 (3) (3)加、减、乘、除和求余运算都是双目运算符,结合性加、减、乘、除和求余运算都是双目运算符,结合性都是从左至右的。都是从左至右的。 取正取正(+)(+)、取负、取负(-)(-)是单目运算符,结合性是从右至左,是单目运算符,结合性是从右至左,优先级高于优先级高于 + +、- -、* *、/ /、% % 等双目运算符。等双目运算符。422.3.2 算术运算自增和自减运算符算
44、术运算自增和自减运算符+i前缀形式,表示在引用变量前缀形式,表示在引用变量i之前,先使之前,先使i加加1,以加以加1后的后的i值为运算结果;值为运算结果;-i前缀形式,表示在引用变量前缀形式,表示在引用变量i之前,先使之前,先使i减减1,以减以减1后的后的i值为运算结果;值为运算结果;i+后缀形式,表示在引用变量后缀形式,表示在引用变量i之后,才使之后,才使i加加1,即以增即以增1前的前的i值为运算结果;值为运算结果;i-后缀形式,表示在引用变量后缀形式,表示在引用变量i之后,才使之后,才使i减减1,即以减即以减1前的前的i值为运算结果。值为运算结果。 43 自增自增/自减运算符例自减运算符例
45、例如:例如:i = 4;j = +i; /* i结果为结果为5,j的结果为的结果为5 */i = 4;j = i+;/* i结果为结果为5,j的结果为的结果为4 */i = 4;j = -i; /* i结果为结果为3,j的结果为的结果为3 */i = 4;j = i-;/* i结果为结果为3,j的结果为的结果为4 */441. +和和-运算符只能用于变量,不能用于常运算符只能用于变量,不能用于常量或表达式。如量或表达式。如 4+ 或或 (i+j)+ 都是不合法都是不合法的。的。2. +和和-是带有副作用的运算符。不要在一是带有副作用的运算符。不要在一个表达式中对同一变量多次使用这样的运个表达式
46、中对同一变量多次使用这样的运算符。如算符。如i=4,表达式,表达式(i+)+(i+)的值是的值是8不不是是9,表达式,表达式(+i)+(+i)的值是的值是12不是不是11。3. 如如i=4,在,在printf(%d %dn, i, i+)中,输中,输出的结果可能是出的结果可能是4 4(从左到右),也可能(从左到右),也可能是是5 4(从右到左)。(从右到左)。自增自增/自减运算符注意事项自减运算符注意事项452.3.3 关系运算和逻辑运算关系运算和逻辑运算关系运算符:关系运算符: 、= 、=、=、!=!= 关系运算符用于对两个值进行关系比较,判定关系运算符用于对两个值进行关系比较,判定比较条件
47、是否满足。在语言中,条件满足的值为比较条件是否满足。在语言中,条件满足的值为1 1;条件不满足为条件不满足为 0 0。(1) (1) 优先级:优先级: 、= 、= = 高于高于 = =,!=!=如:如: 表达式表达式 x y = c y = c y) = (c y) = (c u+v x u+v 等价于等价于 x (u+v) x (u+v) (3) (3) 关系运算符的结合方向是自左至右的关系运算符的结合方向是自左至右的如:如: i=1 i=1,j=2j=2,k=3 k=3 则表达式则表达式 kji kji 的值为的值为 0 010462.3.3 关系运算和逻辑运算关系运算和逻辑运算逻辑运算符
48、逻辑运算符 &(逻辑与逻辑与)、| (逻辑或逻辑或)、! (逻辑非逻辑非)其中:运算符其中:运算符 & 和和 | 是双目运算符,要求是双目运算符,要求有两个运算数;运算符有两个运算数;运算符 ! 是单目运算符,是单目运算符,只要求一个运算数。只要求一个运算数。优先级:优先级:!、&、|说明:逻辑运算结果也是一个逻辑量,即真说明:逻辑运算结果也是一个逻辑量,即真(用用1表示表示)或假或假(用用0表示表示)。判定一个运。判定一个运算分量的值为真或假时,以运算分量的算分量的值为真或假时,以运算分量的值不等于零为真,值等于值不等于零为真,值等于0 为假。为假。472.3.3 关
49、系运算和逻辑运算(真值表)关系运算和逻辑运算(真值表) 逻辑运算真值表逻辑运算真值表 a a b b !a a & b a | b !a a & b a | b 非非0 0非非0 0 0 0 1 1 1 1 非非0 0 0 0 0 0 0 0 1 1 0 0非非0 0 1 1 0 0 1 1 0 0 0 0 1 1 0 0 0 0优先级:优先级: ! ! (非)(非) 高高 算术运算符算术运算符 关系运算符关系运算符 & & 和和 | | 赋值运算符赋值运算符 低低482.3.3 关系运算和逻辑运算(例)关系运算和逻辑运算(例)例如:例如: a b &
50、x y 等价于:等价于: (a b) & (x y)a != b | x != y 等价于:等价于: (a != b) | (x != y)x = 0 | x y 等价于:等价于:(x = 0) | (x y)!a & b | x y & z y) &(z 1 & 4 & 7 1 & 4 & 7 1) & 4) & (7 1) & 4) & (7 b) & (n=cd) m = 0, n=cd不计算,不计算,n仍为仍为6522.3.3 关系运算和逻辑运算(说明)关系运算和逻辑运算(说明)例例
51、2 2: int a = 1, b = 1, c = 1; int a = 1, b = 1, c = 1; 计算计算 +a | +b & +c +a | +b & +c ,因,因+a+a非非0 0,不再,不再计算逻辑或右边表达式计算逻辑或右边表达式+b & +c+b & +c。该表达式计算。该表达式计算后,变量后,变量a a的值变为的值变为2 2,而变量,而变量b b和和c c的值不变,依旧的值不变,依旧为为1 1。注意书写顺序注意书写顺序: : 例例 如:如: y/x 2 y/x 2 且且 x != 0 x != 0 应写成:应写成: x != 0 &
52、; y/x 2 x != 0 & y/x 2 因为,当因为,当 x x 为为 0 0 时,不会计算时,不会计算 y/x y/x 而写成而写成: y/x 2 & x != 0 : y/x 2 & x != 0 是不正确的,是不正确的,因为当因为当 x x 为为 0 0 时,不能计算时,不能计算 y/x y/x。532.3.4 条件运算条件运算形式:形式: 表达式表达式1 ?表达式?表达式2 :表达式:表达式3执行过程:执行过程:(1) 计算表达式计算表达式1;(2) 如果表达式如果表达式1的值非的值非0(真真),则计算表达式,则计算表达式2,并作,并作为条件运算的结果为条
53、件运算的结果(不再计算表达式不再计算表达式3);(3) 如果表达式如果表达式1的值为的值为0(假假),则计算表达式,则计算表达式3,并作,并作为条件运算的结果为条件运算的结果(不再计算表达式不再计算表达式2)。例如:例如:x y ? x : y如果如果 x y 为真,则条件运算取为真,则条件运算取x值,否则取值,否则取y值。值。说明:条件运算符说明:条件运算符(?:)优先级高于赋值运算符,低优先级高于赋值运算符,低 于逻辑运算符、关系运算符和算术运算符。于逻辑运算符、关系运算符和算术运算符。542.3.4 条件运算(结合性)条件运算(结合性)条件运算符的结合性为条件运算符的结合性为“自右至左自
54、右至左”。例例 如:如: max = x y ? x : y + 1 max = x y ? x : y + 1等价于:等价于: max = (x y) ? x : (y + 1) max = (x y) ? x : (y + 1)例例 如:如: x y ? x : u v ? u : v x y ? x : u v ? u : v等价于:等价于: x y ? x : (u v ? u : v) x y ? x : (u v ? u : v) 条件运算三个运算分量的数据类型可以各不相同。条件运算三个运算分量的数据类型可以各不相同。语言约定,类型低的向类型高的转换。语言约定,类型低的向类型高的转
55、换。如:如: i j ? 2 : 3.5 i j ? 2 : 3.5当当 i j i j 时,条件表达式的值为时,条件表达式的值为2.02.0;否则为;否则为3.53.5。552.3.5 其他运算符其他运算符 逗号运算逗号运算形式:表达式形式:表达式1,表达式,表达式2, ,表达式,表达式n执行过程:执行过程:(1) 从左至右依次计算各个表达式;从左至右依次计算各个表达式;(2) 最后一个表达式的值作为整个逗号表达式运算的最后一个表达式的值作为整个逗号表达式运算的结果。结果。例如:例如:x = (i = 3, i * 2) 结果:使结果:使i等于等于3,x等于等于6。说明:说明:1. 逗号运算
56、目的是将多个表达式逗号运算目的是将多个表达式“串连串连”起起来,分别得到各表达式的值。来,分别得到各表达式的值。 2. 逗号运算常用于逗号运算常用于 for 循环结构,用于给多循环结构,用于给多个变量赋初值。个变量赋初值。 3. 逗号运算符的优先级最低。逗号运算符的优先级最低。562.3.5 其他运算符其他运算符sizeof 运算运算形式:形式:sizeof (sizeof (类型名类型名) ) 或或 sizeof sizeof 表达式表达式 作用:给出运算对象在内存中所占用的字节数。作用:给出运算对象在内存中所占用的字节数。例例1 1: int x=1; float y=2; double
57、z=4; int x=1; float y=2; double z=4; printf(int=%d, float=%d, double=%dn, printf(int=%d, float=%d, double=%dn, sizeof x, sizeof (float), sizeof z); sizeof x, sizeof (float), sizeof z); 结果:结果:int=4, float=4, double=8int=4, float=4, double=8例例2 2: int a = 1,3,5,7,9 ; float b; int a = 1,3,5,7,9 ; float
58、 b;printf(%dn, sizeof b);printf(%dn, sizeof b);printf(%dn, sizeof a / sizeof(int);printf(%dn, sizeof a / sizeof(int);结果:结果:4 45 5 572.3.5 其他运算符其他运算符 位运算位运算(只要求了只要求了解解) 位运算的运算分量只能是整型或字符型位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到成的位串信息,按位完成指定的运算,得到位串信息结果。位串信息结果。位运算符按优先级
59、从高到低依次为:位运算符按优先级从高到低依次为: ( (位反位反) )、 & ( & (位与位与) )、 ( (位异或位异或) )、| (| (位位或或) )说 明 : 位 反 是 单 目 运 算 符 , 其 余 均 为说 明 : 位 反 是 单 目 运 算 符 , 其 余 均 为 双目运算符。双目运算符。58位运算位运算 位与运算位与运算(&)(&)位与规则:位与规则:0 & 0 = 0 0 & 0 = 0 0 & 1 = 0 0 & 1 = 0 1 & 0 = 0 1 & 0 = 0 1 & 1 = 1
60、1 & 1 = 1即:同为即:同为 1 1 的位,结果为的位,结果为 1 1,否则结果为,否则结果为 0 0。例如:例如:53 & 2253 & 22的结果为的结果为20200000000000110101 0000000000110101 (十进制(十进制5353,八进制为,八进制为6565) & 0000000000010110 & 0000000000010110 (十进制(十进制2222,八进制为,八进制为2626) 0000000000010100 0000000000010100 (十进制(十进制2020,八进制为,八进制为2424) 按位与运算典型用法:按位与运算典型用法:1. 1. 取一个位串的某几位取一个位串的某几位 例如,截取例如,截取x x的最低的最低7 7位:位:x & 0177x & 01772. 2. 保留变量某几位,其余位置保留变量某几位,其余位置0 0 例如,保留例如,保留x x最低最低6 6位:位:x = x & 077x = x & 07759位运算位或运算位运算位或运算(|)(|)位与规则:位与规则:0 | 0 = 00 | 0 = 0 0 | 1 = 1 0 | 1 = 1 1 | 0 = 11 |
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 五金店清货转让协议书范文范本
- 承诺分手一段时间再复合协议书范文
- 二人合伙买卖二手车合同协议书范文
- 携手共创服装电商未来-洞察市场打造双赢合作模式
- 人教版道德与法治八年级下册6.4国家监察机关课件4
- 2023-2024学年云南省楚雄彝族自治州大姚县第一中学高三第一次诊断数学试题试卷
- 2023-2024学年泰安市重点中学高考数学试题模拟试卷
- 电竞狂潮:未来游戏的巨大商机-抓住机遇赢在起跑线上
- 校园安全从我做起建议书(31篇)
- 青春励志满分演讲稿
- 论文范文浅谈儿童自闭症
- 城市公园管理养护中的难点、重点与建议
- 必看!设备管理必须要懂的一、二、三、四、五
- 空冷岛专题(控制方案、谐波及变压器容量选择)
- 三角函数的图像与性质复习课件
- 初一英语自我介绍PPT课件
- 液氧汽化站安全技术操作规程2018-07.docx
- 督学与校长应彼此“亦师亦友”
- 肺癌的术前后护理案例分析
- 模具专业英文术语大全
- 新教科版(2017版)五年级上册科学 期中测试卷
评论
0/150
提交评论