《C语言第三章-顺序程序设计.ppt》由会员分享,可在线阅读,更多相关《C语言第三章-顺序程序设计.ppt(113页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第三章 顺序程序设计一个程序例3.1 编程实现对输入的一个数,输出其绝对值void main()float x,abs;scanf(“%f”,&x);/输入这个数 if(x0)/*实现求绝对值*/abs=-x;else abs=x;printf(“%f的绝对值是%f”,x,abs);/输出结果C程序的编写n正确的解题思路(正确的设计)n掌握C的基本语法n完成程序设计3.1 顺序程序设计n输入n处理n输出nP37-383.2 数据的表现形式及其运算n3.2.1 数据的表现形式-常量与变量一、常量与符号常量一、常量与符号常量n字面常量:123,-78.90,n,a,”a”,”hellon”n整型常
2、量,实型常量,字符常量,字符串常量n符号常量:#define PI 3.1415926 则:PI*r 3.1415926*r 符号常量格式:n#define 标识符 字符串/符号串n枚举常量:enum response no,yes,none;enum response answer;则answer的值只能取 no(0),yes(1),none(2)下面4组常量,合法的一组C语言常量是 _A0B10C.01D0.10 x1010L3E+02E+9E1a ttta0t012二、标识符和变量二、标识符和变量n标识符标识符n n标识符可用作变量名、符号名、函数名、数组名、文标识符可用作变量名、符号名
3、、函数名、数组名、文标识符可用作变量名、符号名、函数名、数组名、文标识符可用作变量名、符号名、函数名、数组名、文件名以及一些具有专门含义的名字。件名以及一些具有专门含义的名字。件名以及一些具有专门含义的名字。件名以及一些具有专门含义的名字。n n合法的标识符合法的标识符合法的标识符合法的标识符由字母、数字和下划线组成,并且第一由字母、数字和下划线组成,并且第一由字母、数字和下划线组成,并且第一由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,且不能与关键词重名。个字符必须为字母或下划线,且不能与关键词重名。个字符必须为字母或下划线,且不能与关键词重名。个字符必须为字母或下划线,且不能
4、与关键词重名。n n下面的标识符都是合法的:下面的标识符都是合法的:下面的标识符都是合法的:下面的标识符都是合法的:n n a sum s1 product average pi _int si3q a sum s1 product average pi _int si3qn n下面的标识符是非法的:下面的标识符是非法的:下面的标识符是非法的:下面的标识符是非法的:n n 4A _$A x.y S#10 -init float 4A _$A x.y S#10 -init float二、标识符和变量二、标识符和变量n变量变量n n(1)定义:值在程序运行期间可改变的量叫定义:值在程序运行期间可改
5、变的量叫变量变量。n n(2)变量名:采用标识符规范变量名:采用标识符规范n n(3)变量的使用:变量的使用:n n先定义后使用先定义后使用先定义后使用先定义后使用n n定义变量通常在程序的开始进行,变量的定义变量通常在程序的开始进行,变量的定义变量通常在程序的开始进行,变量的定义变量通常在程序的开始进行,变量的定义格式定义格式定义格式定义格式为:为:为:为:n n 类型名类型名类型名类型名 变量表;变量表;变量表;变量表;n n或或或或 类型名类型名类型名类型名 变量名变量名变量名变量名1=1=表达式表达式表达式表达式1,1,变量名变量名变量名变量名2=2=表达式表达式表达式表达式2,.,2
6、,.,变量变量变量变量名名名名n=n=表达式表达式表达式表达式n;n;例如:例如:例如:例如:int a,b,c=10;int a,b,c=10;int a,b,c=10;int a,b,c=10;char c1,c2=A;char c1,c2=A;char c1,c2=A;char c1,c2=A;(4 4 4 4)变量的图形表示:)变量的图形表示:)变量的图形表示:)变量的图形表示:变变变变量量量量一一一一旦旦旦旦定定定定义义义义后后后后,计计计计算算算算机机机机内内内内存存存存由由由由系系系系统统统统自自自自动动动动为为为为其其其其开开开开辟了一个存储空间。辟了一个存储空间。辟了一个存储
7、空间。辟了一个存储空间。变量类型变量类型变量类型变量类型变量表变量表变量表变量表例如:例如:例如:例如:int a,b,c=10;int a,b,c=10;int a,b,c=10;int a,b,c=10;char c1,c2=A;char c1,c2=A;char c1,c2=A;char c1,c2=A;上述定义的变量可用图形表示如下:上述定义的变量可用图形表示如下:上述定义的变量可用图形表示如下:上述定义的变量可用图形表示如下:变量类型变量类型变量类型变量类型变量表变量表变量表变量表abc10变量名变量名变量名变量名变量名既表示了变量的名称变量名既表示了变量的名称变量名既表示了变量的名
8、称变量名既表示了变量的名称还表示了该变量在内存中的还表示了该变量在内存中的还表示了该变量在内存中的还表示了该变量在内存中的地址位置地址位置地址位置地址位置变量的内容(内容)变量的内容(内容)变量的内容(内容)变量的内容(内容)变量的内容就是变量在内变量的内容就是变量在内变量的内容就是变量在内变量的内容就是变量在内存中的存储空间,用于存存中的存储空间,用于存存中的存储空间,用于存存中的存储空间,用于存放具体的数据。放具体的数据。放具体的数据。放具体的数据。例如:例如:例如:例如:int a,b,c=10;int a,b,c=10;int a,b,c=10;int a,b,c=10;char c1
9、,c2=A;char c1,c2=A;char c1,c2=A;char c1,c2=A;(5 5 5 5)变量的类型)变量的类型)变量的类型)变量的类型n占用不同的内存大小占用不同的内存大小占用不同的内存大小占用不同的内存大小n支持不同的运算支持不同的运算支持不同的运算支持不同的运算 不不不不同同同同类类类类型型型型的的的的变变变变量量量量存存存存放放放放相相相相应应应应类类类类型型型型的的的的数数数数据据据据。不不不不同同同同类类类类型型型型的的的的数数数数据据据据除了特别情况,一般不能存放在不是相同类型的变量中。除了特别情况,一般不能存放在不是相同类型的变量中。除了特别情况,一般不能存放
10、在不是相同类型的变量中。除了特别情况,一般不能存放在不是相同类型的变量中。变量类型变量类型变量类型变量类型变量表变量表变量表变量表三三 常变量常变量nC99允许使用n格式:const 数据类型 变量名=初值nconst int a=3;n区别:n#define PI 3.14nconst float pi=3.143.2.2 C语言的数据类型一、为何引入数据类型n不同类型的数据有不同的区别n数据表现形式n合法取值范围n占用内存大小n支持的运算方式3.2.2 C语言的数据类型3.2.3 整型常量n(1)整型常量n十进制 123,-4589,+7,0n八进制 021,-011,073,0123等n
11、十六进制 0 x12,0X1f,-0 xa1等n各种整型常量如:1024l,67890L,256u,123,021,0 x12(2)整形变量n n.整数在内存中的存储整数在内存中的存储n n.整型变量的分类整型变量的分类n n.整型变量的定义与使用整型变量的定义与使用.整数在内存中的存储形式整数在内存中的存储形式整数在内存中的存储形式整数在内存中的存储形式 (类型的内存形式)(类型的内存形式)(类型的内存形式)(类型的内存形式)计算机内存的组织形式计算机内存的组织形式计算机内存的组织形式计算机内存的组织形式00000H00001H00002H00003HFFFFEHFFFFFH0 1 0 1
12、0 0 1 01 1 0 1 0 1 1 1存储单元存储单元存储单元存储单元地址地址地址地址存储单元存储单元存储单元存储单元内容内容内容内容内内内内存存存存一个字节(一个字节(一个字节(一个字节(bytebyte)一个字(一个字(一个字(一个字(wordword)二进制位二进制位二进制位二进制位(bitbit)整整整整数数数数的的的的存存存存储储储储 C C C C语语语语言言言言中中中中,一一一一个个个个intintintint整整整整数数数数通通通通常常常常用用用用两两两两个个个个字字字字节节节节(16(16(16(16位位位位)存存存存放放放放;其其其其中中中中最最最最高高高高位位位位(
13、最最最最左左左左边边边边的的的的一一一一位位位位)用用用用来来来来存存存存放放放放整整整整数数数数的的的的符符符符号号号号,若若若若是是是是正正正正数,最高位放置数,最高位放置数,最高位放置数,最高位放置0 0 0 0,若是负数,最高位放置,若是负数,最高位放置,若是负数,最高位放置,若是负数,最高位放置1 1 1 1。00000H00001H00002H00003HFFFFEHFFFFFH0 0 0 0 1 0 1 00 0 0 0 0 0 0 0存储单元地址存储单元地址存储单元地址存储单元地址存储单元内容存储单元内容存储单元内容存储单元内容ainta;inta;aintainta10;10
14、;10整数的存储整数的存储整数的存储整数的存储 C C C C语言中,一个语言中,一个语言中,一个语言中,一个intintintint整数通常用两个字节整数通常用两个字节整数通常用两个字节整数通常用两个字节(16(16(16(16位位位位)存放;其中最高位(最左边的一位)用来存放整数的符号,若存放;其中最高位(最左边的一位)用来存放整数的符号,若存放;其中最高位(最左边的一位)用来存放整数的符号,若存放;其中最高位(最左边的一位)用来存放整数的符号,若是正数,最高位放置是正数,最高位放置是正数,最高位放置是正数,最高位放置0 0 0 0,若是负数,最高位放置,若是负数,最高位放置,若是负数,最
15、高位放置,若是负数,最高位放置1 1 1 1。00000H00001H00002H00003HFFFFEHFFFFFH1 1 1 1 0 1 1 01 1 1 1 1 1 1 1存储单元地址存储单元地址存储单元地址存储单元地址存储单元内容存储单元内容存储单元内容存储单元内容aintainta10;10;a10无无无无符符符符号号号号整整整整数数数数的的的的存存存存储储储储:一一一一个个个个无无无无符符符符号号号号整整整整数数数数通通通通常常常常也也也也是是是是用用用用两两两两个个个个字字字字节节节节存存存存放放放放,但最高位就不是符号位了,它和其他位一起构成了数值位。但最高位就不是符号位了,它
16、和其他位一起构成了数值位。但最高位就不是符号位了,它和其他位一起构成了数值位。但最高位就不是符号位了,它和其他位一起构成了数值位。00000H00001H00002H00003HFFFFEHFFFFFH1 1 1 1 1 1 1 11 1 1 1 1 1 1 1存储单元地址存储单元地址存储单元地址存储单元地址存储单元内容存储单元内容存储单元内容存储单元内容aunsignedshortaunsignedshorta65535;65535;a65535注意注意注意注意:整数在计算机内:整数在计算机内:整数在计算机内:整数在计算机内存是以所谓存是以所谓存是以所谓存是以所谓“补码补码补码补码”形形形形
17、式存放的。式存放的。式存放的。式存放的。补补码码1.1.1.1.计算机内数据存放的形式计算机内数据存放的形式计算机内数据存放的形式计算机内数据存放的形式 用户所见的数据一般是以用户所见的数据一般是以用户所见的数据一般是以用户所见的数据一般是以十进制或字符十进制或字符十进制或字符十进制或字符形式表现的。但在形式表现的。但在形式表现的。但在形式表现的。但在计算机内部则只能以二进制形式存放才能让计算机能够识别。计算机内部则只能以二进制形式存放才能让计算机能够识别。计算机内部则只能以二进制形式存放才能让计算机能够识别。计算机内部则只能以二进制形式存放才能让计算机能够识别。由此带来如下几个问题:由此带来
18、如下几个问题:由此带来如下几个问题:由此带来如下几个问题:1)1)1)1)如何将十进制(或字符)数据转换为二进制?如何将十进制(或字符)数据转换为二进制?如何将十进制(或字符)数据转换为二进制?如何将十进制(或字符)数据转换为二进制?2)2)2)2)计算机内的二进制数据是如何组织的?计算机内的二进制数据是如何组织的?计算机内的二进制数据是如何组织的?计算机内的二进制数据是如何组织的?3)3)3)3)如何将二进制数据转换为十进制(或字符)?如何将二进制数据转换为十进制(或字符)?如何将二进制数据转换为十进制(或字符)?如何将二进制数据转换为十进制(或字符)?2.2.2.2.计算机内二进制数据的组
19、织形式计算机内二进制数据的组织形式计算机内二进制数据的组织形式计算机内二进制数据的组织形式(1 1 1 1)计算机内的二进制数据必须以字节、字等为单位进行组织。)计算机内的二进制数据必须以字节、字等为单位进行组织。)计算机内的二进制数据必须以字节、字等为单位进行组织。)计算机内的二进制数据必须以字节、字等为单位进行组织。例如:数据例如:数据例如:数据例如:数据 10 10 10 10 (十进制形式)(十进制形式)(十进制形式)(十进制形式)转换为转换为转换为转换为 1010 1010 1010 1010 (二进制形式)(二进制形式)(二进制形式)(二进制形式)存放在计算机内则为:存放在计算机内
20、则为:存放在计算机内则为:存放在计算机内则为:00001010 00001010 00001010 00001010 (一个字节的二进制)(一个字节的二进制)(一个字节的二进制)(一个字节的二进制)或或或或 0000000000001010 0000000000001010 0000000000001010 0000000000001010 (一个字的二进制)(一个字的二进制)(一个字的二进制)(一个字的二进制)(2 2 2 2)有符号数据的组织形式)有符号数据的组织形式)有符号数据的组织形式)有符号数据的组织形式 对于有符号数据,通常将数据位的最高位划分出来专门用对于有符号数据,通常将数据位
21、的最高位划分出来专门用对于有符号数据,通常将数据位的最高位划分出来专门用对于有符号数据,通常将数据位的最高位划分出来专门用于表示符号,即用于表示符号,即用于表示符号,即用于表示符号,即用“0”“0”“0”“0”表示表示表示表示“”,用,用,用,用“1”“1”“1”“1”表示表示表示表示“”。有符号数据的组织形式:有符号数据的组织形式:有符号数据的组织形式:有符号数据的组织形式:原原 码码 和和和和 补补 码码 原原 码码:符号位符号位符号位符号位 数值位数值位数值位数值位例如:例如:例如:例如:若用原码表示一个若用原码表示一个若用原码表示一个若用原码表示一个intintintint型整数(两个
22、字节即型整数(两个字节即型整数(两个字节即型整数(两个字节即一个字)一个字)一个字)一个字)十进制十进制十进制十进制1010原码原码原码原码 0 00000000000010100000000000010101010原码原码原码原码 1 1000000000001010000000000001010补补码(码(p41):正数的补码就是该正数的原码。正数的补码就是该正数的原码。正数的补码就是该正数的原码。正数的补码就是该正数的原码。负数的补码则需要转换:负数的补码则需要转换:负数的补码则需要转换:负数的补码则需要转换:先写出负数的原码,然先写出负数的原码,然先写出负数的原码,然先写出负数的原码,
23、然后将该原码中的符号位保持不变,将其他所有数值位后将该原码中的符号位保持不变,将其他所有数值位后将该原码中的符号位保持不变,将其他所有数值位后将该原码中的符号位保持不变,将其他所有数值位逐位取反,最后再加逐位取反,最后再加逐位取反,最后再加逐位取反,最后再加1 1 1 1。例如:例如:例如:例如:若用补码表示一个若用补码表示一个若用补码表示一个若用补码表示一个intintintint型整数(两个字节)型整数(两个字节)型整数(两个字节)型整数(两个字节)十进制十进制十进制十进制1010原码原码原码原码 0 0000000000001010000000000001010补码补码补码补码 0 00
24、000000000010100000000000010101010原码原码原码原码 1 10000000000010100000000000010101 1+1+1补码补码补码补码1 1考虑:考虑:-1在计算机中的存储?在计算机中的存储?.整型变量的分类整型变量的分类.整型变量的定义与使用整型变量的定义与使用.整型变量的定义与使用整型变量的定义与使用3.2.4字符型数据(1)字符型常量n字符:ASCII字符表(字母,数字,专门符号,空格,不能显示的字符)n普通字符常量 na A 0$n转义字符 以开始的字符nn t b ddd xddn字符串常量n“a”“hello”“hellon”&字符常量
25、n定义:用单引号括起来的单个普通字符或转义字符.n字符常量的值:该字符的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 101n转义字符:反斜线后面跟一个字符或一个代码值表示例 转义字符举例.main()printf(101 x42 Cn);printf(I say:How are you?n);pri
26、ntf(C Programn);printf(Turbo C);运行结果:(屏幕显示)A B CIsay:”How are you?”C ProgramTurbo C例 main()printf(“Yb=n”);运行结果:屏幕显示:=打印机输出:29n字符常量与字符串常量不同&字符串常量n定义:用双引号(“”)括起来的字符序列n存储:每个字符串尾自动加一个 0 作为字符串结束标志h e l l o 0例 字符串“hello”在内存中a a 0例 a“a”例 空串 “”0例:char ch;ch=“A”;例:char ch;ch=A;3.2.4字符型数据(2)字符型变量n在内存中的存放n只能存一
27、个字符,存储为该字符的ASCII码n如 char c=a;则n字符串的存储n同字符,增加了一个0n注意:n字符与字符串的存储和赋值区别则变量则变量则变量则变量c c在内存中的存放为在内存中的存放为在内存中的存放为在内存中的存放为字符字符字符字符ASCIIASCII码码码码一个一个一个一个字节字节字节字节97973.2.5浮点型数据(1)浮点型常量n十进制小数 n n如如 0.123,.123,123.0,5.0 0.123,.123,123.0,5.0n指数形式 数e/E整数n n如如 1.23 1.23e e3 3 或或 1.23 1.23E E3 3 表示表示1.23*101.23*103
28、 3n n注意:注意:注意:注意:n n 1)字母)字母e/Ee/E之前必须有数字,之前必须有数字,e/Ee/E后面必须为整数。后面必须为整数。如:如:e3、2.1e3.5、.e3、e都不是合法的指数形式都不是合法的指数形式。n 2)规范化的指数形式。在字母)规范化的指数形式。在字母e或或E之前的小数部分,小数之前的小数部分,小数点左边应当有且只能有一位非点左边应当有且只能有一位非0数字。数字。如:如:2.3478e2、3.0999E5、6.46832e12属规范化指数形式。属规范化指数形式。2.浮点型数据-(2)浮点型变量n在内存中的存放n规范化指数形式存n分类及定义使用浮点型数据-(2)浮
29、点型变量n浮点型数据的误差n舍入误差n比较误差3.2.6 不同类型变量的初始化n先定义,后赋值n定义变量的同时赋值混合运算及数据类型转换n隐式转换n什么情况下发生n运算转换-不同类型数据混合运算时n赋值转换-把一个值赋给与其类型不同的变量时n输出转换-输出时转换成指定的输出格式n函数调用转换-实参与形参类型不一致时转换n运算转换规则:不同类型数据运算时先自动转换成同一类型doublefloatlongunsignedintchar,short低高说明:必定的转换运算对象类型不同时转换例 char ch;int i;float f;double d;ch/i +f*d -(f+i)intintd
30、oubledoubledoubledoubledoubledoublen显式转换(强制转换)n一般形式:(类型名)(表达式)例 (int)(x+y)(int)x+y (double)(3/2)(int)3.6 n说明:强制转换不影响原变量类型。例 main()float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);结果:x=3.600000,i=3精确度损失问题较高类型向较低类型转换时可能发生思考或问答题:1、数据类型决定什么?2、整型变量、字符型变量和单精度变量在内存中各占几个字节?3、标识符的允许使用哪些符号?4、符号常量是怎样定义的?5、
31、字符型常量是怎样定义的?6、什么叫转义字符?7、字符串常量与字符常量有什么区别?8、整型变量与字符型变量可以通用?9、定义变量时是否可以赋初值?11、变量不定义可以直接使用吗?例如 main()int a=23,b=12;c=a+b;printf(“c=%d”,c);10、不同类型数据之间的转换规则是如何规定的?C语言的运算符 算术运算符:算术运算符:+-*/%+-+-*/%+-关系运算符:=!=逻辑运算符:!&|位运算符 :|&赋值运算符:赋值运算符:=及其扩展及其扩展条件运算符:?:逗号运算符:逗号运算符:,指针运算符:*&求字节数 :sizeof强制类型转换:(类型)强制类型转换:(类型
32、)分量运算符:.-下标运算符:其它 :()-n学习运算符应注意:n运算符功能运算符功能n与运算量关系与运算量关系n要求运算量个数 有双目运算、单目运算、三目运算n要求运算量类型 n运算符优先级别运算符优先级别 表达式按优先级次序运算 n结合方向结合方向 优先级相同时按结合方向运算 n结果的类型结果的类型一、算术运算符和算术表达式(p52)n基本算术运算符:基本算术运算符:+、-、*、/、%n结合方向:从左向右 取负 是右结合n优先级:-*、/、%-+、-(2)(3)(4)n说明:n“-”可为单目运算符时,为负号运算符,右结合性n两整数相除(/),结果为整数 n参加+、-、*、/运算的两个数中有
33、一个为实数,则结果是double型,因为所有的实数都按double型进行运算。n%要求两侧均为整型数据 例 5/2 =-5/2.0 =例 5%2 =-5%2 =1%10 =5%1 =5.5%2例 5/2 =2 -5/2.0=-2.5例 5%2 =1 -5%2 =-1 1%10 =1 5%1 =0 5.5%2 ()自增、自减运算符自增、自减运算符+-n作用:使变量值加1或减1n种类:n前置 +i,-i (先执行i+1或i-1,再使用i值)n后置 i+,i-(先使用i值,再执行i+1或i-1)n说明:n+-不能用于常量和表达式,如5+,(a+b)+n+-结合方向:自右向左n优先级:-+-+-*/%
34、*/%-+-+-(2)(3)(4)自增、自减的具体功能后缀形式后缀形式后缀形式后缀形式:如如如如a+aa+a 功能:功能:功能:功能:先取变量(如先取变量(如先取变量(如先取变量(如a a)的值作为整个表达式的结的值作为整个表达式的结的值作为整个表达式的结的值作为整个表达式的结果,之后再对变量(如果,之后再对变量(如果,之后再对变量(如果,之后再对变量(如a a)进行加进行加进行加进行加1 1(或减(或减(或减(或减1 1)也可以等价于:也可以等价于:也可以等价于:也可以等价于:a+a+aa和和和和aaa a1 1比如:比如:比如:比如:若设变量若设变量若设变量若设变量a a原来的内容为原来的
35、内容为原来的内容为原来的内容为1010,则,则,则,则 执行语句执行语句执行语句执行语句printfprintf(”d”d”,a+a+););););结果应为:?结果应为:?结果应为:?结果应为:?1010 但但但但a a a a的内容则为的内容则为的内容则为的内容则为11111111 printfprintf(”d”d”,a a););););a aa+1;a+1;自增、自减的具体功能前缀形式前缀形式前缀形式前缀形式:如如如如+a+a a a功能:功能:功能:功能:先对变量(如先对变量(如先对变量(如先对变量(如a a)进行加进行加进行加进行加1 1(或减(或减(或减(或减1 1),之后),
36、之后),之后),之后再取变量(如再取变量(如再取变量(如再取变量(如a a)的值作为整个表达式的结果。的值作为整个表达式的结果。的值作为整个表达式的结果。的值作为整个表达式的结果。也可以等价于:也可以等价于:也可以等价于:也可以等价于:+a+aa aa a11和和和和aa比如:比如:比如:比如:若设变量若设变量若设变量若设变量a a原来的内容为原来的内容为原来的内容为原来的内容为1010,则,则,则,则 执行语句执行语句执行语句执行语句printfprintf(”d”d”,+a+a););););结果应为:?结果应为:?结果应为:?结果应为:?1111 而而而而a a a a的内容也为的内容也
37、为的内容也为的内容也为11111111 a aa+1;a+1;printfprintf(”d”d”,a a););););例如:若例如:若例如:若例如:若intint型变量型变量型变量型变量a a的内容为的内容为的内容为的内容为3 3,则,则,则,则表达式表达式表达式表达式-i+-i+-i+-i+的结果的结果的结果的结果是多少?是多少?是多少?是多少?分析:由于运算符和分析:由于运算符和分析:由于运算符和分析:由于运算符和+的优先级相同,因此,相对的优先级相同,因此,相对的优先级相同,因此,相对的优先级相同,因此,相对于变量于变量于变量于变量i i i i而言,就只能按运算符的结合性判断。而言
38、,就只能按运算符的结合性判断。而言,就只能按运算符的结合性判断。而言,就只能按运算符的结合性判断。因为,因为,因为,因为,和和和和+结合性均为结合性均为结合性均为结合性均为从右往左,所以上式等价于:从右往左,所以上式等价于:从右往左,所以上式等价于:从右往左,所以上式等价于:-(i+i+i+i+)但若执行但若执行但若执行但若执行printf(“%d”,-i+)printf(“%d”,-i+)printf(“%d”,-i+)printf(“%d”,-i+);则结果为?;则结果为?;则结果为?;则结果为?3 3 3 3main()main()main()main()int a,b,c;a=b=c=
39、0;int a,b,c;a=b=c=0;int a,b,c;a=b=c=0;int a,b,c;a=b=c=0;a=+b+c;a=+b+c;a=+b+c;a=+b+c;/*b+/*b+/*b+/*b+后必须加空格后必须加空格后必须加空格后必须加空格*/*/*/*/printf(“n%d%d%d”,a,b,c);printf(“n%d%d%d”,a,b,c);printf(“n%d%d%d”,a,b,c);printf(“n%d%d%d”,a,b,c);a=b+c+;a=b+c+;a=b+c+;a=b+c+;/*/*/*/*运算符间可不加空格运算符间可不加空格运算符间可不加空格运算符间可不加空格
40、*/*/*/*/printf(“n%d%d%d”,a,b,c);printf(“n%d%d%d”,a,b,c);printf(“n%d%d%d”,a,b,c);printf(“n%d%d%d”,a,b,c);a=+b+c+;a=+b+c+;a=+b+c+;a=+b+c+;printf(“n%d%d%d”,a,b,c);printf(“n%d%d%d”,a,b,c);printf(“n%d%d%d”,a,b,c);printf(“n%d%d%d”,a,b,c);a=b-+-c;a=b-+-c;a=b-+-c;a=b-+-c;printf(“n%d%d%d”,a,b,c);printf(“n%d%
41、d%d”,a,b,c);printf(“n%d%d%d”,a,b,c);printf(“n%d%d%d”,a,b,c);a=+c+c;a=+c+c;a=+c+c;a=+c+c;printf(“n%d%d%d”,a,b,c);printf(“n%d%d%d”,a,b,c);printf(“n%d%d%d”,a,b,c);printf(“n%d%d%d”,a,b,c);输出输出输出输出 2 1 1 2 1 1输出输出输出输出 2 2 22 2 2输出输出输出输出 5 3 35 3 3输出输出输出输出 5 2 25 2 2输出输出输出输出 6 2 36 2 3二、赋值运算符与表达式(P60)1、简单
42、赋值运算符n符号:=n格式:变量标识符=表达式n作用:将一个数据(常量或表达式)赋给一个变量例 a=3;b=3+4*5;c=d+2;d=e=10;d=func();2、复合赋值运算符n=与算术运算符、位运算符结合(共10种)n种类:+=-=*=/=%=&=|=n含义:exp1 op=exp2 exp1=exp1 op exp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3n赋值运算符相关说明:n结合方向:自右向左n优先级:极低n左侧必须是变量,不能是常量或表达式例:a=b=c=5 a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)例:in
43、t a=2;a+=a*=a-=a*=3;例:a=12;a+=a-=a*a/表达式值为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/a=-264 等价于a=a+(a=a-(a*a)/a=0 等价于a=a+(a=a*(a=a-(a=a*3)3、赋值运算带来的类型转换n赋值号右边表达式值自动转换成其左边变量的类型(数值类型才兼容此规则)nint i=3.87 nfloat f=3;double d=5;nint i=A;nint i=-1;unsigned u=i;nint a;char ch=37
44、6;a=ch;nint i=257;char c=a;c=i;按存储单元的存储结构直接赋值按存储单元的存储结构直接赋值按存储单元的存储结构直接赋值按存储单元的存储结构直接赋值/结果 i=3/f=3.0000000 d=5.00000000000/结果 i=65/结果 u=65535/结果 a=-2/结果 c=1三、逗号运算符与逗号表达式n形式:表达式1,表达式2,表达式nn结合性:从左向右n优先级:低n求解:自左向右,依次求解各表达式的值,直到最后一个表达式的值求出(为整个表达式值)#include main()int x,y=7;float z=4.0;x=(y=y+6,y/z);print
45、f(x=%dn,x);运行结果:x=3/a=15,表达式值60/a=15,表达式值20/赋值表达式,表达式值18,x=18/逗号表达式,表达式值18,x=3/1,2,3/3,2,3例 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,%d”,(a,b,c),b,c);四、关系运算与逻辑运算(p91-94)n n关系或逻辑表达式的结果是一个逻辑值,即或者为“真(true)”,或者为“假(false)”。n n C语言用非零值来表示”真”,用零值表示”假
46、”。n n 对于任意一个表达式,若值为0,则代表”假”值;只要值是非零,无论是正数还是负数,都代表”真”值。1、关系运算符与表达式n n种类:种类:种类:种类:=!=!=n n双目运算符,结合方向双目运算符,结合方向双目运算符,结合方向双目运算符,结合方向自左至右自左至右自左至右自左至右n n关系表达式的值:是逻辑值关系表达式的值:是逻辑值关系表达式的值:是逻辑值关系表达式的值:是逻辑值“真真真真”“”“”“”“假假假假”,即,即,即,即1 1 1 1和和和和0 0 0 0表示表示表示表示n n优先级优先级优先级优先级算算算算术术术术运算符运算符运算符运算符,=,=,=,!=,!=赋值赋值赋值
47、赋值运算符运算符运算符运算符逗号运算符逗号运算符逗号运算符逗号运算符n例 ca+b /c(a+b)n ab!=c /(ab)!=cn a=bc /a=(bc /a=(bc)/表达式值1/表达式值1/表达式值0/d=1/f=0int a=3,b=2,c=1,d,f;ab (ab)=c b+cb f=abc x=10;y=-10 x10;/y=12、逻辑运算符与表达式n种类:!(逻辑非)(逻辑非)&(逻辑与)(逻辑与)|(逻辑或)(逻辑或)n&和和|为二目运算符,如:为二目运算符,如:a&b a|b n!为单目运算符为单目运算符,如:,如:!a n结果值:用结果值:用“真真”“假假”,即,即1和和
48、0表示表示优先级优先级 结合方向结合方向!&|高低!:从右向左&:从左向右|:从左向右!算术算术关系关系&|赋值赋值逗号逗号 高低逻辑真值表ab!a!ba&ba|b真假真假假假真真真假假假假假真真假假真真真假真真nC语言中,n运算量:0表示“假”,非0表示“真”n运算结果:0表示“假”,1表示“真”逻辑运算符逻辑运算符功能:功能:&(逻辑与):(逻辑与):a&b 当当a、b 都都是真时值为真,其余是真时值为真,其余为假。为假。|(逻辑或):(逻辑或):a|b 当当a、b都为都为假时值为假,否则为假时值为假,否则为真。真。!(逻辑非):(逻辑非):!a 当当 a 为真时值为真时值为假为假,当当a
49、 为假时值为假时值为真。为真。a=x&xb&xya=b|x=y!a|ab/(ab)&(xy)/(a=b)|(x=y)/(!a)|(ab)/(a=x)&(x3&2|83)&2|(8b)&(n=cd)后,后,m和和n的值为?的值为?m=0 n=1n n如:如:如:如:逻辑表达式:逻辑表达式:a+&b+n n如:如:a+|b+5、条件运算符与条件表达式(p97)n n形式:形式:形式:形式:e1e1?e2e2:e3e3?:n n方向:自右向左方向:自右向左方向:自右向左方向:自右向左n n优先级:优于赋值,低于逻辑、关系、算术等;优先级:优于赋值,低于逻辑、关系、算术等;优先级:优于赋值,低于逻辑、
50、关系、算术等;优先级:优于赋值,低于逻辑、关系、算术等;n n功能:功能:功能:功能:先求先求e1e1的值,若为真则求的值,若为真则求e2e2,并将,并将e2e2的值作为整个条件的值作为整个条件表达式的值;否则求表达式的值;否则求e3e3,并将,并将e3e3的值作为整个条件表达式的值。的值作为整个条件表达式的值。n n如:如:如:如:max=ab?a:b;max=ab?a:b;实现求实现求实现求实现求a a,b b的较大值赋给的较大值赋给的较大值赋给的较大值赋给maxmaxn n如:如:如:如:a=10,b=20,c=30,d=40a=10,b=20,c=30,d=40 m=a b?a:b+1