《一章数据类型与表达式》由会员分享,可在线阅读,更多相关《一章数据类型与表达式(53页珍藏版)》请在金锄头文库上搜索。
1、第一章第一章 数据类型与表达式数据类型与表达式1.1 C程序简介程序简介1.1.1 C语言的发展简史和特点语言的发展简史和特点1.1.2 语言程序的结构与书写规则语言程序的结构与书写规则1.1.3 Turbo C 3.0的基本操作的基本操作Return踊刷犹讶值切岩茶寸劫像旷鄂值受楚碗坡纱啪岸撵函巫条假戎激与引嫩瘟一章数据类型与表达式一章数据类型与表达式1.1.1 C语言的发展简史和特点语言的发展简史和特点 1语言的诞生与发展语言的诞生与发展(1)在C语言诞生以前,系统软件主要是用汇编语言编写的。由于汇编语言程序依赖于计算机硬件,其可读性和可移植性都很差;但一般的高级语言又难以实现对计算机硬件
2、的直接操作(这正是汇编语言的优势),于是人们盼望有一种兼有汇编语言和高级语言特性的新语言。(2)语言是贝尔实验室于70年代初研制出来的,后来又被多次改进,并出现了多种版本。80年代初,美国国家标准化协会(ANSI),根据语言问世以来各种版本对语言的发展和扩充,制定了ANSI C标准(1989年再次做了修订)。地膝咒傣袱窃阶伞的溺枷刊靡吗菊信掳肃句叁先恐卒丝娥熏储避港剖夯妻一章数据类型与表达式一章数据类型与表达式(3)目前,在微机上广泛使用的语言编译系统有Microsoft C、Turbo C 、Borland C等。虽然它们的基本部分都是相同的,但还是有一些差异, 所以请大家注意自己所使用的编
3、译系统的特点和规定(参阅相应的手册)。 2C语言的特点语言的特点 C语言同时具有汇编语言和高级语言的优势。(1)语言简洁、紧凑,使用方便、灵活。 (2)运算符极其丰富。(3)生成的目标代码质量高,程序执行效率高。(4)可移植性好(较之汇编语言)。(5)可以直接操纵硬件。 勾潮欲扇我拄挫蜂循搜提菏单络挡托义介恃脸干矩帛钠琉痊扦赵辙拆皿褐一章数据类型与表达式一章数据类型与表达式1.1.2 语言程序的结构与书写规则语言程序的结构与书写规则语言程序的总体结构语言程序的总体结构 一个完整的语言程序,是由一个main()函数(又称主函数)和若干个其它函数结合而成的,或仅由一个main()函数构成。案例案例
4、1.1 仅由main()函数构成的语言程序。/*案例代码文件名:AL1_1.C*/*功能:仅由main()函数构成的语言程序示例*/main() printf(“This is a C program.n”); 程序运行结果: This is a C program. 咸澳虑本涛蓟坚奎脓冀琴灶想癣伦炭峨县淡眨薪阔娃构酣既泣妆瞥青牵循一章数据类型与表达式一章数据类型与表达式案例案例1.2 由main()函数和1个其它函数max()构成的语言程序。/*案例代码文件名:AL1_2.C*/*功能:由main()函数和1个其它函数max()构成的语言程序示例*/int max(int x, int y)
5、 return( xy ? x : y ); main() int num1,num2; printf(“Input the first integer number: ”); scanf(“%d”, &num1); printf(“Input the second integer number: ”); scanf(“%d”, &num2); printf(“max=%dn”, max(num1, num2); 程序运行情况: Input the first integer number:6 Input the second integer number:9 max=9 程序演示减嘴笋孙捕疾
6、诞揪司如宅唤雅忽讼霜哭狈阎腊董缆购联肢滞触脸柔凹顷抵一章数据类型与表达式一章数据类型与表达式案案例例1.3 改写案案例例1.2,交换main()函数和max()函数的前后位置。源程序略。程序运行情况: Input the first integer number:6 Input the second integer number:9 max=91.函数是语言程序的基本单位。函数是语言程序的基本单位。main()函数的作用,相当于其它高级语言中的主程序;其它函数的作用,相当于子程序。2.C语言程序总是从语言程序总是从main()函数开始执行。函数开始执行。一个语言程序,总是从main()函数开始
7、执行,而不论其在程序中的位置。当主函数执行完毕时,亦即程序执行完毕。习惯上,将主函数main()放在最前头。糯衔喘毛铀庆跳仓织重诺卓葛券骗颇纂绚铭钻神青螺免壬绞颜苯故汉目盆一章数据类型与表达式一章数据类型与表达式函数的一般结构函数的一般结构 任何函数(包括主函数main())都是由函数说明和函数体两部分组成。其一般结构如下: 函数类型 函数名(函数参数表) 函数说明部分 说明语句部分; 执行语句部分; 函数体部分 1. 使用的语法符号约定使用的语法符号约定 .方括号表示可选(即可以指定,也可以缺省) 省略号表示前面的项可以重复 | 多(含2)中选1 2.函数说明函数说明 由函数类型(可缺省)、
8、函数名和函数参数表三部分组成,其中函数参数表的格式为: 数据类型 形参, 数据类型 形参2宵狄屿雅祷没冯抄浦闻夯尾腺傍殴陵录借赔咎锅患娩伴刺储核酉根突霄因一章数据类型与表达式一章数据类型与表达式例如,案例1.2中的函数max(),其函数说明各部分如图1-1所示。 函数类型 函数名 函数参数表 int max ( int x , int y ) 图1-1 函数说明部分结构图注意:注意:在旧标准中,函数可以缺省参数表。3.函数体函数体在函数说明部分的下面、大括号(必须配对使用)内的部分。函数体一般由说明语句和可执行语句两部分构成:(1)说明语句部分说明语句部分由变量定义、自定义类型定义、自定义函数
9、说明、外部变量说明等组成。 映畜尝楚董诌山抑绝女檄派弦啸隋冀柬虾沿勤搅汇悄树柒迂锨足誓持袱忌一章数据类型与表达式一章数据类型与表达式 (2)可执行语句)可执行语句 一般由若干条可执行语句构成。图1-2是案案例例1.2的main()函数体的示意图。/*主函数main()*/main() int num1,num2; 变量定义部分 printf(“Input the first integer number: ”); scanf(“%d”, &num1); printf(“Input the second integer number: ”); 可执行语句部分 函数体 scanf(“%d”, &n
10、um2); printf(“max=%dn”, max(num1, num2); 图1-2 函数体结构示意图 4.说明说明(1)函数体中的变量定义语句,必须在所有可执行语句之前。 下面程序中变量定义语句“int max;”的位置是非法的:艳巾馁烷谨鲜茵亚音谬唁啮绚人模澜瘪御瘪利汁后纫造裴叹瓶谦妒滞缀壕一章数据类型与表达式一章数据类型与表达式main() int x,y;/*变量定义语句:定义2个整型变量x、y*/ x=3; /*可执行的赋值语句:将3赋值给变量x*/ y=6;/*可执行的赋值语句:将6赋值给变量y*/ int max;/*变量定义语句:出现在可执行的 赋值语句“x=3;”和“
11、y=6;”之后,非法!*/ max=xy?x:y; printf(“max=%dn”,max); 解决办法很简单,请读者自己思考。(2)如果不需要,也可以缺省变量定义语句。源程序书写格式源程序书写格式1.所有语句都必须以分号“;”结束,函数的最后一个语句也不例外。2.程序行的书写格式自由,既允许1行内写几条语句,也允许1条语句分写在几行上。奈俐瞩俊醚般论季淀皂缉毋洪县峪纵寅粳歹演间绚减室颠桨克叭豌统搓嫡一章数据类型与表达式一章数据类型与表达式例如,案例案例1.2的主函数main(),也可改写成如下所示的格式:main() int num1,num2; printf(“Input the fir
12、st integer number: ”); scanf(“%d”, &num1); printf(“Input the second integer number: ”); scanf(“%d”, &num2); printf(“max=%dn”, max(num1, num2); 如果某条语句很长,一般需要将其分写在几行上。3.允许使用注释。C语言的注释格式为: /* */例如,在案例1.1和案例1.2中,以及本节其它部分给出的源程序中,凡是用“/*”和“*/”括起来的文字,都是注释。(1) “/*”和“*/” 必须成对使用,且“/”和“*”、以及“*”和“/”之间不能有空格,否则都出错。
13、帕研罕贩止淖恒缆垂碌穷磺争壳遁乓呛柠伯蝴陋帆杖叮寂绸仅帚鄙瓶想晨一章数据类型与表达式一章数据类型与表达式 技技巧巧:为避免遗漏必须配对使用的符号,例如注释符号、函数体的起止标识符(花括号)、圆括号等等,在输入时,可连续输入这些起止标识符,然后再在其中进行插入来完成内容的编辑。在起止标识符嵌套时,以及相距较远时,这样做更有必要。 (2)注释的位置,可以单占1行,也可以跟在语句的后面。 (3)如果1行写不下,可另起1行继续写。 (4)注释中允许使用汉字。在非中文操作系统下,看到的是一串乱码,但不影响程序运行。 Return雁絮驴闰讣犊资台歉学瞪宁鲤谱吱丝橙麻荧缄腋悬荚苗惯艘抽唐奉觅微袁一章数据类型
14、与表达式一章数据类型与表达式1.1.3 Turbo C 3.0的基本操作的基本操作1.运行一个语言程序的一般过程 2.TC的启动、退出与命令菜单 3.编辑并保存一个语言源程序 4.编译、连接单个源程序文件 5.运行与查看结果 Return妄座肥见淄蜗刹卵厦抽漆丰柬咱蛆多膀窥怜序超翌锻瞅芝派司违辖伺裴喀一章数据类型与表达式一章数据类型与表达式1.运行一个语言程序的一般过程运行一个语言程序的一般过程 urbo 是一个集源程序编辑、编译、连接、运行与调试于一体、 用菜单驱动的集成软件环境。 运行一个语言程序的一般过程: (1)启动TC,进入TC集成环境。(2)编辑(或修改)源程序。(3)编译。如果编
15、译成功,则可进行下一步操作;否则,返回(2)修改源程序,再重新编译,直至编译成功。 (4)连接。如果连接成功,则可进行下一步操作;否则,根据系统的错误提示,进行相应修改,再重新连接,直至连接成功。(5)运行。通过观察程序运行结果,验证程序的正确性。如果出现逻辑错误,则必须返回(2)修改源程序,再重新编译、连接和运行,直至程序正确。(6)退出TC集成环境,结束本次程序运行。Return建描涎耻哦松忻棚庭视厘走沉冬率狡挽莽捉彩瞩犹衫盖务饰梆寿撮适钧藩一章数据类型与表达式一章数据类型与表达式编辑链接编译执行C程序开发步骤程序代码的录入,生成源程序*.c语法分析查错,翻译生成目标程序*.obj与其它目
16、标程序或库链接装配,生成可执行程序*.exeC程序的上机步骤蕊棺谤肺榨铬仍笋届浇刊菇甩僻射梆结就槛徒么扦祁陷帝蝴速退蛆愈精业一章数据类型与表达式一章数据类型与表达式1.2 C语言的数据类型语言的数据类型C语言提供的数据结构,是以数据类型形式出现的。具体分类如下:1.基本类型分为整型、实型(又称浮点型)、字符型三种。2.构造类型分为数组类型、结构类型和共用类型和枚举型四种。3.指针类型。4.空类型C语言中的数据,有常量和变量之分,它们分别属于上述这些类型。本节将介绍基本类型中的整型、实型和字符型三种数据。Return泵迄范迫播胁拼腕击铡陇舵瞩用遍彰久撞猴迈诧榆嫌优浮耸娥牺奉缀静考一章数据类型与表
17、达式一章数据类型与表达式数据类型总表C数据类型基本类型构造类型构造类型指针类型指针类型空类型空类型void定义类型定义类型typedef字符类型char枚举类型enum整 型实型单精度型float双精度型double数组结构体struct共用体union短整型short长整型long整型int数据类型决定:1. 数据占内存字节数2. 数据取值范围3. 其上可进行的操作1.2 数据类型此殉赣仁楼折涤秩跋钉诚费叁浊野朋沦目题哆糠赚赢疫以候崩粉嚎堑疟萍一章数据类型与表达式一章数据类型与表达式类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int16-3276832767(sign
18、ed)short16-3276832767(signed)long32-2147483648214748364716unsigned int0655353204294967295unsigned longunsigned short16065535有float323.4e-383.4e38有double641.7e-3081.7e308有char8-128127无unsigned char80255说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例:请看int和unsigned int基本数据类型有float323.4e-383.4e38莽对败炭夹蜀魔忍道凭俞椰旷材代创枢深
19、谆识漾乓肆床汰炒裙理袱东屏该一章数据类型与表达式一章数据类型与表达式标识符定义:用来标识变量、常量、函数等的字符序列组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线大小写敏感不能使用关键字长度:最长32个字符命名原则:见名知意不宜混淆 如l与I, o与0例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char ab _above $123M.D.John3days#33char$123ab1.3 常量与变量渴凤陵嘛死鸣悼隶恤庶姻惹豁鳃队饰捅捣豆枉史暮翁唆泉监朔锰验戚兑水一章数据
20、类型与表达式一章数据类型与表达式一般用大写字母是宏定义预处理命令,不是C语句直接常量:整型常量 请点击:实型常量 请点击:字符常量 请点击:字符串常量 请点击:如 #define PRICE 30定义:程序运行时其值不能改变的量(即常数)分类:符号常量:用标识符代表常量定义格式: #define 符号常量 常量例 符号常量举例(ch2_1.c)#define PRICE 30main() int num,total; num=10; total=num*PRICE; printf(total=%d,total);运行结果:total=300常量省耕烦佑舵架坷身典渐哈邢肃颗酞铜拍情轰唐搁霹则残电
21、乃奋脏搞恍闲薛一章数据类型与表达式一章数据类型与表达式三种形式:十进制整数:由数字09和正负号表示.如 123,-456,0八进制整数:由数字0开头,后跟数字07表示.如0123,011十六进制整数:由0x开头,后跟09,af,AF表示. 如0x123,0Xff例 12 与 12L例 30000 为int型 65536 为long int 型整型常量的类型根据其值所在范围确定其数据类型在整常量后加字母l或L,认为它是long int 型常量问题:0123 = ( )100x123 = ( )100Xff = ( )1083291255问题:0123 = ( )100x123 = ( )100X
22、ff = ( )10整型常量(整常数)整型常量(整常数)撞尝万魄谤烟买琼若国羌睁瞒圃脸肉胀斟夕魏藩练纤噶堤增后骡贡祈虎猪一章数据类型与表达式一章数据类型与表达式表示形式:十进制数形式:(必须有小数点) 如0.123, .123, 123.0, 0.0, 123.指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3 ,123E2, 1.23e4 , e-5 , 1.2E-3.5 实型常量的类型默认double型在实型常量后加字母f或F,认为它是float 型实型常量(实数或浮点数)实型常量(实数或浮点数)疆宁择痹袋挝毅储潭例烩璃案觅您装弟愚斩篮缆匣待岩苍揣三妮趟总臼卑一章数据类型与表
23、达式一章数据类型与表达式定义:用单引号单引号括起来的单个普通字符或转义字符. 字符常量的值:该字符的ASCII码值转义字符及其含义:转义字符含义nvradddtbf“xhh转义字符含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符如 101 -A 012 -n 376 - x61 -a 60 -0 483 -()例:A-101-x41-65如 A65, a97, 048 , n10如 a A ? n 101转义字符:反斜线后面跟一个字符或一个代码值表示例 转义字符举例(ch2_001.c,ch2_004.c) main() printf(1
24、01 x42 Cn); printf(I say:How are you?n); printf(C Programn); printf(Turbo C);运行结果:(屏幕显示)A B CIsay:”How are you?”C ProgramTurbo C字符常量字符常量字镜刑澄协气辕郑窥披仰飘锤瘴圭札价恍邵特萝禾霖驮名喝萤僵贝凑呢攻一章数据类型与表达式一章数据类型与表达式23aaa字符常量与字符串常量不同定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个 0 作为字符串结束标志h e l l o 0例 字符串“hello”在内存中a a 0例 a“a”例 空串 “”0例: c
25、har ch; ch=“A”; 例: char ch; ch=A; 字符串常量字符串常量棺群姨块果么瑟萄那昂猛扯汲蒙陌搀康桂痔耍菩辐乾流秘鲍躯畦门总做骇一章数据类型与表达式一章数据类型与表达式编译程序根据变量定义为其分配指定字节的内存单元.地址int a=1, b=-3,c;abc2字节2字节2字节地址地址.内存1-3随机数概念:其值可以改变的量变量名与变量值变量定义的一般格式: 数据类型 变量1,变量2,变量n;变量初始化:定义时赋初值 例: int a,b,c; float data;决定分配字节数和数的表示范围合法标识符例: int a=2,b,c=4; float data=3.67;
26、 char ch=A; int x=1,y=1,z=1; int x=y=z=1;变量的使用:先定义,后使用例1 int student; stadent=19; /Undefined symbol stadent in function main 例2 float a,b,c; c=a%b; /Illegal use of floating point in function main 变量定义位置:一般放在函数开头main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%fn”,data);变量定义可执行语句main(
27、) int a,b=2; a=1; float data; data=(a+b)*1.2; printf(“data=%fn”,data);变量变量于腥殷钮忘厅化杀握征代簧赏矩芒壁宫饼迹壁炳口贺铝戊陨袄著寄掀披其一章数据类型与表达式一章数据类型与表达式占字节数随机器不同而不同,一般占一个机器字shortintlong可用sizeof(类型标识符)测量 实型变量实型变量float:占4字节,提供7位有效数字double:占8字节,提供1516位有效数字字符型变量字符型变量字符变量存放字符ASCII码char与int数据间可进行算术运算例1: float a; a=111111.111; /* a
28、=111111.1*/例2: double b; b=111111.111; /* b=111111.111*/例 a=D; /* a=68; */ x=A+5; /* x=65+5; */ s=!+G /* s=33+71; */没有字符串变量,用字符数组存放整型变量整型变量摘童摧义睦椰凄鼎啊砚弛泅东束罐畅拎税揖公詹葬嘛据镐垦凋瓤念座左民一章数据类型与表达式一章数据类型与表达式/*ch2_003.c*/ #define PRICE 12.5 main() int num=3; float total; char ch1,ch2=D; total=num*PRICE; ch1=ch2-A+a;
29、 printf(“total=%f,ch1=%cn”,total,ch1); 宏定义变量定义输出结果运行结果:total=37.500000, ch1=d例子宏缩啊丰武西琐亮停桃褐种猜胜礁耽抬拎低纱你腿粹少据国跟轻勋演蒋疽一章数据类型与表达式一章数据类型与表达式C运算符算术运算符:(+ - * / % + -)关系运算符:( = !=)逻辑运算符:(! & |)位运算符 :( | &)赋值运算符:(= 及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(* &)求字节数 :(sizeof)强制类型转换:(类型)分量运算符:(. -)下标运算符:()其它 :(( ) -)1.4 C语言
30、的运算符和表达式擎岗瞄坊垦霸杏侣苔梳安需骆绚绳颐镜衙芒促聋漆咋壹晌栈绵钠账电辕膳一章数据类型与表达式一章数据类型与表达式基本算术运算符: + - * / %结合方向:从左向右优先级: - -* / % - + - (2) (3) (4)说明:“-”可为单目运算符时,右结合性两整数相除,结果为整数%要求两侧均为整型数据例 5/2 = -5/2.0 =例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2算术运算符和表达式2-2.51-110()奢焚泰意乍工痊腥艺慨藏余耸沥夷思急苯液钦榷饺廖响慑用蜗渐窝怨深阎一章数据类型与表达式一章数据类型与表达式作用:使变量值加1或减1种类:前置 +
31、i, -i (先执行i+1或i-1,再使用i值)后置 i+,i- (先使用i值,再执行i+1或i-1)例 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=5;c=(a+)*b; /k=4,j=4/k=3,j=4/4/3/c=20,a=4/c=15,a=4自增、自减运算符+ -窥躺惭曝诛娘顾沟受慨镁念隐帕靠造块蔽温同芳岿滋芯横娶泪钵刘迁撞皋一章数据类型与表达式一章数据类型与表达式作用:使变量值加作用:使变量值加1 1或减或减1 1种类:种类:前置前置 +i, -i
32、( +i, -i (先执行先执行i+1i+1或或i-1i-1,再使用,再使用i i值)值)后置后置 i+,i- ( i+,i- (先使用先使用i i值值, ,再执行再执行i+1i+1或或i-1i-1)说明:说明:+ - + - 不能用于常量和表达式不能用于常量和表达式, ,如如5+5+,(a+b)+(a+b)+ -+ -结合方向:结合方向: 自右向左自右向左优先级:优先级:- + - -* / % -+ - + - -* / % -+ - (2) (3) (4)例 -i+ -(i+) i=3; printf(“%d”,-i+); /-3 例 j+k; (j+)+k;例例 -i+ -i+ i=3
33、; printf( i=3; printf(“%d%d”,-i+);,-i+); 自增、自减运算符自增、自减运算符+ -+ -凿镣篱两曰殖兆崖范翅条夸帖彬限迭虫肮怖酉咕串腆雕驳予匆眨戒翁套姆一章数据类型与表达式一章数据类型与表达式例如: x = ( x+ ) +( x+ ); ( x = 2 ) 因为 + 运算符在变量 x 的后面,为后增运算,所以先访问 x 再 + 1,该算式可以分解为如下几步: x = x + x; x = 2 + 2 = 4; x+; x = x + 1 = 4 + 1 = 5; x+; x = x + 1 = 5 + 1 = 6; 运算结果为 x = 6;购项砰棠腹暴省
34、乔迈艳几郑绕半文烩群殿狰董作榷嗣谢纲志惊漱婚腑亡阮一章数据类型与表达式一章数据类型与表达式若上例改为如下: y = (x+) +( x+);可以分解为: ;例:()();可以分解为:;掷屡议卵弯世社痉晴钳笼窖黔挪停咯鹃毫尤朗瞪寝亮皆利毗教魁苞湘够香一章数据类型与表达式一章数据类型与表达式简单赋值运算符符号: =格式: 变量标识符=表达式作用:将一个数据(常量或表达式)赋给一个变量复合赋值运算符种类:+= -= *= /= %= = = &= = |=含义: exp1 op= exp2 exp1 = exp1 op exp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例 a
35、=3; d=func(); c=d+2;赋值运算符和表达式叠床曝捡截燎隙钻谐性闻艺玄岳粕芜向板晰煌裕烈惨宫旺梢吸络翟恐他货一章数据类型与表达式一章数据类型与表达式结合方向:自右向左优先级: 14左侧必须是变量,不能是常量或表达式赋值表达式的值与变量值相等,且可嵌套赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型例 3=x-2*y; a+b=3;例 float f; int i; i=10; f=i;则 f=10.0例 int i; i=2.56; /结果i=2;例: a=b=c=5 a=(b=5) a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2)/表达式
36、值为5,a,b,c值为5/ b=5;a=5/表达式值11,c=6,a=11/表达式值10,a=10,b=4,c=6/表达式值5,a=5,b=10,c=2说明(说明(1 1):):嘘洒负柴粤涉掷没坞融戏禹抗堑其销鸵碳钥蕴与热藉想搏恤踞醋屿您孙徊一章数据类型与表达式一章数据类型与表达式 结合方向:自右向左 优先级: 14 左侧必须是变量,不能是常量或表达式赋值表达式的值与变量值相等,且可嵌套赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型例: a=12; a+=a-=a*a例: int a=2; a%=4-1; a+=a*=a-=a*=3; /a=-264 等价于a=a+(a=a-(a
37、*a)/a=0 等价于a=a+(a=a*(a=a-(a=a*3)说明说明(2 2): :赋值运算符的优先级只高于逗号运算符,比其他运算符都低凄吧沙臼赢獭任眠码短怎钎垃廓销夕氖疫堂恶湍暗肢智今皿隧晦滁把泻渗一章数据类型与表达式一章数据类型与表达式形式:表达式1,表达式2,表达式n结合性:从左向右优先级: 15逗号表达式的值:等于表达式n的值用途:常用于循环for语句中逗号运算符的优先级最低。例 a=3*5,a*4 a=3*5,a*4,a+5例 x=(a=3,6*3) x=a=3,6*a例 a=1;b=2;c=3; printf(“%d,%d,%d”,a,b,c); printf(“%d,%d,%
38、d”,(a,b,c),b,c); /a=15,表达式值60/a=15,表达式值20/赋值表达式,表达式值18,x=18/逗号表达式,表达式值18,x=3/1,2,3/3,2,3逗号运算符和表达式例:/*ch2_6.c*/#include main() int x,y=7; float z=4; x=(y=y+6,y/z); printf(x=%dn,x);运行结果:x=3自左至右,依次计算各表达式的值,“表达式n” 的值即为整个逗号表达式的值。具帽软肢山陀幽尘二嚣迈酷洞擎巨蔡通医汝涎阅鼓崇吴逾眷勉绿豁扒复吸一章数据类型与表达式一章数据类型与表达式关系运算符种类: = !=结合方向:自左向右优先
39、级别:=!=优先级6(高)优先级7(低)例 ca+b /c(a+b) ab!=c /(ab)!=c a=bc /a=(bc /a=(bc)关系表达式的值:是逻辑值“真”或“假”,用1和0表示例 int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc/表达式值1/表达式值1/表达式值0/d=1/f=0关系运算符和表达式瞻揭静泳悦但妥曼挞勃跳桔誓郴最偷腰购拨肘绍疆荧傅梢棉忌症彦尹弛渐一章数据类型与表达式一章数据类型与表达式例 若a=0; b=0.5; x=0.3; 则 a=x278在C中是允许的, 值为0例 int i=1, j=7,a; a=i+(j%4!=0); 则
40、a=2例 a0 结果为 A100 结果为10关系运算注意(1)慎洪奖暂蹦篓遣陀扼仕晶云椎晾服趣冀您咽铀锐鳃瞩凛拙写煮酥膀潍妥娄一章数据类型与表达式一章数据类型与表达式例 注意区分“=”与“=” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);例 应避免对实数作相等或不等的判断如 1.0/3.0*3.0=1.0 结果为可改写为:fabs(1.0/3.0*3.0-1.0)1e-60关系运算注意(2)紊位穗隋壮蜒满联响抉非橙萨拯书踏勒酚窗殖骚哥悲揣吝鉴官衣玖淑忆捕一章数据类型与表达式一章数据类型
41、与表达式ab!a!ba&ba|b真假真假假假真真逻辑运算符种类: ! & |逻辑运算真值表C语言中,运算量: 0表示“假”, 非0表示“真”, 运算结果: 0表示“假”, 1表示“真”,真假假假假假真真假假真真真假真真逻辑运算符和表达式(1)庙傣熙棕爷斧防客疡毗码徐祟烽某进褒旱背家蒜厂跨盯植浴锭吴熬跟檀崔一章数据类型与表达式一章数据类型与表达式! (2)& (11)| (12)高低例 a=x & xb&xy a=b|x=y !a|abl优先级:l结合方向:! :从右向左& :从左向右| :从左向右/ (a=x) & (xb)&(xy)/(a=b)|(x=y)/(!a)|(ab)逻辑运算符和表达
42、式(2)鸦吹舶淋脾艰替砾拾锌豢矽刚镐致形巧公生贞图炉微赘曰徽侩肯陌靶咒食一章数据类型与表达式一章数据类型与表达式! (2)& (11)| (12)高低l优先级:l结合方向:! :从右向左& :从左向右| :从左向右例 a=4;b=5; !a a&b a|b !a|b 4&0|2 53&2|83)&2|(8(4-(!0) 值为1逻辑运算符和表达式(3)割坊媒笺袱驱淤烦弃嗅哺措茬峭帐眩筛争雁腺自铰概洒阻铡渣蝶膛圭田侮一章数据类型与表达式一章数据类型与表达式! (2)& (11)| (12)高低l优先级:l结合方向:! :从右向左& :从左向右| :从左向右短路特性:逻辑表达式求解时,并非所有的逻辑
43、运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符例 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=1逻辑运算符和表达式(逻辑运算符和表达式(4)吩聚矢掘兜涛早七催卯妙缔袋杆拢耶姓哆炳烘璃厌狠阐兄圈桔幻楞尼蚌慨一章数据类型与表达式一章数据类型与表达式一般形式: expr1 ? expr2 : expr3执行过程功能:相当于条件语句,但不能取代一般if语句
44、例 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);expr1取expr2值取expr3值非0=0例 (a=b)?Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a & c0?1:(xb?a:cd?c:d ab?a:(cd?c:d)expr1、expr2、expr3类型可不同,表达式值取较高的类型例 x?a:b /x=0,表达式值为b; x0,表达式值为a xy?1:1.5 /xy ,值为1.0; xy ,值为1.5条件运
45、算符与表达式秸死泅涩梨躺兹客怨甚理谐魂箍弥桃酸解咒决障少择军激伍晃鸵挝岔式绅一章数据类型与表达式一章数据类型与表达式位运算参加运算的操作数必须为整数或字符型。参加运算的操作数必须为整数或字符型。参加运算的操作数必须为整数或字符型。参加运算的操作数必须为整数或字符型。按照整数中的二进制位为单位进行运算。按照整数中的二进制位为单位进行运算。按照整数中的二进制位为单位进行运算。按照整数中的二进制位为单位进行运算。运算结果运算结果运算结果运算结果计算结果为整数。计算结果为整数。计算结果为整数。计算结果为整数。&(&(与与与与) |() |(或或或或) () (异或异或异或异或) () (反反反反, ,
46、 一元一元一元一元) )() (右移右移右移右移) )运算过程运算过程运算过程运算过程运算符号运算符号运算符号运算符号运算要求运算要求运算要求运算要求北途瘁某渝嘱冻簧篮笆销钩侦瘴试很异擎处役抛釉棚菊杠滥怀报赵窘廷爬一章数据类型与表达式一章数据类型与表达式位式运算的运算规则&位式与:对位式与:对a&b,仅当,仅当a、b的对应位均的对应位均为为 1 ,结果该位为,结果该位为 1,否则该位为,否则该位为0。举例:举例:3&5=0011&0101=0001=1 |位式或:对位式或:对a|b, 只要只要a、b的对应位有一的对应位有一个为个为 1 ,结果该位为,结果该位为 1,否则该位为,否则该位为0。举
47、例:举例:3|5=0011|0101=0111=7位式异或:对位式异或:对ab, 仅当仅当a、b的对应位的对应位相反时相反时 ,结果该位为,结果该位为 1,否则该位为,否则该位为0。举例:举例:35=00110101=0110=6位式取反:对应操作数每位上的位式取反:对应操作数每位上的0, 结结果该位为果该位为 1,否则该位为,否则该位为0。举例:举例:5=0000 0101=1111 1010左移位:对左移位:对an, 将操作数将操作数a左移左移n位,位,高位左移后溢出,舍弃不起作用,低位高位左移后溢出,舍弃不起作用,低位填填0补位。补位。举例:举例:152=00001111n, 将操作数将
48、操作数a右移右移n位,位,对有符号数来说,左边空位填符号位的对有符号数来说,左边空位填符号位的值,称算术移位;对无符号数,左边空值,称算术移位;对无符号数,左边空位填位填0,称逻辑移位。,称逻辑移位。举例:举例:52=000001012=00000001 -52=111110112=11111110 优先级优先级按按、移位、移位、&、| 顺序优先级递减。顺序优先级递减。每泵仍悸琅缘测诗聊护凋竭蜗姓酥乙庇渤晓者讥嘱活岸庸衙拖焚酌痊丸署一章数据类型与表达式一章数据类型与表达式运算符的优先顺序1(), ,-,.2!, ,+,-, - ,*, sizeof, (type)3* / %4+ -56 ,
49、, =7= , != 8&910|11&12|13? :14=,+=,-=,*=,/=,%=,=,=,&=,=,|=15,秸最芒奖江剥苦补淆舞门熙炕晋蛇否审剪就财饶什燎强右趾模根熄贸势裴一章数据类型与表达式一章数据类型与表达式 各种数据类型之间的混合运算l数据参加运算前必须进行下列转换:char,shortint,floatdoublel混合运算时,数据类型由低级高级:int unsigned long double低 高注意:上图并不意味着注意:上图并不意味着int必须到必须到unsigned再到再到long的依次转换,而是由算式中的最高级进行转换的。的依次转换,而是由算式中的最高级进行转换
50、的。对于混合运算,大家从小学都已经掌握,如先乘除,后加减对于混合运算,大家从小学都已经掌握,如先乘除,后加减等等,但在等等,但在C语言中,我们说的混合运算,是指变量类型之语言中,我们说的混合运算,是指变量类型之间的优先级。间的优先级。呐队赏继鳞酞由盔米噬绦显酵盖宽栽凯旷释热张垣烯陶班砂撤础芹矾忽耻一章数据类型与表达式一章数据类型与表达式例:不同类型数据混合运算时的类型转换定义: int i; float f; double d; long e;运算次序:38+ e + i*f - d/e 38+101 转换为double 转换为double 再相乘 再相除 139double 最后结果为最后结
51、果为double注意:上述类型转换是由系统自动进行的注意:上述类型转换是由系统自动进行的吮涕蓖虎指每青胃无库惰庐芭迹凰叮技蕾岿囊累凤挽瘤银抠哪馒讨无陡鸵一章数据类型与表达式一章数据类型与表达式隐式转换什么情况下发生运算转换-不同类型数据混合运算时赋值转换-把一个值赋给与其类型不同的变量时输出转换-输出时转换成指定的输出格式函数调用转换-实参与形参类型不一致时转换运算转换规则:不同类型数据运算时先自动转换成同一类型不同类型数据间的转换程凹喊翌凋辉芹看制读舱涅盐禹厄警舆图檄舍仓螺出鲸墩碎材掠乍玛害屎一章数据类型与表达式一章数据类型与表达式doublefloatlongunsignedintchar
52、,short低高说明:必定的转换运算对象类型不同时转换 char ch; int i; float f; double d;ch/i + f*d - (f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+a +i*f - d/l例2 int i; float f; double d; long l;例1漠树荧李臀晃瞅吟淀售焚逞烦戒蓑馈猿爹菏乏凋白除篓敢侍坤出箔题吴刁一章数据类型与表达式一章数据类型与表达式一般形式:一般形式:(类型名)(类型名)(表达式)表达式) 例
53、例: (int)(x+y): (int)(x+y) (int)x+y (int)x+y (double)(3/2) (double)(3/2) (int)3.6 (int)3.6 说明:强制转换得到所需类型的中间变量,原说明:强制转换得到所需类型的中间变量,原变量类型不变变量类型不变 例 main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); 结果:x=3.600000,i=3较高类型向较低类型转换时可能发生精度损失问题显式转换(强制转换)显式转换(强制转换)澈启跳梳蓉镁菩链秃寞跟润捶蝇绦簧彤捻乐净饮秧脐秸萄障俘虱殊挝痹肢一章数据类型与表达式一章数据类型与表达式