1. 首页
  2. 文档大全

第三章 数据类型、运算符与表达式

上传者:7****0 2022-06-02 08:37:15上传 PPT文件 832KB
第三章 数据类型、运算符与表达式_第1页 第三章 数据类型、运算符与表达式_第2页 第三章 数据类型、运算符与表达式_第3页

《第三章 数据类型、运算符与表达式》由会员分享,可在线阅读,更多相关《第三章 数据类型、运算符与表达式(62页珍藏版)》请在文档大全上搜索。

1、C C语言程序设计语言程序设计回顾回顾数据结构+算法=程序C C语言中以语言中以“数据类型数据类型”形式存形式存在在对数据的描述对数据的描述对操作的描述对操作的描述用用运算符运算符和和表达式表达式表示表示3.1 C3.1 C语言的数据类型语言的数据类型3.2 3.2 常量与变量常量与变量3.3 3.3 整型数据整型数据3.4 3.4 浮点型数据浮点型数据3.5 3.5 字符型数据字符型数据3.6 3.6 变量赋初值变量赋初值3.7 3.7 各类数值型数据间的混合运算各类数值型数据间的混合运算3.8 3.8 算术运算符和算术表达式算术运算符和算术表达式3.9 3.9 赋值运算符和赋值表达式赋值运

2、算符和赋值表达式3.10 3.10 逗号运算符和逗号表达式逗号运算符和逗号表达式3.1 C3.1 C语言的数据类型语言的数据类型数据类型数据类型基本类型基本类型整型整型字符型字符型实型实型(浮点型浮点型)枚举类型枚举类型构造类型构造类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型指针类型指针类型空类型空类型单精度型单精度型双精度型双精度型在程序中对用到的在程序中对用到的所有数据都必须指所有数据都必须指定其定其数据类型数据类型.?不同类型的数据不同类型的数据,所占所占内存的字节数内存的字节数不同不同, 对对应的应的操作操作也不相同。也不相同。数据类型决定:数据类型决定:1. 1. 数

3、据占内存字节数数据占内存字节数2. 2. 数据取值范围数据取值范围3. 3. 其上可进行的操作其上可进行的操作3.2 3.2 常量和变量常量和变量( (一一) ) 常常 量量( (二二) ) 变变 量量(一)常量(一)常量概念概念在程序运行过程中,其值不能被改变的量。在程序运行过程中,其值不能被改变的量。分类分类字面常量(字面常量(直接常量直接常量):): 12 -44.6 a Hello! 符号常量:用一个符号常量:用一个标识符标识符代表一个常量。代表一个常量。 字符串常量字符串常量符号常量符号常量的定义的定义格式:格式:#define 常量名常量名 字面常量字面常量举例:举例:#defin

4、e PRICE 100 #define PI 3.14 #define C1 a习惯上常量名用大写,习惯上常量名用大写,变量名用小写。变量名用小写。意义意义1、含义清楚。、含义清楚。2、在需要改变一个常量时,能够做到、在需要改变一个常量时,能够做到“一改全改一改全改”。 符号常量的定义放在符号常量的定义放在函数外面。函数外面。(一)常量(一)常量举例(求某商品总价)#include #define PRICE 100 /定义符号常量void main()int sum;sum=PRICE*20;printf(%dn,sum);单价单价符号常量符号常量数量数量直接常量直接常量2000如再用赋值语

5、句给PRICE赋值是错误的。 PRICE=40; /* 错误,不能给符号常量赋值。 (二)变量(二)变量概念概念其值可以其值可以改变的量称为变量。改变的量称为变量。要素要素(1)变量名。)变量名。每个变量都必须有一个名字每个变量都必须有一个名字变量名,变量命名遵循标识符命名规则。变量名,变量命名遵循标识符命名规则。(2)变量值。)变量值。在程序运行过程中,变量值存在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用储在内存中。在程序中,通过变量名来引用变量的值。变量的值。(二)变量(二)变量标识符标识符identifier1、标识符就是一个名字(如、标识符就是一个名字(如常量名、变

6、量名、函常量名、变量名、函数名数名)。)。2、组成:只能由、组成:只能由字母、数字、下划线字母、数字、下划线组成。且第组成。且第一个字符必须为一个字符必须为字母或下划线字母或下划线。3、长度:标识符的有效长度随系统而异,如果超、长度:标识符的有效长度随系统而异,如果超长,则超长部分被舍弃。长,则超长部分被舍弃。VC+6.0中规定最大长中规定最大长度为度为247个字符。建议标识符的长度最好不要超过个字符。建议标识符的长度最好不要超过8个字符。个字符。4、标识符命名的良好习惯、标识符命名的良好习惯见名知意见名知意例如,例如,name(姓名)、(姓名)、age(年龄)(年龄)习惯上,变量名用小写字母

7、。习惯上,变量名用小写字母。常量名用大写字母。常量名用大写字母。思 考 ?下列标识符是否合法,为什么?下列标识符是否合法,为什么?sum a1 b2 s_name123 #ss a.b.c 1a8bc合法合法不合法不合法(二)变量(二)变量变量定义变量定义先定义,后使用先定义,后使用变量定义的一般格式:变量定义的一般格式: 数据类型数据类型 变量变量11,变量,变量2 2,变量,变量n;n;例: int a,b,c; float data;决定分配字节数决定分配字节数和数的表示范围和数的表示范围合法标识符合法标识符#include #define PRICE 100 /定义符号常量void m

8、ain()int sum;sum=PRICE*20;printf(%dn,sum);(二)变量(二)变量变量定义变量定义先定义,后使用的好处:先定义,后使用的好处:1、凡未被事先定义的,系统不把它认为变量名。、凡未被事先定义的,系统不把它认为变量名。(Undefined symbol * in function main)2、每一个变量被指定为一个确定类型,在编译时、每一个变量被指定为一个确定类型,在编译时就能为其分配相应的存储单元。就能为其分配相应的存储单元。3、便于在编译时据此检查在程序中要求对该变量、便于在编译时据此检查在程序中要求对该变量进行的运算是否合法。进行的运算是否合法。 flo

9、at a,b,c; c=a%b; /Illegal use of floating point in function main (二)变量(二)变量方式:方式:1、定义变量的同时赋初值(也叫变量初始化)。、定义变量的同时赋初值(也叫变量初始化)。 格式:格式: 数据类型数据类型 变量名变量名=初值初值, 变量名变量名2=初值初值2;2、通过一个赋值语句给变量赋初值。、通过一个赋值语句给变量赋初值。 格式格式 : 变量名变量名=初值初值;变量赋初值变量赋初值出现在函数体出现在函数体的的声明声明部分部分出现在函数体出现在函数体的的执行执行部分部分int a,b=3;int a,b;b=3;(二)

10、变量(二)变量变量赋初值变量赋初值编译程序根据变量定义为其分配指定字节的内存单元.地址int a=1, b=-3,c;abc2字节2字节2字节地址地址.内存1-3随机数(二)变量(二)变量1、程序中用到的变量必须、程序中用到的变量必须“先定义(先定义(declare),后使),后使用用”。2、C语言的语言的关键字关键字不能用作变量名。不能用作变量名。3、C语言对英文字母的语言对英文字母的大小写敏感大小写敏感,即同一字母的大小,即同一字母的大小写,被认为是两个不同的字符。写,被认为是两个不同的字符。4、定义变量时,给几个变量赋相同的初值,、定义变量时,给几个变量赋相同的初值, 应写成应写成 :

11、int a=3,b=3,c=3; 不能写成不能写成: int a=b=c=3;5、给变量赋值时,正常情况下应给变量赋相同类型的数、给变量赋值时,正常情况下应给变量赋相同类型的数据。若给变量赋与其类型不同的数据时,需进行据。若给变量赋与其类型不同的数据时,需进行类型转换类型转换。关于变量以及变量赋初值的几点说明关于变量以及变量赋初值的几点说明32个关键字:个关键字:(由系统定义,不能重作其它定义由系统定义,不能重作其它定义)auto break case char constcontinue default do double elseenum extern float for gotoif i

12、nt long register returnshort signed sizeof static structswitch typedef unsigned union voidvolatile while(二)变量(二)变量6、变量定义位置:一般放在函数开头、变量定义位置:一般放在函数开头关于变量以及变量赋初值的几点说明关于变量以及变量赋初值的几点说明main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%fn”,data);变量定义可执行语句main() int a,b=2; a=1; float data; da

13、ta=(a+b)*1.2; printf(“data=%fn”,data);(二)变量(二)变量举例举例include void main() int student,age; int if=adrress=1; float score=90; stadent=2; Age=20.7; printf(%d %d %d %f,if,student,age,score);本程序中有本程序中有几处错误?几处错误?undeclared identifier( (一一) ) 整型变量整型变量( (二二) ) 整型常量整型常量( (三三) ) 存储方式存储方式整型数据整型数据3.3 3.3 整型数据整型数

14、据(1)整型变量分类及取分类及取值范围值范围类型类型比特数比特数范围范围intsigned int 16 -3276832767(215-1)unsigned int 16 065535short int signed short int 16 -3276832767(215-1)unsigned short int 16 065535long intsigned long int 32 -2147483648 2147483647unsigned long int 32 04294967295表示可以省略表示可以省略各类型整型变量各类型整型变量占用的内存字节占用的内存字节数,随系统而异。数,

15、随系统而异。3.3 3.3 整型数据整型数据(2)整型常量表示方法表示方法十进制:十进制: 123, -456, 0八进制:八进制: 0123, -0456,十六进制:十六进制: 0 x123, -0 x456以数字以数字0开头开头以以0 x开头开头分类分类基本整型(数据范围与基本整型(数据范围与int型一样)型一样)长整型长整型 (在数值后面加(在数值后面加“L(l)”, 数据范围与数据范围与long int型一样)型一样)如如123l,315L类型匹配类型匹配规则规则一个整型常量,可以赋给能容纳下其值的整型变量一个整型常量,可以赋给能容纳下其值的整型变量3.3 3.3 整型数据整型数据(3

16、)存储方式整型数据在内存中是以补码表示的。整型数据在内存中是以补码表示的。(参见教材(参见教材P41P41)编码编码正数表示方法正数表示方法负数表示方法负数表示方法原码原码最高位为符号位(最高位为符号位(0正数,正数,1负数)。其他位为此数绝对值的二进负数)。其他位为此数绝对值的二进制表示。制表示。反码反码同原码同原码最高位为符号位(最高位为符号位(1),其他位为原码表示的),其他位为原码表示的各位取反。各位取反。补码补码同原码同原码最高位为符号位(最高位为符号位(1),其他位为原码表示的),其他位为原码表示的各位取反再末位加各位取反再末位加1。3.3 3.3 整型数据整型数据(3)存储方式例

17、如:例如: 求求-10的补码表示(按的补码表示(按16位存储)。位存储)。10的原码的原码0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0各位取反各位取反1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1末位加末位加11 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0则得到则得到-10的二进制补码的表示。的二进制补码的表示。3.3 3.3 整型数据整型数据(4)整型数据的溢出整型数据的溢出(P44-(P44-例例3.3)3.3)#include void main()int a,b;a=32767;b=a+1;printf(%dn%d,a,b);32767

18、-32768运行结果运行结果改为改为214748364721474836472147483648运行结果运行结果( (一一) ) 浮点型变量浮点型变量( (二二) ) 浮点型常量浮点型常量( (三三) ) 存储方式存储方式浮点型数据浮点型数据3.4 3.4 浮点型数据浮点型数据(1 1)浮点型变量)浮点型变量分类及取分类及取值范围值范围 类型类型 比特数比特数 有效数字有效数字 数值范围数值范围 float 32 67 -10-381038 double 64 1516 -10-30810308long double 128 1819 -10-49321049323.4 3.4 浮点型数据浮点

19、型数据(2 2)浮点型常量)浮点型常量表示方法表示方法十进制小数形式:十进制小数形式: 123. 34,-0.0045, 0.0指数形式:指数形式: E(e) 如如0.23e2 ,-0.45e-3, 3.0+5数字和小数点组成数字和小数点组成关于分类关于分类实型常量不分实型常量不分float型和型和double型。一个实型。一个实型常量,可以赋给一个实型变量(型常量,可以赋给一个实型变量(float型型或或double型)型)。C语言编译系统将浮点型常量作为双精度语言编译系统将浮点型常量作为双精度来处理。来处理。注意注意: :字母e(或E)之前必须有数字,且e后面的指数必须为整数 3.4 3.

20、4 浮点型数据浮点型数据(3)存储方式指数形式指数形式(数符数符+小数部分小数部分+指数部分指数部分)小数部分占的位数越多小数部分占的位数越多,数的有效数的有效数字越多数字越多,精度越高精度越高.指数部分占的指数部分占的位数越多位数越多,表示的数值范围越大表示的数值范围越大.实型数据在内存中是按指数形式存储的。(实型数据在内存中是按指数形式存储的。(P46) .314159 1举例:举例:3.14159在内存中的存放形式为:在内存中的存放形式为:3.4 3.4 浮点型数据浮点型数据(4)浮点型数据的舍入误差#include void main() float a,b;a = 123456.78

21、9e5;b = a + 20 ;printf(%fn,b);一个浮点型变量只能保证的有效数字是一个浮点型变量只能保证的有效数字是7 7位有效数字,后面的数位有效数字,后面的数字是无意义的,并不准确地表示该数。应当避免将一个很大的数和一字是无意义的,并不准确地表示该数。应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会个很小的数直接相加或相减,否则就会“丢失丢失”小的数。小的数。( (一一) ) 字符型常量字符型常量( (二二) ) 字符型变量字符型变量( (三三) ) 存储方式存储方式字符型数据字符型数据3.4 3.4 字符型数据字符型数据(1)字符常量表示方法表示方法用单引号括起来

22、的用单引号括起来的一个字符一个字符. a A 9 = ? 不同的两个字符不同的两个字符转义字符转义字符 字符形式字符形式 含义含义 (P48) n 换行换行,从当前位置移到下一行开头从当前位置移到下一行开头 t 水平制表水平制表(跳到下一个跳到下一个tab位置位置) b 退格退格,将当前位置移到前一列将当前位置移到前一列 r 回车回车,将当前位置移到本行开头将当前位置移到本行开头 单撇号字符单撇号字符 反斜杠字符反斜杠字符 双撇号字符双撇号字符 ddd 13位位8进制数所代表的字符进制数所代表的字符 xhh 12位位16进制数所代表的字符进制数所代表的字符 语言还允许使用一种特殊形式的字符常量

23、,就是以语言还允许使用一种特殊形式的字符常量,就是以反斜杠反斜杠 开头的开头的转义字符转义字符。将将后面的字符转换后面的字符转换为另外的意义为另外的意义.即是即是一种一种控制符号控制符号.3.4 3.4 字符型数据字符型数据(1)字符常量举例举例#include void main() printf(abcbdnxyz); printf(rlmntopqn);abdlmn opq实际中,不会实际中,不会这样使用!这样使用!#include void main() printf(x4Fx4Bx21n); /* 等价于等价于printf(OK!n); */!结果:结果:结果:结果:3.4 3.4

24、字符型数据字符型数据(2)字符变量存储方式存储方式以以ASCII码存储码存储,占一个字节(占一个字节(参见教材参见教材P50)类型及范围类型及范围char 大小写英文字母大小写英文字母,数字数字,运算符运算符,标点符号等标点符号等 注意:注意:字符型数据与整型数据在存储方式字符型数据与整型数据在存储方式上的相似性使得两者之间可以通用。但字上的相似性使得两者之间可以通用。但字符型数据的表示范围是:符型数据的表示范围是:0255。举例举例字符变量字符变量ch中存放字符中存放字符a,其,其ASCII码为码为97,在内存中以二进制形式存放,其格式如下:在内存中以二进制形式存放,其格式如下:0 1 1

25、0 0 0 0 1ch例一例一例例 字符变量的字符形式输出和整数形式输出字符变量的字符形式输出和整数形式输出。 #include void main() char ch1,ch2; ch1=a; ch2=b; printf(ch1=%c,ch2=%cn,ch1,ch2); printf(ch1=%d,ch2=%dn,ch1,ch2); 一个字符型数据,既可以字符形式输出,也可以整数形式输出一个字符型数据,既可以字符形式输出,也可以整数形式输出ch1=a,ch2=bch1=97,ch2=98程序运行结果:程序运行结果:例二例二允许对字符数据进行算术运算,此时就是对它们的允许对字符数据进行算术运算

26、,此时就是对它们的ASCIIASCII码值进行算术运算码值进行算术运算例例字符数据的算术运算(参考教材字符数据的算术运算(参考教材P364的的ASCII码表)。码表)。 #include void main() char ch1,ch2; ch1=a; ch2=B; /*字母的大小写转换字母的大小写转换*/ printf(ch1=%c,ch2=%cn,ch1-32,ch2+32); /*用字符形式输出一个大于用字符形式输出一个大于256的数值的数值*/ printf(ch1+200=%dn, ch1+200); printf(ch1+200=%cn, ch1+200); printf(ch1+

27、256=%dn, ch1+256); printf(ch1+256=%cn, ch1+256); ch1=A,ch2=bch1+200=297ch1+200=)ch1+256=353ch1+256=a程序运行结果:程序运行结果:字符串常量概念概念用一对双引号用一对双引号 括起来的若干字符序列括起来的若干字符序列字符串字符串长度长度字符串中字符的个数。长度为字符串中字符的个数。长度为0的字符串的字符串(即一个字符都没有的字符串)称为空串,(即一个字符都没有的字符串)称为空串,表示为表示为 (一对紧连的双引号)。(一对紧连的双引号)。存储方式存储方式C语言规定:在存储字符串常量时,由语言规定:在存

28、储字符串常量时,由系统系统在字符串的末尾在字符串的末尾自动自动加一个加一个0作为字符串作为字符串的结束标志。的结束标志。思考?1、 字符串常量字符串常量How do you do和和Good morning的的长度分别是多少?长度分别是多少?2、 字符串字符串C:msdosv6.22和和I say: Goodbye! 在在C语语言中的字符串常量形式如何表示?言中的字符串常量形式如何表示?3、 字符串字符串CHINA在内存中的实际存储形式是怎样在内存中的实际存储形式是怎样的?占用多少个字节的内存空间?的?占用多少个字节的内存空间?14和和13C:msdosv6.22和和I say:Goodbye

29、!CHINA0占用字节占用字节而非字节而非字节内存空间内存空间注意:注意:1、a是字符,是字符, a是字符串。是字符串。2、 不能把一个字符串赋给一个字符变不能把一个字符串赋给一个字符变 量。如量。如c=a、c=Hello! 都是错误的。都是错误的。3、C语言中没有字符串变量,可以用语言中没有字符串变量,可以用字符数组字符数组来表示。来表示。 ?请看教材请看教材52页页总结:字符与字符串的区别有哪些?定界符不同:字符常量使用单引号,而字定界符不同:字符常量使用单引号,而字符串常量使用双引号;符串常量使用双引号;长度不同:字符常量的长度固定为长度不同:字符常量的长度固定为1 1,而字,而字符串常

30、量的长度,可以是符串常量的长度,可以是0 0,也可以是某个整,也可以是某个整数;数;存储要求不同:字符常量存储的是字符的存储要求不同:字符常量存储的是字符的ASCIIASCII码值,而字符串常量,除了要存储有效码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志的字符外,还要存储一个结束标志00。3.7 3.7 各类数值型数据间的混合运算各类数值型数据间的混合运算(一) 隐式转换(自动转换)(二) 显式转换(强制转换)(一)隐式转换(自动转换)转换发生条件转换发生条件v运算转换运算转换-不同类型数据混合运算时不同类型数据混合运算时v赋值转换赋值转换-把一个值赋给与其类型不同的把一个

31、值赋给与其类型不同的 变量时变量时v输出转换输出转换-输出时转换成指定的输出格式输出时转换成指定的输出格式v函数调用转换函数调用转换-实参与形参类型不一致时实参与形参类型不一致时 转换转换先转换、后运算先转换、后运算(一)隐式转换(自动转换)(一)隐式转换(自动转换)转换规则转换规则doublefloatlongunsignedintchar,short高高低低详见教材详见教材54页页 1、纵向向上的箭头表示不同类型的、纵向向上的箭头表示不同类型的 转换方向(由低类型转化为高类转换方向(由低类型转化为高类 型),不表示转换所经的步骤。型),不表示转换所经的步骤。 2、横向向左的箭头表示必须的转

32、换。、横向向左的箭头表示必须的转换。 说明说明:必定的转换必定的转换运算对象类型运算对象类型不同时转换不同时转换例 char ch; int i; float f; double d;ch/i + f*d - (f+i)intintdoubledoubledoubledoubledoubledouble10+a +i*f - d/l例 int i; float f; double d; long l;intintdoubledoubledoubledoubledoubledoubledoublefloatlongunsignedintchar,short高高低低(二)显式转换(强制转换)(二)

33、显式转换(强制转换)一般形式一般形式 (要转换成的数据类型要转换成的数据类型)(被转换的表达式被转换的表达式)注:当被转换的表达式是一个简单表达注:当被转换的表达式是一个简单表达式时,外面的一对圆括号可以缺省。式时,外面的一对圆括号可以缺省。举例举例 float x,y; x=2.3 ; y=4.5; (int)(x+y) / 6 (int) (int)x+y / 6.5 (double)说明说明强制转换得到的是所需类型的中间变量,强制转换得到的是所需类型的中间变量,原变量或表达式的类型不变。原变量或表达式的类型不变。#include void main() float x; int i; x

34、=3.6; i=(int)x; printf(x=%f,i=%d,x,i);思考:思考:以下程序的输出结果是什么?以下程序的输出结果是什么?x=3.600000,i=3程序运行结果:程序运行结果:结论:结论:较高类型较高类型向较低类型转换向较低类型转换时可能发生时可能发生精度精度损失问题损失问题3.8 3.8 算术运算符和算术表达式算术运算符和算术表达式(一)(一)C C运算符简介运算符简介(二)算术运算符和算术表达式(二)算术运算符和算术表达式(三)赋值运算符和赋值表达式(三)赋值运算符和赋值表达式(四)逗号运算符和逗号表达式(四)逗号运算符和逗号表达式(一)(一)C C运算符简介运算符简介

35、1、算术运算符算术运算符 + - * / %2、关系运算符、关系运算符 = = != 3、逻辑运算符、逻辑运算符 ! & |4、位运算符、位运算符 | &5、赋值运算符赋值运算符 =及其扩展赋值运算符及其扩展赋值运算符6、条件运算符、条件运算符 ? :7、逗号运算符、逗号运算符 ,8、指针运算符、指针运算符 * &9、求字节数运算符、求字节数运算符 sizeof10、强制类型转换运算符、强制类型转换运算符 (类型)类型)11、分量运算符、分量运算符 . 12、下标运算符、下标运算符 13、其他、其他 如函数调用运算符()如函数调用运算符()分类分类 运算符运算符 详见详

36、见55页!页!(二)算术运算符和算术表达式(二)算术运算符和算术表达式基本算术运算符基本算术运算符+ - * / %说明说明模运算符或求余运算符模运算符或求余运算符算术表达式算术表达式用算术运算符和括号将用算术运算符和括号将运算对象运算对象(也称操作数)连接起(也称操作数)连接起来的、符合来的、符合C语法规则的式子。语法规则的式子。优先级和结合性优先级和结合性先乘除、后加减,有括号先算括号。先乘除、后加减,有括号先算括号。自左至右自左至右常量、变量、函数等常量、变量、函数等说明说明如果一个运算符两侧的数据类型不同,先自动进行如果一个运算符两侧的数据类型不同,先自动进行类型转换类型转换,使二者具

37、有同一类型,然后进行运算。,使二者具有同一类型,然后进行运算。 两个整数相除的结果为整数,舍去小数部分。两个整数相除的结果为整数,舍去小数部分。当商为负数时,多采用当商为负数时,多采用“向零取整向零取整”的方法。的方法。求余运算的两侧均应为整数求余运算的两侧均应为整数 例:例:5%3=2例:例: a*b/c-1.5+a (二)算术运算符和算术表达式(二)算术运算符和算术表达式强制类型转换运强制类型转换运算符算符(类型名)(表达式)例如例如(double) 将转换成double类型(int)(x+y) 将x+y的值转换成整型(float)(5%3) 将5%3的值转换成float型举例:举例:已知

38、三角形的边长已知三角形的边长a a、b b、c c,求三角形周,求三角形周长的一半。长的一半。#include void main() float a,b,c,s; a=3;b=4;c=5; s=1/2 * (a+b+c); printf(s=%8.2f,s);s= 0.00程序运行结果:程序运行结果:?s= 6.00程序运行结果:程序运行结果:改为:改为:1.0/2 (1/2.0)或或 (float)1/2 (1/(float)2)(二)算术运算符和算术表达式(二)算术运算符和算术表达式自增、自减自增、自减运算符运算符作用:自增运算符()使单个变量的值增作用:自增运算符()使单个变量的值增1

39、; 自减运算符()使单个变量的值减自减运算符()使单个变量的值减1。例例i=3;A) j=+i;j=i+;B)j=-i+;i=i+1i=i-1? j,i A) j=4 i=4j=3 i=4B)j=-3 i=4格式:格式: 前置:前置:+i , -i (在使用(在使用i之前,使之前,使i的值加(减)的值加(减)1) 后置:后置:i+ , i- (在使用(在使用i之后,使之后,使i的值加(减)的值加(减)1)+和和-结合方向结合方向是是“自右至左自右至左”(1) 自增、自减运算是语言特有的,常用于循环语句中,使循环控自增、自减运算是语言特有的,常用于循环语句中,使循环控 制变量加(或减),以及指针

40、变量中,使指针指向下(或上)一个制变量加(或减),以及指针变量中,使指针指向下(或上)一个地址。地址。(2) 自增、自减运算符,不能用于常量和表达式。自增、自减运算符,不能用于常量和表达式。例如,例如,5+、-(a+b)等都是非法的。等都是非法的。(3) +和和-的结合方向为自右至左。的结合方向为自右至左。(4) 如果对一个变量的自增自减运算,单独构成语句,而不是作为如果对一个变量的自增自减运算,单独构成语句,而不是作为表达式的一部分时,前置和后置运算效果一样,都是使变量自加。表达式的一部分时,前置和后置运算效果一样,都是使变量自加。如如i+;和和 +i;是一样的,都是使是一样的,都是使i加。

41、加。(5) 在表达式中,连续使用同一变量进行自增或自减运算时,很容易在表达式中,连续使用同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。出错,所以最好避免这种用法。说明说明例例i=3;A) c=(i+)+(i+);B) a=i+; b=i+; c=a+b;? c, i A) c=6 i=5B) c=7 i=5两处两处i值都为值都为3例例i=3; j=4;i+j (i+)+j? i, j i=4 j=4表达式的值:表达式的值:7自左而右组合自左而右组合例例i=3; printf(“%d,%d”,i,i+)? 4, 3函数参数自右至左求值函数参数自右至左求值以上这种写法不宜提倡,

42、最好改写成 j = i+; printf(%d, %d, j,i)不要写出别人看不懂的也不知道系统会怎样执行程序( (三三) )赋值运算符和赋值表达式赋值运算符和赋值表达式赋值运算符赋值运算符简单赋值运算符:简单赋值运算符:=复合赋值运算符:复合赋值运算符:+=, -=,*=,/=,%= 简单赋值运算符的一般形式为简单赋值运算符的一般形式为: 变量变量 = 表达式表达式它的作用是将一个表达式的值赋给一个变量。它的作用是将一个表达式的值赋给一个变量。 复合赋值运算的一般格式为:复合赋值运算的一般格式为: 变量变量 双目运算符双目运算符 = 表达式表达式 复合赋值运算符复合赋值运算符 它等价于:变

43、量它等价于:变量 = 变量变量 双目运算符双目运算符 (表达式表达式)。只有当表达式。只有当表达式简化为一个变量或一个常数时,两边的括号可以省略。简化为一个变量或一个常数时,两边的括号可以省略。x = 5 y = (float)5 / 2 x += 3 y *= x + 6C语言规定的语言规定的10种复合赋值运算符如下:种复合赋值运算符如下:+=,-=,*=,/=,%=; /*复合算术运算符(复合算术运算符(5个)个)*/&=,=,|=,=;/*复合位运算符(复合位运算符(5个)个)*/( (三三) )赋值运算符和赋值表达式赋值运算符和赋值表达式例例1float a; int b;a=

44、1.2;b=a*3;? b b=3例例2a+=3;x*=y+8a=a+3;x=x*(y+8)例例3a=b=5;a=7+(b=8)? a,b a=5 ;b=5a=15;b=8自右而左自右而左的结合性的结合性类型转换类型转换转换条件:当赋值运算符两侧的数据类型不一致时转换条件:当赋值运算符两侧的数据类型不一致时转换原则:转换为被赋值变量的类型。具体见转换原则:转换为被赋值变量的类型。具体见P59。( (三三) )赋值运算符和赋值表达式赋值运算符和赋值表达式赋值表达式赋值表达式由赋值运算符将一个变量和一个表达式连接由赋值运算符将一个变量和一个表达式连接起来的式子称为起来的式子称为“赋值表达式赋值表达

45、式”。格式:格式: 赋值表达式的值:被赋变量的值赋值表达式的值:被赋变量的值“5”是一个赋值表达式是一个赋值表达式“(b=5)”是一个赋值表达式是一个赋值表达式左值左值 (lvalue) : 赋值运算符左侧的标识符赋值运算符左侧的标识符变量可以作为左值变量可以作为左值; 而表达式就不能作为左值而表达式就不能作为左值(如如a+b);常变量也不能作为左值。常变量也不能作为左值。 右值右值 (lvalue) :出现在赋值运算符出现在赋值运算符右侧的表达式右侧的表达式 ; 左值也可以出现在赋值运算符左值也可以出现在赋值运算符右侧,因而左值都可以作为右值。右侧,因而左值都可以作为右值。( (三三) )赋

46、值运算符和赋值表达式赋值运算符和赋值表达式赋值表达式赋值表达式对赋值表达式求解的过程是:对赋值表达式求解的过程是: 求赋值运算符右侧的求赋值运算符右侧的“表达式表达式”的值的值; 赋给赋值运算符左侧的变量。赋给赋值运算符左侧的变量。例如例如: 赋值表达式赋值表达式“=3*5”的值为的值为15,执行表达式,执行表达式后,变量后,变量a的值也是的值也是15。 注意注意: 一个表达式应一个表达式应该有一个值该有一个值 a=b=c=5;a=5+(c+6);a=(b=4)+(c=6);a=(b=10)/(c=2);(a=3*5)=4*3;a+=a-=a*a;printf(%d,a=b);在一个语句中完成

47、在一个语句中完成了赋值和输出双重了赋值和输出双重功能。功能。( (四四) )逗号运算符和逗号表达式逗号运算符和逗号表达式逗号运算符逗号运算符,逗号表达式逗号表达式扩展扩展表达式表达式1,表达式,表达式2, ,表达式,表达式n说明说明1、逗号表达式的求解过程为自左至右,依次、逗号表达式的求解过程为自左至右,依次计算各表达式的值,最后一个表达式的值即为计算各表达式的值,最后一个表达式的值即为整个逗号表达式的值;整个逗号表达式的值;2、逗号运算符的优先级最低。、逗号运算符的优先级最低。3、使用逗号表达式的目的通常是想分别得到、使用逗号表达式的目的通常是想分别得到各个表达式的值,而并非一定要得到整个表

48、达各个表达式的值,而并非一定要得到整个表达式的值。式的值。4、常用于、常用于for循环语句中,循环语句中,除此以外很少使用除此以外很少使用。逗号表达式逗号表达式表达式表达式1,表达式,表达式2( (四四) )逗号运算符和逗号表达式逗号运算符和逗号表达式例例1a=3a=(3*5,a*4)? a a=12例例2a=3a=3*5,a*4? a a=15表达式的值为表达式的值为60例例3(a=3*5,a*4),),a+5? a a=15表达式的值为表达式的值为20( (四四) )逗号运算符和逗号表达式逗号运算符和逗号表达式注意注意: :并不是任何地方出现的逗号都是作为逗号运算符。例如函数参数也是用逗号来间隔的。 如如: printf(“%d,%d,%d”,a,b,c);“,”并不是一个逗号表达式,它是printf函数的3个参数printf(“%d,%d,%d”,(a,b,c),b,c) “(,)”是一个逗号表达式,它的值等于的值。 作业作业P66 3.3-3.8 作业作业P67 3.9-3.12


文档来源:https://www.renrendoc.com/paper/212519739.html

文档标签:

下载地址