C语言经典教程2讲(03-01).ppt

上传人:s****8 文档编号:82790300 上传时间:2023-03-26 格式:PPT 页数:70 大小:294.50KB
返回 下载 相关 举报
C语言经典教程2讲(03-01).ppt_第1页
第1页 / 共70页
C语言经典教程2讲(03-01).ppt_第2页
第2页 / 共70页
点击查看更多>>
资源描述

《C语言经典教程2讲(03-01).ppt》由会员分享,可在线阅读,更多相关《C语言经典教程2讲(03-01).ppt(70页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第2讲讲第第3章:数据类型、运算符与表达式章:数据类型、运算符与表达式要点要点nC的几种基本数据类型的几种基本数据类型n常量与变量的概念常量与变量的概念n整型、实型、字符型数据整型、实型、字符型数据n变量赋初值变量赋初值n各类数值数据之间的混合运算各类数值数据之间的混合运算n基本运算符和表达式基本运算符和表达式1/2/20232一、一、C的数据类型的数据类型 程序程序=数据结构数据结构+算法算法nC语言中,数据结构以语言中,数据结构以数据类型数据类型的形式出现的形式出现 int a,b,sum;/*定义变量定义变量*/float x,y;n所谓数据类型是按被说明量的性质,表示形式,所谓数据类

2、型是按被说明量的性质,表示形式,占据存储空间的多少,构造特点来划分的。占据存储空间的多少,构造特点来划分的。1/2/20233n在语言中,数据类型可分为:在语言中,数据类型可分为:类型类型类型类型基本类型基本类型基本类型基本类型 构造类型构造类型构造类型构造类型指针类型指针类型指针类型指针类型空类型空类型空类型空类型整型整型整型整型实型实型实型实型枚举型枚举型枚举型枚举型字符型字符型字符型字符型数组类型数组类型数组类型数组类型结构体类型结构体类型结构体类型结构体类型共用体类型共用体类型共用体类型共用体类型双精度双精度双精度双精度单精度单精度单精度单精度1/2/20234二、常量与变量二、常量与

3、变量n常量:常量:在程序执行过程中,其值不发生改变的量在程序执行过程中,其值不发生改变的量 如如1212,-3-3,8.08.0,1.2e-31.2e-3,aa,MM等。等。错误:错误:12=512=5,12=n 12=n 不能被赋值不能被赋值u符号常量符号常量:C C允许用一个标识符代表一个常量。即符号允许用一个标识符代表一个常量。即符号常量,一般使用大写英文字母表示。常量,一般使用大写英文字母表示。#define#define#define#define 标识符标识符标识符标识符 常量常量常量常量 如:如:#define PRICE 30定义之后,系统就认为定义之后,系统就认为PRICE它

4、的值为它的值为30;按数据按数据取值是否可改变取值是否可改变分为常量和变量分为常量和变量1/2/20235#define PRICE 30main()int num,total;num=10;total=num*PRICE;printf(total=%d,total);输出输出 total=300 若程序中若程序中PRICEPRICE改变为改变为35 35,#define PRICE 35#define PRICE 35提高程序的可读性及常量修改的一致性提高程序的可读性及常量修改的一致性PRICE=20;1/2/20236变量变量3p变量名变量名变量值变量值int变量类型变量类型变量变量:在程

5、序执行过程中,取值可变的量,可在程序执行过程中,取值可变的量,可以多次被赋值。以多次被赋值。如如 int p;int p;p=3 p=3;p=p+1;p=p+1;1/2/20237n变量名(命名规则变量名(命名规则-标识符)标识符)n变量的类型(整型、实型、字符型等)变量的类型(整型、实型、字符型等)n变量要先定义后使用变量要先定义后使用 定义时,系统给变量分配内存,定义时,系统给变量分配内存,变量名变量名是一是一个符号地址;系统根据个符号地址;系统根据变量的类型变量的类型,分配不等的,分配不等的内存空间。如:内存空间。如:int-2个字节,个字节,float-4个字节个字节n变量的值变量的值

6、变量中存放的数据是变量中存放的数据是变量的值变量的值ax23.51/2/20238n标识符有如下规定:1)c中的标识符是由中的标识符是由字母、数字、下划线字母、数字、下划线组成,组成,且第一且第一个字符不能是数字个字符不能是数字。如:如:sum、_size、data_38;错误:错误:3D64、$123、M.D.JOHN。注意:注意:sum不同于不同于SUM(区分大小写),一般变量名区分大小写),一般变量名用小写字母。用小写字母。2)不同)不同C版本对版本对标识符的长度标识符的长度要求不同,要求不同,Turbo C允允许许32个字符,建议变量名的长度不要超过个字符,建议变量名的长度不要超过8个

7、字符。个字符。3)C语言中有语言中有32个关键字和个关键字和12个预处理命令,不允许个预处理命令,不允许用户再次定义。用户再次定义。4)尽量做到)尽量做到见名知义见名知义,增加程序的可读性。,增加程序的可读性。如:如:name day total,表示数值的表示数值的 a b x1 y2 i j1/2/20239n对变量的值的操作对变量的值的操作赋值赋值:变量相当于一个容器,可以存储数据。:变量相当于一个容器,可以存储数据。float m;/*实型的变量实型的变量*/先定义先定义 m=3.2;/*实型的数据实型的数据*/赋值赋值取值:取值:从变量中取值,实际上是通过变量名找到相从变量中取值,实

8、际上是通过变量名找到相应的内存单元,从中读取变量的值。应的内存单元,从中读取变量的值。n=m*2;/*第第1次取值次取值*/后使用后使用 p=m+3;/*第第2次取值次取值*/多次取值,值不变。多次取值,值不变。1/2/202310v与数据类型结合起来分类。与数据类型结合起来分类。可分为:可分为:整型常量、整型变量,整型常量、整型变量,实型常量、实型变量,实型常量、实型变量,字符常量、字符变量字符常量、字符变量 字符串常量字符串常量1/2/202311整型常量整型常量(整常数)整常数)1、C语言中,有三种表示形式三种表示形式:十进制十进制(数码取值:(数码取值:09)如:如:0,123,-81

9、。八进制八进制(以开头,数码取值:(以开头,数码取值:07)如:如:0123(十进制的十进制的83),011(十进制为(十进制为 9),),0177777(十进制为(十进制为65535)。)。十十六六进进制制(以以0 x或或0X开开头头,数数码码取取值值:0F或或0f)。)。如:如:0 x2a(十进制为十进制为42),0XA0(十进制为十进制为160),0XFFFF(十进制为十进制为65535)。v在程序中是根据前缀来区分各种进制数的在程序中是根据前缀来区分各种进制数的v一般,不用一般,不用8进制和进制和16进制表示负整数进制表示负整数判断以下常量是否合法?判断以下常量是否合法?023、23D

10、、029、5A1/2/2023122、整数在内存中的存放形式存放形式-二进制补码二进制补码0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 010-101 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0整数在内存中所占的字节数,取决于计算机系整数在内存中所占的字节数,取决于计算机系统中的统中的机器字长机器字长。一般以一个机器字。一般以一个机器字(WORD)存存放一个放一个int 数据。在微机中,数据。在微机中,一个整数以一个整数以2 2个字节个字节(16bit)(16bit)存储。存储。因此,整型常数是有因此,整型常数是有取值范围取值范围的。的。(-32768-32768

11、+32767+32767)1010,(0 001777770177777)8 8,(,(0 x00 x00 xFFFF0 xFFFF)16161/2/202313如果使用的整数如果使用的整数超过了上述范围超过了上述范围,怎么办?,怎么办?v必须用必须用长整型数(长整型数(加后缀加后缀“L”L”或或“l”l”)来表示。来表示。如如 158L,0200000L,0X15L(十进制为十进制为21)v说明:说明:158L和和158 在数值上并无区别在数值上并无区别v十进制长整数的取值范围:十进制长整数的取值范围:(-2147483648 2147483647)10数据类型数据类型占存储空间占存储空间1

12、58L长整型长整型4字节字节158整型整型2字节字节1/2/2023140 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 符号位 intunsigned int 代表数据 的第一位=32767=65535无符号数:整型常数加后缀整型常数加后缀“U”U”或或“u”u”。例如:例如:358u,235Lu 358u,235Lu。v 无符号数所占内存的字节数有符号数相同无符号数所占内存的字节数有符号数相同v 由于省去了符号位,能表示的整数范围不同由于省去了符号位,能表示的整数范围不同v 十进制无符号整常数的范围为十进制无符号整

13、常数的范围为0655351/2/202315整型整型变量变量1、整型变量的分类符号 类型分配字节数 取值范围有符号intshortlong-3276832767(-215(215-1)-3276832767-21474836482147483647(-231(231-1)无符号unsignedunsigned shortunsigned long065535 (0(216-1)06553504294967295(0(232-1)1/2/2023162、整型变量的定义、运算定义、运算v 变量说明的一般形式:类型说明符类型说明符类型说明符类型说明符 变量名标识符,变量名标识符,变量名标识符,变量名

14、标识符,变量名标识符,变量名标识符,变量名标识符,变量名标识符,.;.;.;.;例如:int a;int a;long x,y;long x,y;unsigned p,q;unsigned p,q;v整型变量的运算1/2/202317v不同种类的整型数据可以进行数学运算不同种类的整型数据可以进行数学运算main()int a,b,c,d;/*整型整型*/unsigned u;/*无符号整型变量无符号整型变量*/a=12;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%d”,c,d);运行结果:运行结果:a+u=22,b+u=-141/2/2023183、整

15、型量的溢出、整型量的溢出 若一个变量无法容纳下要存入的数,这种现象若一个变量无法容纳下要存入的数,这种现象称为溢出,溢出将导致数据存储错误;称为溢出,溢出将导致数据存储错误;在运算过程中也有可能产生溢出导致运算结果在运算过程中也有可能产生溢出导致运算结果错,因此程序设计中应避免产生溢出。错,因此程序设计中应避免产生溢出。例:例:int a,b1,b;/*int 范围范围-32768 32767*/a=65538;b1=32767;b=b1+1;/*=32768*/printf(a=%d,b=%d,a,b);输出输出 a=2,b=-32768 (溢出的错误结果溢出的错误结果)1/2/202319

16、溢出原因:溢出原因:1)a=65538;65538=(1 0000 0000 0000 0010)2 a:只存入后只存入后16位位2)b=32768;32768=(1000 0000 0000 0000)2 b:-32768的补码的补码 0000 0000 0000 00101000 0000 0000 00001/2/202320解决办法:解决办法:long a,b1,b;a=65538;b1=32767;b=b1+1;printf(a=%ld,b=%ld,a,b);a=65538,b=32768 (正确正确)1/2/202321实型实型常量(浮点型常量)常量(浮点型常量)1 1、c语言中的

17、实数有两种表示两种表示形式:n十进制小数形式十进制小数形式 由数字由数字09和小数点组成。和小数点组成。例如:例如:.123、123.、123.0、0.0(必须有小数点必须有小数点)n 指数形式指数形式 由尾数部分,字母由尾数部分,字母e或或E和指数部分组成。和指数部分组成。例如:例如:123e3、0.15E-2。指数形式注意指数形式注意:1)字字母母e或或E之之前前必必须须有有数数字字,e后后面面的的指指数数必必须须为为整数。整数。如:如:e3、2.1e3.5、53.-E3都是都是不合法不合法的指数形式。的指数形式。2)规范化的指数形式)规范化的指数形式 如:如:2.34e2、3.099E5

18、、1/2/202322实型变量实型变量1 1、在内存中的存放形式、在内存中的存放形式:n实型数据在内存,按指数形式存储,即把数据分成实型数据在内存,按指数形式存储,即把数据分成小数部分和指数部分,分别存放。小数部分和指数部分,分别存放。n如如 3.14159+.314159 1数符 小数部分 指数2、实型变量的分类分类:类型名称类型名称存储位数存储位数 数值范围数值范围有效位数有效位数单精度单精度(float)32 bit(4字节)字节)3.4(10371038)7位位双精度双精度(double)64 bit(8字节)字节)1.7(1030710308)16位位1/2/2023233、实型变量

19、定义定义 float x;double a,b;4、实型量的舍入误差由于实型变量占有限的存储单元,提供有限的有由于实型变量占有限的存储单元,提供有限的有效数字。由此可能会产生一些误差。效数字。由此可能会产生一些误差。例:例:/*赋值产生误差赋值产生误差*/float a,b;a=123456.789e5;b=a+20;printf(%f,b);输出输出12345678848.000000float a;a=111111.111;printf(“i=%f”,i);输出输出 111111.109375;原因原因-float 只能接收只能接收7位有效数字,位有效数字,后面的数字无意义)后面的数字无意

20、义)1/2/202324字符常量字符常量1、字符常量是用单引号括起来的一个一个字符。如如A、aa、?、3、=等等n字符常量只能是字符常量只能是单个字符单个字符,错误错误ababn5和和5 是不同的。是不同的。5是字符常量。是字符常量。nA、a是是不同的字符常量。不同的字符常量。2 2、转义字符,、转义字符,语言还允许用一种特殊形式的字语言还允许用一种特殊形式的字 符常量。符常量。如如 printf(“%d%dn”,a,b)其中,其中,n 代表一个代表一个“换行换行”符,是一种符,是一种“控控制字符制字符”1/2/202325n转义字符:表示将反斜杠表示将反斜杠后面的字符转换成后面的字符转换成另

21、外的意义另外的意义转义字符转义字符 含义含义 ASCII码码n 换行(将当前位置移到下一行开头)换行(将当前位置移到下一行开头)10t 水平制表(跳到下一个水平制表(跳到下一个tab位置)位置)9b 左退一格(将当前位置移到前一列)左退一格(将当前位置移到前一列)8r 回车不换行(将当前位置移到本行开头)回车不换行(将当前位置移到本行开头)13 f 换页(将当前位置移到下页开头)换页(将当前位置移到下页开头)12 反斜杠字符反斜杠字符 92 单引号字符单引号字符 39“双引号字符双引号字符 34ddd 1到到3位位8进制数所代表的字符进制数所代表的字符xhh 1到到2位位16进制数所代表的字符

22、进制数所代表的字符 1/2/202326nddd和和xhh分别是用八进制和十六进制的分别是用八进制和十六进制的ASCIIASCII码表示一个码表示一个字符。字符。如如 101(ASCII码为码为65)表示字符)表示字符A x41表示字符表示字符A 012(ASCII码为码为10)表示)表示n(换行符)换行符)X0A表示换行表示换行例:转义字符的使用例:转义字符的使用nvoid main()int a,b,c;a=5;b=6;c=7;printf(“%dnt%d%dn”,a,b,c);printf(“c:filedata”);5 6 7c:filedata1/2/202327字符变量字符变量1

23、1、字符变量的定义:、字符变量的定义:char c1,c2;c1=a;c2=n;2 2、字符变量的存储形式、字符变量的存储形式:n字符量占字符量占1 1个字节个字节的存储空间,在存储单元中存放的存储空间,在存储单元中存放 的不是字符本身,而是字符对应的的不是字符本身,而是字符对应的ASCII码码。n如存储如存储a的实际单元值是的实际单元值是97,存放,存放0的实的实际单元际单元 值是值是48。97a48001100001001100001/2/2023283 3、字符量的运算、字符量的运算-字符量与整型量字符量与整型量n字符数据以字符数据以ASCII码存储(与整数的存储方式码存储(与整数的存储

24、方式类似)类似)n因此字符数据与整型数据之间转换非常方便。因此字符数据与整型数据之间转换非常方便。1)一个字符既可以以字符或者整数形式输出)一个字符既可以以字符或者整数形式输出2)字符数据与整型数据可以相互赋值)字符数据与整型数据可以相互赋值 (注意:注意:ASCII码码的范围是的范围是0255)3)字符可以像整数一样参加数值运算。)字符可以像整数一样参加数值运算。1/2/202329例例1 字符变量以字符形式和整数形式输出字符变量以字符形式和整数形式输出 main()char ch1,ch2;ch1=a;ch2=b;printf(“ch1=%c,ch2=%cn”,ch1,ch2);print

25、f(“ch1=%d,ch2=%dn”,ch1,ch2);程序运行结果:程序运行结果:ch1=a,ch2=b ch1=97,ch2=981/2/202330例例2字符数据参与算术运算。字符数据参与算术运算。/*字母的大小写转换字母的大小写转换*/main()char ch1,ch2;ch1=97;ch2=B;printf(“ch1=%cn”,ch1-32);printf(“ch2=%dn”,ch2+32);运行结果运行结果 ch1=A ch2=981/2/202331字符串常量字符串常量字符串常量是用双引号括起来的零个或多个字符序字符串常量是用双引号括起来的零个或多个字符序列。列。如:如:“Ho

26、w do you do.”、”a”,”$123.45”,”。na与与“a”有什么不同呢?有什么不同呢?nC规定:每一个字符串的规定:每一个字符串的结尾都加一个结尾都加一个00字符字符,作,作为为字符串的结束标志。即字符串的结束标志。即a与与“a”的的长度是不同的,长度是不同的,在内在内存中的存储是不同的:存中的存储是不同的:a a 0 a“a”1 1个字符个字符 2 2个字符个字符1/2/202332v字符串字符串“How do you do.”n在内存中的存储,其长度为在内存中的存储,其长度为1515。n最后一个字符最后一个字符0,是字符串结束的标志,是系统自,是字符串结束的标志,是系统自动

27、加上的。动加上的。n字符字符0是一个是一个ASCII码为码为0的的“空操作字符空操作字符”。即它不。即它不引起任何的控制动作,也不可显示。引起任何的控制动作,也不可显示。如果要输出字符串如果要输出字符串 “How do you do.”printf(“How do you do.”);H ow do you do.01/2/202333变量赋初值变量赋初值n先定义后赋初值先定义后赋初值 float x;int m,n;int m,n;x=5.6;m=3;n=3;m=n=3;n定义时赋初值定义时赋初值 float x=5.6;int m=3,n=3;char c1,c2=a;int a=13,b

28、=5;int m=n=3;错误错误 v不允许在说明语句时,连续赋初值。不允许在说明语句时,连续赋初值。1/2/202334三、各类数值间的混合运算三、各类数值间的混合运算整型、实型、字符型数据可以混合运算:整型、实型、字符型数据可以混合运算:如如 10+a+1.5-875.21*bn运算规则:不同类型的数据先转换成同一类型,运算规则:不同类型的数据先转换成同一类型,再进行运算。再进行运算。1/2/202335例:例:int i;float f;double d;long e;10+a+i*f-d/e;计算机执行运算的步骤:计算机执行运算的步骤:1)10+a:先将先将a转换成整数转换成整数97,

29、运算结果运算结果1072)i*f:先将先将i与与f都转换成都转换成double型,运算结果为型,运算结果为double型型3)整数整数 107+i*f:先将先将107转换成转换成double型(型(107.000.00),结果为,结果为double型。型。4)d/e:先将先将e转换成转换成double型,运算结果为型,运算结果为double型型5)第)第3步得到的步得到的double型型减去第减去第4步得到的步得到的double型,型,结果为结果为double型型以上的类型转换是由系统自动完成的。以上的类型转换是由系统自动完成的。1/2/202336小小 结结n常量常量整型、实型、字符型常量;

30、字符串常量;整型、实型、字符型常量;字符串常量;符号常量(先定义后使用)符号常量(先定义后使用)n变量变量变量名(标识符);整型、实型、字符变量名(标识符);整型、实型、字符型变量;变量(先定义后使用)型变量;变量(先定义后使用)n掌握不同类型数据的定义与存储特点,数据间掌握不同类型数据的定义与存储特点,数据间的关系的关系n掌握变量赋初值的方法掌握变量赋初值的方法n掌握不同数据类型间的混合运算规则掌握不同数据类型间的混合运算规则1/2/202337 基本运算符和表达式基本运算符和表达式 C C语言中有丰富的运算符和表达式,使语言中有丰富的运算符和表达式,使C C语言语言的功能十分完善。的功能十

31、分完善。v C C语言的运算符的特点:语言的运算符的特点:n不同的不同的优先级优先级-共分为共分为15级级 1级最高,级最高,15级最低。级最低。n不同的不同的结合性结合性-分为左结合性和右结合性分为左结合性和右结合性 这种结合性是其它高级语言的运算符所没有的,这种结合性是其它高级语言的运算符所没有的,因此也增加了因此也增加了C C语言的复杂性。语言的复杂性。1/2/202338v 表达式中,运算的先后顺序:表达式中,运算的先后顺序:要遵守运算符要遵守运算符优先级别的规定优先级别的规定受运算符受运算符结合性的制约结合性的制约 优先级较高的先进行运算;优先级相同时,按运优先级较高的先进行运算;优

32、先级相同时,按运算符的结合方向处理算符的结合方向处理例如:例如:1 1)算术运算符的结合性是自左至右,即先左后右。)算术运算符的结合性是自左至右,即先左后右。表达式表达式 x-y+zx-y+z:先先执行执行x-yx-y运算;然后执行运算;然后执行+z+z的运算。的运算。2 2)赋值运算符)赋值运算符“=”是最典型的右结合性运算符。是最典型的右结合性运算符。表达式表达式 x=y=zx=y=z:先执行先执行y=zy=z,再执行再执行x=(y=z)x=(y=z)运算。运算。在学习过程中,要注意区别,避免理解错误。在学习过程中,要注意区别,避免理解错误。1/2/202339n本节先介绍以下本节先介绍以

33、下八八类运算符:类运算符:算术运算符算术运算符(+、-、*、/、%、)、)自自加自减运算符加自减运算符(+、-)赋值运算符赋值运算符(=,+=+=、-=-=、*=、/=/=、%=%=)关系运算符关系运算符(、=、=、!=!=)逻辑运算符逻辑运算符(&、|、!,3 3种)种)强制转换运算符强制转换运算符(数据类型)(数据类型)条件运算符条件运算符(?(?:)逗号运算符逗号运算符(,)1/2/202340一、算术运算符一、算术运算符运算符运算符含义含义 运算对象个数运算对象个数 优先级优先级 结合方向结合方向*/%乘法乘法除法除法求余求余2 2(双目)(双目)3 3自左至右自左至右+-加法加法减法

34、减法4 41 1)%要求两侧均为整型数据要求两侧均为整型数据 5%2=1,1%10=1,5.5%2 错误错误2 2)两个整数进行两个整数进行 +-*/+-*/运算,运算,结果是整数结果是整数。若参加运。若参加运算的其中一个数是实数,算的其中一个数是实数,结果为结果为double型实数型实数。5/3=1,-5/3=-1,5/3.0=1.6666673 3)“-”-”也可作为也可作为“负号负号”,此时为,此时为单目单目运算符运算符,优先级优先级为为2 2,右结合性,右结合性1/2/202341作用是使变量的值增作用是使变量的值增1或减或减1 +i,-i (+i,-i (先执行先执行i+1i+1或或

35、i-1i-1,再使用再使用i i值)值)i+,i-(i+,i-(先使用先使用i i值值,再执行再执行i+1i+1或或i-1i-1)二、自增、自减运算符二、自增、自减运算符 +-+-运算符运算符含义含义 运算对象个数运算对象个数 优先级优先级 结合方向结合方向+-自增自增自减自减1 1(单目)(单目)2 2自右至左自右至左 i=2;i=2;j=i+;j=+i;j的值为的值为2 j的值为的值为3 i的值为的值为3 i的值为的值为31/2/202342例例1:int i=3;printf(“%d”,i+);输出输出3(i的值为的值为4)int i=3;printf(“%d”,+i);输出输出4(i的

36、值为的值为4)例例2:int i=8;printf(“%d”,i+*2);输出输出16(i的值为的值为9)int i=8;printf(“%d”,+i*2);输出输出18(i的值为的值为9)1/2/2023431 1)+,-运算符只能用于变量,不能用于常量和表达式运算符只能用于变量,不能用于常量和表达式 如如5+5+,(a+ba+b)-,(-i)+(-i)+都是不合法的都是不合法的2 2)+,-运算符的结合方向是自右至左。运算符的结合方向是自右至左。3 3)表达式)表达式i+j 应理解为应理解为(i+)+j C C编译系统在处理时,尽可能多地编译系统在处理时,尽可能多地(自左而右自左而右)将若

37、干个将若干个字符组成一个运算符。字符组成一个运算符。4 4)当出现在函数实参中,如)当出现在函数实参中,如 printf(“%d,%d”,i,i+);求求值顺序从右而左。值顺序从右而左。i=3时,输出时,输出4,3应该书写成:应该书写成:i=3;j=i+;printf(“%d,%d”,j,i);1/2/202344三、赋值运算符三、赋值运算符n n结合方向:结合方向:结合方向:结合方向:自右向左自右向左自右向左自右向左n n优先级:优先级:优先级:优先级:14141414简单赋值运算符简单赋值运算符 =变量标识符变量标识符变量标识符变量标识符 =表达式表达式表达式表达式作用:将一个数据(常量作

38、用:将一个数据(常量/表达式)赋给一个变量表达式)赋给一个变量 如如 a=3;d=func();c=a+b;复合赋值运算符复合赋值运算符 +=-=*=/=%=+=-=*=/=%=a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%31/2/202345复合赋值符这种写法,十分有利于编译处理,能提高复合赋值符这种写法,十分有利于编译处理,能提高编译效率并产生质量较高的目标代码。编译效率并产生质量较高的目标代码。n 赋值表达式赋值表达式表达式:表达式:表达式:表达式:用运算符和括号将操作数连接起来,符合用运算符和括号将操作数连接起来,符合c语语法规则的式子,称为表达式。法规则的式子,称

39、为表达式。如算术表达式如算术表达式 a*b/c+1.2-6%4,(a-b)*c,p+表达式的值表达式的值表达式的值表达式的值 (注意:表达式代表的是一个数值注意:表达式代表的是一个数值)如如 a=5(表达式的值为(表达式的值为5,a的值为的值为5)printf(“%d”,b=a);输出输出5 赋值表达式赋值表达式赋值表达式赋值表达式-“自右向左自右向左自右向左自右向左”结合结合结合结合 赋值表达式赋值表达式 i=5,c=a+3,a=b=5 相当于相当于 a=(b=5)1/2/202346vv赋值表达式可以包含赋值表达式赋值表达式可以包含赋值表达式赋值表达式可以包含赋值表达式赋值表达式可以包含赋

40、值表达式 a=5+(c=6)表达式的值为表达式的值为11,a的值为的值为11,c的值为的值为6vv赋值表达式也可以包含复合的赋值表达式赋值表达式也可以包含复合的赋值表达式赋值表达式也可以包含复合的赋值表达式赋值表达式也可以包含复合的赋值表达式赋值表达式赋值表达式赋值表达式赋值表达式 a+=a-=a*a (a=12)求解过程:求解过程:n先进行先进行a-=a*a的运算的运算 相当于相当于a=a-a*a=12-144=-132n再进行再进行a+=-132的运算的运算 相当于相当于a=a+(-132)=-132-132 =-2641/2/202347赋值运算时的数据类型转换赋值运算时的数据类型转换原

41、则:原则:1)被赋值变量的类型与表达式值的类型一致,直接)被赋值变量的类型与表达式值的类型一致,直接赋值赋值2)不一致,系统自动)不一致,系统自动以被赋值变量的类型为准以被赋值变量的类型为准进行进行转换,然后赋值。转换,然后赋值。例:例:int i=10,j,k;float f;double d;i=i-5;/*5i*/j=i+3.56;/*8 j*/k=a;/*97 k*/f=23;/*单精度单精度23.0 f*/d=j+f;/*双精度双精度31.0 d*/1/2/2023483 3)具体规定如下:)具体规定如下:1.1.实型赋予整型时,舍去小数部分。实型赋予整型时,舍去小数部分。2.2.整

42、型赋予实型时,数值不变,但将以浮点形式整型赋予实型时,数值不变,但将以浮点形式存放,存放,即增加小数部分即增加小数部分(小数部分的值为小数部分的值为0)0)。3.3.字符型赋予整型,由于字符型为一个字节,字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的而整型为二个字节,故将字符的ASCIIASCII码值放到整型码值放到整型量的低八位中,高八位为量的低八位中,高八位为0 0。4.4.整型赋予字符型整型赋予字符型,只把低八位赋予字符量。,只把低八位赋予字符量。总之总之,字节少的数赋给字节多的变量时,高位自动,字节少的数赋给字节多的变量时,高位自动进行符号扩展;字节多的数赋给字节少

43、的变量时,进行符号扩展;字节多的数赋给字节少的变量时,高字节将被丢掉高字节将被丢掉1/2/2023491.关系运算符关系运算符 (比较运算符比较运算符)六个六个:小于小于 大于大于 =大于或等于大于或等于 =等于等于 !=不等于不等于 6级、双目、自左而右级、双目、自左而右7级、双目、自左而右级、双目、自左而右四、关系运算符四、关系运算符和关系表达式和关系表达式1/2/2023502.关系表达式关系表达式用关系运算符把两个表达式连接起来的式子用关系运算符把两个表达式连接起来的式子 如:如:x3/2,a+1c,-i-5*j=k+1 一般形式:一般形式:表达式表达式1、2的形式:的形式:算术、赋值

44、、逗号、关系等任算术、赋值、逗号、关系等任 何何C合法的表达式。合法的表达式。关系表达式的值:关系表达式的值:逻辑值真、假逻辑值真、假 真真对应关系式成立,用整型量对应关系式成立,用整型量1代表;代表;假假对应关系式不成立,用整型量对应关系式不成立,用整型量0代表;代表;1/2/202351举例:说明下列关系式的含义举例:说明下列关系式的含义1)isqrt(c)3)a%2=0例例另外,注意区分另外,注意区分“=”与与“=”int a=6,b,c;c=b=a;a=b=c;a的值为的值为11/2/202352举例:写出下列表达式的值举例:写出下列表达式的值若有定义:若有定义:int a=3,b=2

45、,c=1;char ch1=a;1)b+c!=a 2)ch1b)(bbbb=c7)f=abc 0 1 0 1 1 1 01/2/202353五、逻辑运算符和逻辑表达式五、逻辑运算符和逻辑表达式三种逻辑运算符三种逻辑运算符&|!名称名称符号符号优先级优先级结合方向结合方向与与&11自左向右自左向右双目双目或或|12双目双目非非!2自右向左自右向左单目单目1/2/202354逻辑运算的真值表逻辑运算的真值表逻辑运算的值也为逻辑运算的值也为“真真”和和“假假”两种,用两种,用1和和0表表示示ab!a!ba&ba|b真真真真假假假假真真假假真真假假假假假假真真真真假假真真假假真真真真假假假假假假真真真

46、真真真假假如如 5 5和和3 3均为非均为非“0”0”,5&35&3的值为的值为“真真”,即为,即为1 1 5|0 5|0的值为的值为“真真”,即为,即为1 11/2/202355逻辑表达式逻辑表达式一般形式:一般形式:双目:双目:单目:单目:!表达式表达式1 表达式表达式1、2:任何任何C合法的表达式。合法的表达式。逻辑表达式的值:逻辑表达式的值:逻辑值真、假逻辑值真、假 真真条件成立,用整型量条件成立,用整型量1代表;代表;假假条件不成立,用整型量条件不成立,用整型量0代表;代表;逻辑运算对象:逻辑运算对象:0被视为逻辑量被视为逻辑量“假假”;非非0被视为逻辑量被视为逻辑量“真真”。1/2

47、/202356例例1:a=3,b=4,c=5,下列逻辑表达式的值下列逻辑表达式的值na+bc&b=c 1&0 为为0 n!(a+b)+c-1&b+c/2 0+5-1&4+2 为为1说明说明:C在逻辑表达式求解时,并不一定是所有的在逻辑表达式求解时,并不一定是所有的运算都被执行,当刚开始求解或求解的中途就可运算都被执行,当刚开始求解或求解的中途就可以确定整个逻辑表达式的值时,其余的运算将不以确定整个逻辑表达式的值时,其余的运算将不再进行。再进行。例:例:a&b&c例:例:a|b|c1/2/202357例例2:将所给条件写成:将所给条件写成C的逻辑表达式的逻辑表达式1)1a 8 并且并且 1 b

48、102)a和和b都是正的或都是负的都是正的或都是负的(a、b符号相同符号相同)3)a和和b之一为之一为0,但不能都为,但不能都为04)a能被能被5或或7整除整除(a=1&a=1&b0&b0)|(a0&b0(a*b=0)&(a+b!=0)(a%5=0)|(a%7=0)1/2/202358六、强制类型转换运算符六、强制类型转换运算符n(类型)(表达式)(类型)(表达式)优先级优先级2 2 自右至左自右至左n将一个表达式转换成所需的类型将一个表达式转换成所需的类型 如如:(int)(x+y),(int)x+y,(double)(3/2)n说明:强制转换得到所需类型的中间变量,说明:强制转换得到所需类

49、型的中间变量,原变原变量类型不变量类型不变。main()float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);输出:输出:x=3.600000,i=31/2/202359总结:数据类型之间的转换总结:数据类型之间的转换n隐式转换(隐式转换(什么情况下发生?什么情况下发生?什么情况下发生?什么情况下发生?)运算转换运算转换-不同类型数据混合运算时不同类型数据混合运算时;int a=3,b;b=a+5.6;赋值转换赋值转换-把一个值赋给与其类型不同的变量把一个值赋给与其类型不同的变量时时;int a;a=5.6;n显式转换显式转换强制转换强制转换

50、 (float)a/2,(int)m%31/2/202360七、条件运算符(?七、条件运算符(?:)结合方向结合方向:自右而左自右而左自右而左自右而左优先级优先级:13 13 级级级级类型:三目类型:三目条件表达式一般形式条件表达式一般形式:?:其中:其中:各个表达式可以是任何形式的表达式。各个表达式可以是任何形式的表达式。求解过程求解过程:如:如:ab?a+2:b/6先判断先判断表达式表达式表达式表达式1 1是否成立,是否成立,若成立则用若成立则用表达式表达式表达式表达式2 2的值作为整个条件的值作为整个条件表达式的值表达式的值表达式的值表达式的值否则用否则用表达式表达式表达式表达式3 3的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁