逗号表达式:赋值表达式和逗号表达式
疯狂代码 https://www.doczj.com/doc/cf11768469.html,/ ?:http:/https://www.doczj.com/doc/cf11768469.html,/VC/Article57590.html
C把赋值运算符连接而成式子叫做赋值表达式例如:a=b、a=b+c、a=3等赋值运算符是个双目运算符必须两个参和运算值其左边值叫做l-value通常是变量或赋值表达式常量和常变量不可以作为赋值表达式左值赋值运算符右端值叫做r-value通常个常量、变量或表达式
C把逗号运算符连接式子叫做逗号表达式例如:“aa*3”“b+3d/4”等逗号表达式右被称为顺序求值表达式它值是最右端表达式值例如有如下逗号表达式:
a*=5a+2
假设a=3该逗号表达式求值步骤是先计算左侧表达式a*=5结果是a=15然后计算右侧表达式a+2值是17整条逗号表达式值为17
把赋值符和逗号连接式子作为表达式看待是C特点的引入赋值表达式和逗号表达式使C语句变得十分灵活丰富合理使用赋值表达式和逗号表达式可以大大精简代码使更紧凑下面我们来看看使用这两种表达式时窍门技巧和应当注意到问题
1:
#
using std;
{
unsigned a;
b=-1;
a=b;
cout< 0; } 大家可以先猜测下运行结果 运行结果为65535为什么是这个结果呢?其实仔细想想很容易得出答案:我们知道型变量在内存中是占两个字节即16个 2进制位因此用-1给b赋值以后b中值就是1111,1111,1111,1111 【注】然后将其赋给a a所占内存也是16位原封不动全部搬过去 a值也变成1111,1111,1111,1111 a是无符号数它所有位都表示数值 1111,1111,1111,1111对应十进制数即使65535因此输出结果就是65535 【注】:所谓补码就是将该负数绝对值原码取反后最低位加1得到 2进制编码例如求取-3补码步骤如下: 第步:计算出3原码:0000,0000,0000,0011 第 2步:将3原码取反:1111,1111,1111,1100 第 3步:将取反后原码加1:1111,1111,1111,1101 1111,1111,1111,1101即是-3补码 例1运行结果给了我们个警示——区别类型变量相互赋值时定要考虑他们编码形式即值域范围否则可能得到和我们期望相差十万 8千里结果 例2: # using std; { a=3; a4; cout< 0; } 这个例子无甚特别的处它仅仅介绍说明了赋值运算符可以跟基本运算符组合成为符合赋值运算符常见到组合方式有、-=、*=、/=、%=、<<=、>>=、&=、|=、∧=有关这些符合赋值运算符使用方法此处不作介绍大部分教授C基础书上都有不清楚可以自己去查看下面我们来看个有趣问题有如下表达式: a=5*8,a*10 问该表达式值是多少? 讨论对该表达式求解可能会有两种区别声音:其认为a=5*8是个赋值表达式它跟后面a*10起构成了个逗号表达式所以求解时先算出a=5*8值然后计算a*10值;另种声音认为5*8,a*10是个逗号表达式应当先求这个逗号表达式值然后将逗号表达式值赋给a倒底那种理解对呢?这就需要查考两种运算符运算优先级了赋值运算符优先级要高于逗号运算符因此对表达式a=5*8,a*10求解应该是先计算a=5*8然后计算逗号表达式值 例3: # using std; { a; a=3; cout<<(aa=aa)< 0; } 问输出结果是多少? 很多人见到诸如aa=aa这样表达式时还没研究先就头脑发晕了其实大可不必这么惶恐冷静下来仔细想想这个表达式还是很容易求解要求解这个表达式需要知道个先决条件——赋值运算求值顺序赋值运算都是从右至左求值知道了这点问题就迎刃而解了下面是对该表达式求解过程: 第步:计算最右端aa结果为6; 第 2步:将aa值赋给前个aa变为6; 第 3步:计算最左端aa结果为1212即为整个表达式值 好了现在大家对连续多次赋值赋值表达式求解应该没有问题了不过上例中还有个需要注意地方不知道大家有没有留意 cout语句中 “aa=aa”是加括号在用cout输出赋值表达式或逗号表达式值时定要用括号将整个表达式括起来否则编译会出错这主要是C输出流对象ostream中没有处理赋值运算符和逗号运算符机制如果你重载了<<运算符实现了这个机制就可以不要括号了(不过要重载<<实现输出赋值表达式是个比较复杂问题远不如加个括号来得轻快,因此牢记输出赋值或逗号表达式时定要用括号把正个表达式括起来) 整理总结赋值表达式和逗号表达式通常使用方法: 、赋值表达式使用方法: 1. 用于对多个变量赋值如:a=b=c=d=3; 2. 用于条件语句条件如:(a=fun(x,y)){}这时相当于执行 a=fun(x,y); (a){} 赋值表达式通常用于以上两种情况但不限于此灵活运用赋值表达式可以极大精简代码使更加紧凑更多使用方法请自己去研究 2、逗号表达式使用方法: 1.用于顺序求值如:a=bb=cc=d; 相当于执行: a=b; b=c; c=d; 3. 用于条件语句如:(a=fun(x,y),a>0){}这时相当于执行 a=fun(x,y); (a>0){} 条件表达式通常用于以上两种情况但不限于此逗号语句最大特点在于它可以在条语句中整合多种区别类型表达式用条语句实现多个功能例如有如下可编译执行: # using std; { i; cout<<3< 0; } 逗号表达式极大增强了C语句灵活性使用逗号表达式可以精简代码希望大家在编程过程中灵活使用逗号表达式简化自己从代码使代码更紧凑更具可读性 2009-2-12 3:50:05 疯狂代码 https://www.doczj.com/doc/cf11768469.html,/ 输入、输出、赋值语句 1、计算机的程序设计语言很多,但各种程序语言都包含下列基本的算法语句: , , , , 。 2、 在程序语言中,下列符号分别表示什么运算 * ;\ ;∧ ;SQR ( ) ;ABS ( )? , , , , 。 3、下列程序运行后,a ,b ,c 的值各等于什么? (1) a=3 (2) a=3 b=-5 b=-5 c=8 c=8 a=b a=b b=c b=c PRINT a ,b ,c c=a END PRINT a ,b ,c END (1)________________________ (2)________________________ 4、. 指出下列语句的错误,并改正: (1)A=B=50 (2)x=1,y=2,z=3 (3)INPUT “How old are you ” x (4)INPUT ,x (5)PRINT A+B=;C (6)PRINT Good-bye! 5.将两个数8,17a b ==交换,使17,8a b ==,下面语句正确一组是 ( ) 6. ) 3b = a a b =+ b a b =- PRINT a ,b A 1,3 B 4,1 C 0,0 D 6,0 7 下列给出的赋值语句中正确的是( ) A 4M = B M M =- C 3B A == D 0x y += 8 对赋值语句的描述正确的是 ( ) ①可以给变量提供初值 ②将表达式的值赋给变量 ③可以给一个变量重复赋值 ④不能给同一变量重复赋值 A ①②③ B ①② C ②③④ D ①②④ 9、已知f (x )=x 3-3x 2 +2x+1,写出任意一个x 的值对应的函数值f (x )的求法程序. 10.已知华氏温度和摄氏温度的转化公式为: 5(32)9=-?摄氏温度华氏温度 编写一个程序,输入一个华氏温度,输出其相应的摄氏温度。 11.编写一个程序,输入两个非零实数,输出他们加、减、乘、除的结果。 12.已知一个三角形的三边长分别是,,a b c ,它的面积可用海伦—秦九韶公式计算。 S =2a b c p ++= 设计一个算法程序,输入三角形的三条边长,,a b c ,输出三角形的面积S 。 13.春节到了,糖果店的售货员忙极了。已知水果糖每千克10.4元,奶糖每千克15.6元,果仁巧克力每千克25.2元,那么依次购买这三种果糖,,a b c 千克,应收取多少钱?请你设计一个程序,帮售货员算账。 14.编写一个程序,输入梯形的上底、下底和高的值,计算并输出其面积。 15.编写一个程序,交换两个变量a 、b 的值,并输出交换前后的值。 一、C语言运算符号的种类 编辑 1 算术运算符 用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。 2.关系运算符 用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=) 、小于等于(<=)和不等于(!=)六种。 3.逻辑运算符 用于逻辑运算。包括与(&&)、或(||)、非(!)三种。 4.位操作运算符 参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。 5.赋值运算符 用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。 6.条件运算符 这是一个三目运算符,用于条件求值(?:)。 7.逗号运算符 用于把若干表达式组合成一个表达式(,)。 8.指针运算符 用于取内容(*)和取地址(&)二种运算。 9.求字节数运算符 用于计算数据类型所占的字节数(sizeof)。 10.特殊运算符 有括号(),下标[],成员(→,.)等几种。 二、C语言运算符号的优先级 编辑 1、优先级1级 结合方向左结合(自左至右) ( ) 圆括号 [ ] [1] 下标运算符 -> 指向结构体成员运算符 . 结构体成员运算符[1] (请注意它是一个实心圆点) 2、优先级2级 结合方向右结合(自右至左)单目运算符 ! 逻辑非运算符 ~ 按位取反运算符 ++ 自增运算符 -- 自减运算符 - 负号运算符 (类型) 类型转换运算符 * 指针运算符 & 地址与运算符 sizeof 长度运算符 3、优先级3级 结合方向左结合双目运算符* 乘法运算符 / 除法运算符 % 取余运算符 4、优先级4级 结合方向左结合双目运算符+ 加法运算符 - 减法运算符 5、优先级5级 结合方向左结合双目运算符<< 左移运算符 >> 右移运算符 6、优先级6级 结合方向左结合双目运算符<、<=、>、>= 关系运算符 7、优先级7级 结合方向左结合双目运算符== 等于运算符(判断) != 不等于运算符(判断) 8、优先级8级 结合方向左结合双目运算符& 按位与运算符 9、优先级9级 结合方向左结合双目运算符^ 按位异或运算符 10、优先级10级 第3讲 运算符运算符、、表达式&类型转换 【课前思考课前思考】】 1、回忆数学中的运算符回忆数学中的运算符、、表达式表达式,,C 语言中的运算符语言中的运算符、、表达式是什么样子表达式是什么样子?? 2、能否直接将一个浮点型数据赋值给整型变量能否直接将一个浮点型数据赋值给整型变量?? 【学习目标学习目标】】 掌握C 语言中基本的运算符、表达式,掌握C 语言中数据类型转换的方法 【学习指南学习指南】】 联想数学中的运算符及表达式,找出C 语言与其区别进行学习 【重 难 点】 重点: 算术运算符、关系运算符、逻辑运算符、赋值运算符、条件运算符及其优先级 “=”与“==”的区别 难点: 自增、自减运算,逻辑运算,逗号运算 【学时安排学时安排】】 学时:2学时 【知 识 点】 第3讲 运算符、表达式&类型转换 (1) 2.3 运算符与表达式 (2) 2.3.1 算术运算符与算术表达式....................................................................................2 1. 算术运算符.................................................................................................................2 2. 算术表达式.................................................................................................................3 2.3.2 自增与自减运算....................................................................................................4 1. 自增、自减运算符的使用形式.................................................................................4 2. 自增、自减运算符的优先级和结合性....................................................................5 2.3.3 关系运算符与关系表达式....................................................................................5 1. 关系运算符.................................................................................................................5 2. 关系表达式.................................................................................................................6 2.3.4 逻辑运算符与逻辑表达式....................................................................................6 1. 逻辑运算符.................................................................................................................6 2. 逻辑表达式.................................................................................................................7 2.3.5 赋值运算符与赋值表达式....................................................................................8 2.3.6 条件运算符与求字节运算符................................................................................9 1. 条件运算符.................................................................................................................9 2. 求字节运算符.. (10) 人教A版高中数学必修三第一章1.2-1.2.1输入语句、输出语句和赋值语句同步练 习(I)卷 姓名:________ 班级:________ 成绩:________ 一、单选题 (共11题;共22分) 1. (2分)若输入x的值为3,则该程序运行后,输出变量y的值是() INPUT x IF x>3 THEN y=x*x ELSE y=2*x END IF PRINT y END A . 3 B . 6 C . 9 D . 27 2. (2分)以下给出的输入、输出语句、赋值语句中正确的有() ①输入语句INPUT a;b;c; ②输入语句INPUT x=3; ③输出语句PRINT 20,3*2; ④输出语句PRINT A=4; ⑤赋值语3=B; ⑥赋值语句x+y=0; ⑦赋值语句A=B=-2; ⑧赋值语句T=T*T. A . 2个 B . 3个 C . 4个 D . 5个 3. (2分) (2018高二下·辽源月考) 下列给出的赋值语句中正确的是() A . 4=M B . B=A=3 C . x+y=0 D . M=-M 4. (2分)关于赋值语句需要注意的事项中不正确的是() A . 赋值号左边只能是变量,而不能是表达式 B . 赋值号左、右两边不能对换 C . 不能利用赋值语句进行代数式的演算 D . 赋值号与数学中的等号的意义相同 5. (2分)读程序 甲:INPUT i=1 乙:INPUT i=1000 S=0 S=0 WHILE i<=1000 DO S=S+i S=S+i i=i+l i=i-1 WEND LOOP UNTIL i≤1 PRINT S PRINT S END END 对甲乙两程序和输出结果判断正确的是() A . 程序不同,结果不同 B . 程序不同,结果相同 C . 程序相同,结果不同 D . 程序相同,结果相同 6. (2分)输入x=3,根据程序输出的结果是() A . 13 B . 20 C . 12 D . 5 逗号运算、关系运算、逻辑运算和条件运算逗号运算和逗号表达式 ●格式 表达式1,表达式2 ●求解顺序及结果 ?先求解表达式1,再求解表达式2 ?最终结果为表达式2的值 ●例 a = 3 * 5 , a * 4 最终结果为60 关系运算与关系表达式 ●关系运算是比较简单的一种逻辑运算,优先次序为: ●关系表达式是一种最简单的逻辑表达式 ?其结果类型为 bool,值只能为 true 或 false。 例如:a > b,c <= a + b,x + y == 3 逻辑运算与逻辑表达式 ●逻辑运算符 !(非) &&(与) ||(或) 优先次序:高→低 ●逻辑运算结果类型:bool,值只能为 true 或 false ●逻辑表达式 例如:(a > b) && (x > y) ●“&&”的运算规则 ?两侧表达式都为真,结果为真; ?有一侧表达式为假,结果为假。 ●“&&”的“短路特性” 表达式1 && 表达式2 ?先求解表达式1 ?若表达式1的值为false,则最终结果为false,不再求解表达式2 若表达式1的结果为true,则求解表达式2,以表达式2的结果作为最终结果 ●“||”的运算规则 ?两侧表达式都为假,结果为假; ?有一侧表达式为真,结果为真。 ●“||”的“短路特性” 表达式1 || 表达式2 ?先求解表达式1 ?若表达式1的值为true,则最终结果为true,不再求解表达式2 若表达式1的结果为false,则求解表达式2,以表达式2的结果作为最终结果 条件运算符与条件表达式 ●一般形式 ?表达式1?表达式2:表达式3 表达式1 必须是 bool 类型 ●执行顺序 ?先求解表达式1, ?若表达式1的值为true,则求解表达式2,表达式2的值为最终结果 若表达式1的值为false,则求解表达式3,表达式3的值为最终结果 ●条件运算符优先级高于赋值运算符,低于逻辑运算符 ?例 表达式1是bool类型,表达式2、3的类型可以不同,条件表达式的最终类型为 2 和 3 中较高的类型。输入、输出、赋值语句同步练习2
C语言运算符号的种类
掌握C语言中基本的运算符
人教A版高中数学必修三第一章1.2-1.2.1输入语句、输出语句和赋值语句同步练习(I)卷
逗号运算、关系运算、逻辑运算和条件运算
2.10C++逗号运算符与逗号表达式