《C语言03数据描述.ppt》由会员分享,可在线阅读,更多相关《C语言03数据描述.ppt(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第三章第三章 数据描述数据描述 计算机数据的预备知识计算机数据的预备知识 数据类型数据类型 常量与变量常量与变量 不同类型数据间的转换不同类型数据间的转换 运算符和表达式运算符和表达式1/16/20231补充:补充:计算机数据的预备知识计算机数据的预备知识 计算机中数的表示及进制转换计算机中数的表示及进制转换 字节和位字节和位 数值的表示方法:原码、反码和补码数值的表示方法:原码、反码和补码1/16/20232 计算机中数的表示及进制转换计算机中数的表示及进制转换数码数码:表示数的符号:表示数的符号基基:数码的个数数码的个数权权:每一位所具有的值每一位所具有的值数制基权表示数码特点10,10,
2、10,十进制数0910逢十进一逢十进一二进制数0122,2,2,逢二进一逢二进一八进制数0788,8,8,逢八进一逢八进一十六进制数09,AF,af1616,16,16,逢十六进一逢十六进一十进制:4956=410+910+510+610二进制:1011=12+02+12+12十六进制:81AE=816+116+1016+1416八进制:4275=48+28+78+581/16/20233 各种进制之间的相互转换各种进制之间的相互转换 二进制、八进制、十六进制二进制、八进制、十六进制 十进制十进制按权相加法按权相加法1/16/20234 各种进制之间的相互转换各种进制之间的相互转换 十进制十进
3、制 二进制、八进制、十六进制二进制、八进制、十六进制辗转相除法辗转相除法例例1:(59)10=(?)2例例1:(59)10=(111011)21/16/20235 各种进制之间的相互转换各种进制之间的相互转换 十进制十进制 二进制、八进制、十六进制二进制、八进制、十六进制辗转相除法辗转相除法例例2:(159)10=(?)8例例2:(159)10=(237)81/16/20236 各种进制之间的相互转换各种进制之间的相互转换 十进制十进制 二进制、八进制、十六进制二进制、八进制、十六进制辗转相除法辗转相除法例例3:(459)10=(?)16例例3:(459)10=(1CB)161/16/2023
4、7 各种进制之间的相互转换各种进制之间的相互转换 二进制二进制 八进制八进制 从右向左,每从右向左,每3位一组(不足位一组(不足3位左补位左补0)每每3位二进制转换成八进制位二进制转换成八进制 八进制八进制 二进制二进制 用用3位二进制数代替每一位八进制数位二进制数代替每一位八进制数 把所有的八进制数串起来把所有的八进制数串起来000 0001 1010 2011 3100 4101 5110 6111 7例例1:(1101001)2=(001,101,001)2=(151)8例例2:(246)8=(010,100,110)2=(10100110)21/16/20238 各种进制之间的相互转换
5、各种进制之间的相互转换 二进制二进制 十六进制十六进制 从右向左,每从右向左,每4位一组(不足位一组(不足4位左补位左补0)每每4位二进制转换成十六进制位二进制转换成十六进制 八进制八进制 二进制二进制 用用4位二进制数代替每一位十六进制数位二进制数代替每一位十六进制数 把所有的十六进制数串起来把所有的十六进制数串起来0000 00001 10010 20011 30100 40101 50110 60111 71000 81001 91010 A1011 B1100 C1101 D1110 E1111 F例例1:2 =(0011,0101,0111,1101)2 =(357D)16例例2:(
6、4B9E)16 =(0100,1011,1001,1110)2 21/16/20239 字节和位字节和位 内存以内存以字节字节为单元组成为单元组成 每个字节有一个地址每个字节有一个地址 一个字节一般由一个字节一般由8个二进制位组成个二进制位组成 每个二进位的值是每个二进位的值是0或或17654321098H99H9AH9BH9CH9DH9EH9FHA0HA1HA3HA4HA5H1/16/202310 数值的表示方法:原码、反码、补码数值的表示方法:原码、反码、补码 原码原码:最高位为符号位,其余为本身的绝对值:最高位为符号位,其余为本身的绝对值 反码反码:正数:与原码相同正数:与原码相同 负数
7、:原码符号位不变,其它位负数:原码符号位不变,其它位对位取反对位取反 补码补码:正数:与原码、反码相同正数:与原码、反码相同 负数:反码保持符号位不变,再负数:反码保持符号位不变,再整个整个加加1原码原码反码反码补码补码+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000数的范围数的范围-127 +127-127 +127-128 +1271/16/2023113.1 数据类型数据类型数据类型数据类型基本类型基本类型整型整型短整型短整型 s
8、hort整型整型 int长整型长整型 long实型实型浮点型浮点型 float双精度型双精度型double字符型字符型 char构造类型构造类型数组数组结构体结构体 struct共同体共同体 union枚举类型枚举类型 enum指针类型指针类型空类型空类型 void定义类型定义类型 typedef1/16/202312 基本数据类型基本数据类型类型类型符号符号关键字关键字所占位数所占位数数的范围数的范围整型整型有有(signed)int16-3276832767(signed)short16-3276832767(signed)long32-21474836482147483647无无unsi
9、gned int16065535unsigned short16065535unsigned long3204294967295实型实型有有float323.4e-383.4e38有有double641.7e-3081.7e308字符型字符型有有char8-128127无无unsigned char802551/16/2023133.2 常量与变量常量与变量 标识符标识符 定义:用来标识定义:用来标识变量、常量、函数变量、常量、函数等的字符序列等的字符序列 组成:组成:只能由只能由字母、数字、下划线字母、数字、下划线组成,首字符须是字母或组成,首字符须是字母或下划线下划线 大小写敏感大小写敏感
10、 不能使用关键字不能使用关键字 长度:最长长度:最长32个字符个字符(Turbo C)命名原则:命名原则:见名知意见名知意 不宜混淆不宜混淆 如如1与与l,o与与0例例:判断下列标识符号合法性判断下列标识符号合法性sum Sum day Date 3days student_name#33 lotus_1_2_3 char ab _above$1233days#33charab$1231/16/202314 常量常量 定义:程序运行时其值不能改变的量(即常数)定义:程序运行时其值不能改变的量(即常数)分类分类:符号常量:用标识符代表常量符号常量:用标识符代表常量 定义格式:定义格式:#defi
11、ne 符号常量符号常量 常量常量 一般用大写字母一般用大写字母 是宏定义预处理命令,不是是宏定义预处理命令,不是C语句语句 直接常量直接常量:整型常量整型常量 12,-22435,0313,0 x121 实型常量实型常量 3.14,1.2e-8,3.6E+9 字符常量字符常量 A,E,+,101,xEF,n 字符串常量字符串常量 “China”,“Hellow”,“”如如#define PRICE 30例例 符号常量举例符号常量举例Ex02_01.c#define PRICE 30main()int num,total;num=10;total=num*PRICE;printf(total=%
12、d,total);运行结果:运行结果:total=300三种整型直接常量的表示方式三种整型直接常量的表示方式十进制十进制符号:符号:09,+,-123,-456八进制八进制以以0开头,后面跟符号:开头,后面跟符号:07,0123,011十六进制十六进制以以0 x开头,后面跟符号:开头,后面跟符号:09,af,AF0 x123,0 xff整型直接常量的类型的确定原则:整型直接常量的类型的确定原则:(1)根据其值根据其值所在范围所在范围确定其数据类型确定其数据类型(2)在整常量后在整常量后加字母加字母l或或L,认为它是,认为它是long int 型常量型常量例例 30000 为为int型型 655
13、36 为为long int 型型例例 12 与与 12L实型直接常量的表示形式实型直接常量的表示形式小数形式小数形式0.12,.34,-.56,123.必须要有必须要有小数点小数点指数形式指数形式12.3e3,123E2,1.23e4 E或或e前必须有前必须有数字数字E或或e后必须为后必须为整数整数实型直接常量的类型的确定原则:实型直接常量的类型的确定原则:(1)默认为双精度默认为双精度double型型(2)在实型常量后在实型常量后加字母加字母f或或F,认为它是浮,认为它是浮点型点型(float)常量常量用用单引号单引号括起来的单个括起来的单个普通字符普通字符或或转义字符转义字符如:a A?n
14、 101字符常量的值:该字符的字符常量的值:该字符的ASCII码码值值转义字符转义字符:反斜线后面跟一个反斜线后面跟一个字符字符或一个或一个代码值代码值表示表示如:A101x4165如:A65,a97,048,n10转义字符转义字符含义含义转义字符转义字符含义含义n换行换行t制表符制表符v垂直制表符垂直制表符b退格退格r回车回车f换页换页a响铃响铃反斜线反斜线单引号单引号”双引号双引号ddd3位位8进制数进制数xhh2位位16进制数进制数例例 转义字符举例转义字符举例Ex02_02.cmain()printf(101 x42 Cn);printf(I say:How are you?n);pr
15、intf(C Programn);printf(Turbo C);运行结果:运行结果:(屏幕显示屏幕显示)A B CIsay:”How are you?”C ProgramTurbo C用双引号用双引号(“”)括起来的括起来的字符序列字符序列每个字符串尾每个字符串尾自动自动加一个加一个 0 作为作为字符串结束标志字符串结束标志hellow00字符常量与字符串常量不同字符常量与字符串常量不同aa“a”a01/16/202315 变量变量 概念:其值可以改变的量概念:其值可以改变的量 变量名与变量值变量名与变量值 变量定义的一般格式:变量定义的一般格式:数据类型数据类型 变量变量1,变量变量2,变
16、量变量n;变量初始化:定义时赋初值变量初始化:定义时赋初值 变量的使用:变量的使用:先定义,后使用先定义,后使用 变量定义位置:一般放在变量定义位置:一般放在函数开头函数开头aEFh23决定分配字节数决定分配字节数和数的表示范围和数的表示范围合法标识符合法标识符例:例:int a,b,c;float data;例:例:int a=2,b,c=4;float data=3.67;char ch=A;int x=1,y=1,z=1;int x=y=z=1;main()int a,b=2;float data;a=1;data=(a+b)*1.2;printf(“data=%fn”,data);ma
17、in()int a,b=2;a=1;float data;data=(a+b)*1.2;printf(“data=%fn”,data);例例1:int student;stadent=19;Undefined symbol statent in function main 例例2:float a,b,c;c=a%b;Illegal use of floating point in function main 1/16/202316 基本数据类型变量基本数据类型变量整型变量整型变量实型变量实型变量字符型变量字符型变量一般占一般占2字节字节shortintlong用用sizeof(类型标识符类型标
18、识符)测测量量float:占:占4字节,提供字节,提供7位有效数字位有效数字double:占:占8字节,字节,1516位有效数字位有效数字字符变量存放字符字符变量存放字符ASCII码码char与与int数据间可进行数据间可进行算术运算算术运算例:例:a=D;/*a=68;*/x=A+5;/*x=65+5;*/s=!+G /*s=33+71;*/没有字符串变量,用字符数组存放1/16/202317 变量和常量定义的一个例子变量和常量定义的一个例子例例 /*Ex02_04.c*/#define PRICE 12.5 main()int num=3;float total;char ch1,ch2=
19、D;total=num*PRICE;ch1=ch2-A+a;printf(“total=%f,ch1=%cn”,total,ch1);宏定义宏定义变量定义变量定义输出结果输出结果运行结果:运行结果:total=37.500000,ch1=d1/16/202318显式转换显式转换(强制转换强制转换)形式:形式:(类型名类型名)(表达式表达式)得到所需类型的中间变得到所需类型的中间变量,量,原变量类型不变原变量类型不变 2.3 不同类型间的数据转换不同类型间的数据转换隐式转换隐式转换 转换场合转换场合 运算转换运算转换 赋值转换赋值转换 输出转换输出转换 函数调用转换函数调用转换例:例:char
20、ch;int i;float f;double d;long l;ch/I+f*d-(f+i)+10+a+i*f-d/lint a;float f=1.2;a=1.2;a的值为的值为?1int a=65;char ch=A;float f=6.57;printf(a=%c,ch=%d,f=%d,a,ch,f);输出结果:输出结果:a=A,ch=65,f=6int max(int x,int y)int a;a=max(3.14,A);例例 (int)(x+y)(int)x+y (double)(3/2)(int)3.6 例例 main()float x;int i;x=3.6;i=(int)x
21、;printf(“x=%f,i=%d”,x,i);结果:结果:x=3.600000,i=31/16/202319C运运算算符符算术运算符算术运算符+-*/%+-关系运算符关系运算符 =!=逻辑运算符逻辑运算符!&|位运算符位运算符|&赋值运算符赋值运算符=+=-=*=/=%=|=&=条件运算符条件运算符?:逗号运算符逗号运算符,指针运算符指针运算符*&求字节求字节sizeof强制类型转换强制类型转换(类型类型)分量运算符分量运算符.-下标运算符下标运算符 其它其它()-2.3 运算符的表达式运算符的表达式C运运算算符符算术运算符算术运算符+-*/%+-关系运算符关系运算符 =!=逻辑运算符逻辑
22、运算符!&|位运算符位运算符|&赋值运算符赋值运算符=+=-=*=/=%=|=&=条件运算符条件运算符?:逗号运算符逗号运算符,指针运算符指针运算符*&求字节求字节sizeof强制类型转换强制类型转换(类型类型)分量运算符分量运算符.-下标运算符下标运算符 其它其它()-1/16/202320 学习学习运算符的注意点运算符的注意点:运算符运算符功能功能 与运算量关系与运算量关系 要求运算量要求运算量个数个数:要求运算量要求运算量类型类型:运算符运算符优先级别优先级别 结合方向结合方向 结果的类型结果的类型1/16/202321(1)算术运算符和表达式算术运算符和表达式 基本算术运算符:基本算术
23、运算符:+-*/%功能:完成基本的算术运算功能:完成基本的算术运算 与与2个运算量运算,为个运算量运算,为二目运算符二目运算符%的两侧必须为的两侧必须为整数整数 优先级:优先级:-(2)*/%(3)+-(4)结合方向:结合方向:从左向右从左向右(-为负号:从右向左为负号:从右向左)结果类型:整数相除结果为整数结果类型:整数相除结果为整数例例 5/2 =-5/2.0 =例例 5/2 =2 -5/2.0 =-2.5例例 5%2 =-5%2 =1%10 =5%1 =5.5%2 例例 5%2 =1 -5%2 =-1 1%10 =1 5%1 =0 5.5%2 ()1/16/202322(1)算术运算符和
24、表达式算术运算符和表达式 自增和自减运算符:自增和自减运算符:+-功能:使变量自己增加或减少功能:使变量自己增加或减少1 单目运算符:单目运算符:前置:先自增或自减,再取变量前置:先自增或自减,再取变量 后置:先取变量,再自增或自减后置:先取变量,再自增或自减 优先级:优先级:-+-(2)*/%(3)+-(4)结合方向:结合方向:从右至左从右至左 注意点:注意点:+-不能用于常量和表达式,不能用于常量和表达式,5+,(a+b)+例例 j=3;k=+j;j=3;k=j+;j=3;printf(“%d”,+j);j=3;printf(“%d”,j+);a=3;b=5;c=(+a)*b;a=3;b=
25、5;c=(a+)*b;例例 j=3;k=+j;/j=4,k=4j=3;k=j+;j=3;printf(“%d”,+j);j=3;printf(“%d”,j+);a=3;b=5;c=(+a)*b;a=3;b=5;c=(a+)*b;例例 j=3;k=+j;/j=4,k=4j=3;k=j+;/j=4,k=3j=3;printf(“%d”,+j);j=3;printf(“%d”,j+);a=3;b=5;c=(+a)*b;a=3;b=5;c=(a+)*b;例例 j=3;k=+j;/j=4,k=4j=3;k=j+;/j=4,k=3j=3;printf(“%d”,+j);/4j=3;printf(“%d”,
26、j+);a=3;b=5;c=(+a)*b;a=3;b=5;c=(a+)*b;例例 j=3;k=+j;/j=4,k=4j=3;k=j+;/j=4,k=3j=3;printf(“%d”,+j);/4j=3;printf(“%d”,j+);/3a=3;b=5;c=(+a)*b;a=3;b=5;c=(a+)*b;例例 j=3;k=+j;/j=4,k=4j=3;k=j+;/j=4,k=3j=3;printf(“%d”,+j);/4j=3;printf(“%d”,j+);/3a=3;b=5;c=(+a)*b;/a=4,c=20a=3;b=5;c=(a+)*b;例例 j=3;k=+j;/j=4,k=4j=3
27、;k=j+;/j=4,k=3j=3;printf(“%d”,+j);/4j=3;printf(“%d”,j+);/3a=3;b=5;c=(+a)*b;/a=4,c=20a=3;b=5;c=(a+)*b;/a=4,c=15例例 -i+i=3;printf(“%d”,-i+);例例 -i+-(i+)i=3;printf(“%d”,-i+);/-3 例例 j+k;(j+)+k;1/16/202323(2)赋值运算符和表达式赋值运算符和表达式 基本赋值运算符:基本赋值运算符:=格式:格式:变量标识符变量标识符=表达式表达式 功能:将一个数据功能:将一个数据(常量、变量或表达式常量、变量或表达式)的值给
28、一变量的值给一变量 复合赋值运算符:复合赋值运算符:符号符号:+=-=*=/=%=&=|=含义:含义:exp1 op=exp2 exp1=exp1 op exp2 优先级:优先级:14 结合方向:结合方向:从右向左从右向左 左侧必须是变量,不能是常量或表达式左侧必须是变量,不能是常量或表达式 赋值转换规则:使赋值号右边表达式值自动转换成其左赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型边变量的类型 赋值表达式的值与变量值相等赋值表达式的值与变量值相等,且且可嵌套可嵌套例例 a=3;d=func();c=d+2;例例:a=12;a+=a-=a*a;例例:a=12;a+=a-=a*a
29、;/a=-264 等价于等价于a=a+(a=a-(a*a)例例 int a=2;a%=4-1;a+=a*=a-=a*=3;例例 int a=2;a%=4-1;a+=a*=a-=a*=3;/a=0 等价于等价于a=a+(a=a*(a=a-(a=a*3)例例 3=x-2*y;a+b=3;例例 int i;i=2.56;/结果结果i=2;例例 float f;int i;i=10;f=i;则则 f=10.0例例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)例例:a=b=c=5/表达式值为表达式值为5,a,b,c值为值为5a=(b=5)a=5+(
30、c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)例例:a=b=c=5/表达式值为表达式值为5,a,b,c值为值为5a=(b=5)/b=5,a=11a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)例例:a=b=c=5/表达式值为表达式值为5,a,b,c值为值为5a=(b=5)/b=5,a=11a=5+(c=6)/表达式值为表达式值为11,c=6,a=11a=(b=4)+(c=6)a=(b=10)/(c=2)例例:a=b=c=5/表达式值为表达式值为5,a,b,c值为值为5a=(b=5)/b=5,a=11a=5+(c=6)/表达式值为表达式值为11,c=6,a
31、=11a=(b=4)+(c=6)/表达式值表达式值10,a=10,b=4,c=6a=(b=10)/(c=2)例例:a=b=c=5/表达式值为表达式值为5,a,b,c值为值为5a=(b=5)/b=5,a=11a=5+(c=6)/表达式值为表达式值为11,c=6,a=11a=(b=4)+(c=6)/表达式值表达式值10,a=10,b=4,c=6a=(b=10)/(c=2)/表达式值表达式值5,a=5,b=10,c=2a+=3 a=a+3x*=y+8 x=x*(y+8)x%=3 x=x%31/16/202324(3)逗号运算符和表达式逗号运算符和表达式 功能:串接多个独立的表达式功能:串接多个独立的
32、表达式 格式:格式:表达式表达式1,表达式表达式2,表达式表达式n 结合方向:结合方向:从左向右从左向右 优先级:优先级:15 逗号表达式的值:逗号表达式的值:表达式表达式n的值的值 用途:用途:常用于常用于循环循环for语句语句中中例例a=3*5,a*4a=3*5,a*4,a+5x=(a=3,6*3)x=a=3,6*aa=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);例例a=3*5,a*4/a=15,表达式值表达式值60a=3*5,a*4,a+5x=(a=3,6*3)x=a=3,6*aa=1;b=2;c=3
33、;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);例例a=3*5,a*4/a=15,表达式值表达式值60a=3*5,a*4,a+5/a=15,表达式值表达式值20 x=(a=3,6*3)x=a=3,6*aa=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);例例a=3*5,a*4/a=15,表达式值表达式值60a=3*5,a*4,a+5/a=15,表达式值表达式值20 x=(a=3,6*3)/赋值表达式赋值表达式,表达式值表达式值18,x=18x=a
34、=3,6*aa=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);例例a=3*5,a*4/a=15,表达式值表达式值60a=3*5,a*4,a+5/a=15,表达式值表达式值20 x=(a=3,6*3)/赋值表达式赋值表达式,表达式值表达式值18,x=18x=a=3,6*a/逗号表达式逗号表达式,表达式值表达式值18,x=3a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);例例a=3*5,a*4/a=15,表达式值表达式值60a
35、=3*5,a*4,a+5/a=15,表达式值表达式值20 x=(a=3,6*3)/赋值表达式赋值表达式,表达式值表达式值18,x=18x=a=3,6*a/逗号表达式逗号表达式,表达式值表达式值18,x=3a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);/1,2,3printf(“%d,%d,%d”,(a,b,c),b,c);例例a=3*5,a*4/a=15,表达式值表达式值60a=3*5,a*4,a+5/a=15,表达式值表达式值20 x=(a=3,6*3)/赋值表达式赋值表达式,表达式值表达式值18,x=18x=a=3,6*a/逗号表达式逗号表达式,表达式值表达式值
36、18,x=3a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);/1,2,3printf(“%d,%d,%d”,(a,b,c),b,c);/3,2,3 例例:/*Ex02_05.c*/#include main()int x,y=7;float z=4;x=(y=y+6,y/z);printf(x=%dn,y=%d,x,y);运行结果:x=3,y=131/16/202325(4)关系运算符和表达式关系运算符和表达式 功能:比较两个功能:比较两个常量常量、变量变量或或表达式表达式的值的大小的值的大小 符号:符号:=!=结合方向:结合方向:从左向右从左向右 优先级:优先级:=
37、(6)=!=(7)关系表达式的值:逻辑关系表达式的值:逻辑“真真”和和“假假”,用,用1和和0表示表示 用途:用途:循环语句循环语句和和选择语句选择语句中中例例 ca+b /c(a+b)ab!=c /(ab)!=c a=bc /a=(bc /a=(bc)例例int a=3,b=2,c=1,d,f;ab(ab)=cb+cbf=abc例例int a=3,b=2,c=1,d,f;ab/表达式值表达式值1(ab)=cb+cbf=abc例例int a=3,b=2,c=1,d,f;ab/表达式值表达式值1(ab)=c/表达式值表达式值1b+cbf=abc例例int a=3,b=2,c=1,d,f;ab/表
38、达式值表达式值1(ab)=c/表达式值表达式值1b+cbf=abc例例int a=3,b=2,c=1,d,f;ab/表达式值表达式值1(ab)=c/表达式值表达式值1b+cb/d=1f=abc例例int a=3,b=2,c=1,d,f;ab/表达式值表达式值1(ab)=c/表达式值表达式值1b+cb/d=1f=abc/f=0例:若例:若a=0;b=0.5;x=0.3;则则 a=x=b的值为的值为 例:若例:若a=0;b=0.5;x=0.3;则则 a=x278在在C中是允许的,值为中是允许的,值为例:例:5278在在C中是允许的,值为中是允许的,值为 0例:例:int i=1,j=7,a;a=i
39、+(j%4!=0);则则a=例:例:int i=1,j=7,a;a=i+(j%4!=0);则则a=2例例 a0 结果为结果为 A100 结果为结果为例例 a0 结果为结果为 1 A100 结果为结果为 0关系运算请注意:关系运算请注意:(1)应避免对应避免对实数实数作相等或不等的判断作相等或不等的判断如如 1.0/3.0*3.0=1.0 结果为结果为 关系运算请注意:关系运算请注意:(1)应避免对应避免对实数实数作相等或不等的判断作相等或不等的判断如如 1.0/3.0*3.0=1.0 结果为结果为 0关系运算请注意:关系运算请注意:(1)应避免对应避免对实数实数作相等或不等的判断作相等或不等的
40、判断如如 1.0/3.0*3.0=1.0 结果为结果为 0可改写为:可改写为:fabs(1.0/3.0*3.0-1.0)1E-6(2)注意区分注意区分“=”与与“=”如如 int a=0,b=1;if(a=b)printf(“a equal to b”);else printf(“a not equal to b”);(2)注意区分注意区分“=”与与“=”如如 int a=0,b=1;if(a=b)printf(“a equal to b”);else printf(“a not equal to b”);(2)注意区分注意区分“=”与与“=”如如 int a=0,b=1;if(a=b)pri
41、ntf(“a equal to b”);else printf(“a not equal to b”);(2)注意区分注意区分“=”与与“=”如如 int a=0,b=1;if(a=b)printf(“a equal to b”);else printf(“a not equal to b”);1/16/202326(5)逻辑运算符和表达式逻辑运算符和表达式 功能:判断逻辑值和对逻辑值进行操作功能:判断逻辑值和对逻辑值进行操作 符号:符号:!&|逻辑运算真值表逻辑运算真值表 结合方向:结合方向:!从右向左从右向左,&|从左向右从左向右 优先级:优先级:!(2)&(11)|(12)逻辑运算中:逻
42、辑运算中:运算参量运算参量:0表示表示假假,非非0表示表示真真 运算结果运算结果:0表示表示假假,1表示表示真真 短路特性短路特性:逻辑表达式求解时,:逻辑表达式求解时,并非所有的逻辑并非所有的逻辑运算符都被执行运算符都被执行,只是在,只是在必须执行下一个逻辑运算必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符符才能求出表达式的解时,才执行该运算符ab!a!ba&ba|b真真真真真真假假假假真真假假假假ab!a!ba&ba|b真真真真假假真真假假假假假假真真真真假假假假真真ab!a!ba&ba|b真真真真假假假假真真假假假假真真假假真真真真假假假假假假真真真真ab!a!ba&ba|
43、b真真真真假假假假真真真真假假假假真真假假假假真真真真假假假假假假假假真真真真假假ab!a!ba&ba|b真真真真假假假假真真真真真真假假假假真真假假真真假假真真真真假假假假真真假假假假真真真真假假假假例例a=x&xb&xya=b|x=y!a|ab例例a=x&x=b/(a=x)&(xb&xya=b|x=y!a|ab例例a=x&x=b/(a=x)&(xb&xy/(ab)&(xy)a=b|x=y!a|ab例例a=x&x=b/(a=x)&(xb&xy/(ab)&(xy)a=b|x=y/(a=b)|(x=y)!a|ab例例a=x&x=b/(a=x)&(xb&xy/(ab)&(xy)a=b|x=y/(a
44、=b)|(x=y)!a|ab/(!a)|(ab)例例a=4;b=5;!aa&ba|b!a|b4&0|253&2|83&2|83&2|83&2|83&2|83&2|83&2|83)&2|(83&2|83)&2|(8b)&(n=cd)例例a&b&c/只在只在a为真时,才判别为真时,才判别b的值的值/只在只在a、b都为真时,才判别都为真时,才判别 c的值的值a|b|c/只在只在a为假时,才判别为假时,才判别b的值的值/只在只在a、b都为假时,才判别都为假时,才判别 c的值的值a=1;b=2;c=3;d=4;m=1;n=1;(m=ab)&(n=cd)/结果结果m=0,n=11/16/202327(6)
45、条件运算符和表达式条件运算符和表达式 功能:相当于条件语句,但不能取代功能:相当于条件语句,但不能取代if语句语句 形式:形式:exp1?exp2:exp3 结合方向:结合方向:从左向右从左向右 优先级:优先级:13 条件运算符可嵌套条件运算符可嵌套结果类型:取结果类型:取exp1、exp2和和exp3中中最高者最高者expr1取取expr2值值取取expr3值值非非0=0例例 if(ab)printf(“%d”,a);else printf(“%d”,b);printf(“%d”,ab?a:b);例例 求求 a+|b|printf(“a+|b|=%dn”,b0?a+b:a-b);例例 x0?1:(x=0)?x:-x (c=a&cy?1:1.5 /xy ,值为值为1.0;xy ,值为值为1.51/16/202328