第4章-操作符和表达式(1)

合集下载

程序设计基础(运算符和表达式ppt课件

程序设计基础(运算符和表达式ppt课件
问题:如何理解A+++B ?
C规定:自左向右取尽可能多的符号组成运算符
12
自增/自减
例2:设x=5
y=x++*x++; /*先取x的值进行“*”运算, 再进行两次 x++。
y=25,x=7*/ y=++x*++x; /*先进行两次x自增1,使x的值为7,再进行相乘运算。
y=49,x=7*/
计算机及程序设计概述
运算符与表达式
运算符
C语言用于描述对数据进行运算的特殊符号
C语言具有丰富而繁多的运算符 由运算符构成了各种表达式
分类
C语言的运算符按其在表达式中与运算对象的关系 单目运算 一个运算符连接一个运算对象 双目运算 一个运算符连接两个运算对象 三目运算 一个运算符连接三个运算对象
<表达式1>,<表达式2>,····<表达式n>可以是任何类型 逗号表达式的结果为最后一个表达式的结果值 执行过程
先求解表达式1的值,再求解表达式2的值,…最后求 解表达式n的值,并将表达式n的值作为整个表达式的 结果值
25
逗号表达式
优先级
级别最低(最后进行逗号运算)
结合方向
自左向右
19
逻辑表达式
逻辑运算规则
a b !a
a&&b
a||b
001
0
0
0 非0 1
0
1
非0 0 0
0
1
非0 非0 0
1
1
提示
设计逻辑“与” 运算,将最可能为“假”的表达式 放在最左侧
设计逻辑“或”运算,将最可能为“真”的表达式放 在最左侧

C06第4章 逻辑运算与选择结构程序(1)

C06第4章 逻辑运算与选择结构程序(1)

反之亦然!
逻辑或操作符||
逻辑或操作符||表示“或者”的关系。 a和b只要有一个为真时a || b的值就为真为1,只有a和
b同时为假时,a || b的值才为假为0。
例4-2 用C表达式表示结论“变 量a的绝对值大于5”。
分析:当|a| > 5时有a > 5或者a < -5, 因此相应的C表达式为(a > 5) || (a < -5),当然也可用
大小由其ASCII码的值决定。
3 -5u中-5u为无符号数,故3 -5u的类型也为无符号数。3 -5u不可能等于0,因此大于0,即3 -5u > 0的值为1即真。 -5u即-5先用补码表示再被看做无符号数,两个正数相加的 结果当然不会小于0)。 能用printf函数输出值的方式判断结果是否大于0吗? printf(“?”,3-5u);
== 0 && n % 3 == 0 || n % 7 == 0。(等价于n % 6 ==
0 || n % 7 == 0) (2)x、y中至少有一个小于z 也就是x小于z或者y小于 z,相应的逻辑表达式为x < z || y < z。
分析:
(3) x、y中只有一个小于z,也就是只有x小于z或者 只有y小于z,当只有x小于z时有x小于z且y不小于z,相应
式求值,再由操作符的优先级可知,原表达式等价于((a
= 0) && (a = 5)) || (a += 1)。由于a = 0的值为0,故 子表达式(a = 0) && (a = 5)的值也为0即假,且子表达 式a = 5不会被求值。原表达式变为0 || (a += 1),此时 显然要继续对a += 1求值,求值后变量a的值变为1,结果

逻辑运算符和表达式

逻辑运算符和表达式

逻辑运算符和表达式逻辑运算符和表达式是非常重要的概念,在程序设计中经常用到。

逻辑运算是计算机程序中的基本操作之一,它通常用来进行条件判断。

在本文中,我们将深入探讨逻辑运算符和表达式,以帮助读者更好地理解它们的作用和使用方法。

逻辑运算符是用来连接两个或多个逻辑表达式的操作符。

在计算机程序中,常见的逻辑运算符包括AND、OR、NOT。

AND表示逻辑“与”,OR表示逻辑“或”,NOT表示逻辑“非”。

这些运算符都是为了解决在程序中判断条件时,需要进行多种条件判断的情况。

逻辑表达式是由逻辑运算符和逻辑操作数组成的表达式。

逻辑操作数可以是任何能返回逻辑值(true/false)的表达式,因此,逻辑表达式通常被称为布尔表达式。

它可以是一个简单的数值比较,比如“5>3”这样的表达式;也可以是一个由多个表达式组成的复杂表达式,如“((a>b) AND (c<d)) OR (x=y)”这样的表达式。

下面我们来详细介绍逻辑运算符和表达式的使用方法:1.逻辑与(AND)逻辑与运算符表示在多个条件都为真的情况下,整个条件才为真。

在程序中通常使用符号“&&”来表示逻辑与。

例如,以下代码表示当变量a和变量b都大于10的时候,if语句才会成立。

if (a > 10 && b > 10) {//do something}2.逻辑或(OR)逻辑或运算符表示多个条件中只要有一个为真,整个条件就为真。

在程序中通常使用符号“||”来表示逻辑或。

例如,以下代码表示当变量a或变量b的值大于10的时候,if语句才会成立。

if (a > 10 || b > 10) {//do something}3.逻辑非(NOT)逻辑非运算符表示将一个逻辑表达式的值取反。

在程序中通常使用符号“!”来表示逻辑非。

例如,以下代码表示当变量a的值不等于10的时候,if语句才会成立。

if (a != 10) {//do something}4.复杂逻辑表达式复杂的逻辑表达式可以包含多个逻辑运算符以及括号。

c语言运算符和表达式

c语言运算符和表达式

C语言运算符和表达式C语言把除了控制语句和输入输出以外几乎所有的基本操作都作为运算符处理。

1自增(++)、自减(-一)运算符:自增(++)、自减(一)运算符的作用是使变量的值加1或减1,例如,++ii(在使用之前,先使的值加(减)1)i++,i-(在使用i之后,使i的值加(减)1)y++i和i++的不同之处在于:++i是先执行i=i+1,再使用i的值;而i++是先使用i的值,再执行i=i+lβ自增(减)运算符常用于循环语句中,使循环变量自动加1;也用于指针变量,使指针指向下一个地址。

2算术表达式和运算符的优先级与结合性用算术运算符和括号将运算对象连接起来的、符合C语法规则的式子称C 算术表达式。

运算对象包括常量、变量、函数等。

c语言规定了运算符的优先级(如先乘除后加减),还规定了运算符的结合性。

在表达式求值时,先按运算符的优先级别顺序执行,如果在一个运算对象两侧的运算符的优先级别相同,C语言规定了各种运算符的结合方向(结合性),算术运算符的结合方向都是〃自左至右〃,即运算对象先与左面的运算符结合。

算术运算符是自左至右(左结合性),赋值运算符是自右至左(右结合性)。

赋值运算符和赋值表达式赋值运算符就是二,表示〃存储〃,即把赋值号右边表达式的值存给左边的变量。

可以出现在赋值号左边的式子,称为左值(Ieftvalue)o左值必须有内存空间且允许赋值。

常用的左值是变量,但常变量不能作为左值。

赋值运算符的结合性,从右至左。

若有两个赋值号,要先执行右边的。

如:a=b=2相当于是a=(b=2).3不同类型数据间的混合运算在程序中经常会遇到不同类型的数据进行运算,如果一个运算符两侧的看据类型不同,则先自动进行类型转换,使二者成为同一种类型,然后进行运算。

整型、实型,字符型数据间可以进行混合运算。

规律为1)十、-\/运算的两个数中有一个数为float或double型,结果是double 型,因为系统将所有float型数据都先转换为double型,然后进行运算。

运算符和表达式

运算符和表达式

运算符和表达式按运算符的优先级⾼低次序执⾏;若优先级相同,则按照结合性规则执⾏如item+2*num中,*运算符的优先级⽐+运算符⾼,因此,先进⾏”2*num"运算,再与“item"运算*p--中,*和--都是右结合,其运算顺序为p先与--结合,执⾏”p--"运算,所得结果再与*进⾏运算,相当于"*(p--)"算术运算符分为基本算术运算符和⾃增/⾃减算术运算符1.基本算术运算符在C语⾔中,基本运算符有5个,+——加法运算符-—— 减法运算符*——乘法运算符/——除法运算符%——求余运算符注意:对除法运算符,如果两个整数相除,结果仍为整数(商向下取整),如:20/6得6;如果除数或被除数中有⼀个为负值,则舍⼊的⽅向是不固定的。

如果参加+、-、*、/运算的两个数中⾄少有⼀个数为浮点数,则运算结果是double型数据,⾃动转换后所有数都按double型进⾏运算。

求余运算符%,两个操作对象都必须是整数。

结果的符号与运算符%左边的操作数的符号相同。

如:20%6得2,-45%8得-5,45%-8得5.减法运算符还可以进⾏取负运算,此时该运算符为单⽬运算符,只需⼀个操作数。

如num=-num,对num变量值取负。

基本运算符的优先级次序算术运算符的结合⽅向为“⾃左⾄右”。

如在表达式“m-n+a"中,先执⾏”m-n",再与a相加2.⾃增/⾃减算术运算符++——⾃增运算符-- ——⾃减运算符作⽤是使整型变量的值加1或减1。

这两个运算符只能⽤于变量,⽽不能⽤于常量或表达式。

⾃增/⾃减运算符都是单⽬运算符表达式++i将i的值加1,使⽤i的值表达式i++先使⽤i的值,再将i的值加1如:i=51,求j(1)j=++i——i的值先加1变为52,再赋值于j,j=52(2) j=i++——先将i的值赋值给j,j=51,再将i加1,i=52++和--是单⽬运算符,其优先级⾼于基本算术运算符,于取负运算符-的优先级相同。

运算符和表达式

运算符和表达式

例2-7:写出判断某年份是否为闰年的逻辑表达式。
闰年的判断方法:当某一年份是400的倍数或者是4的倍数但不 是100的倍数时,该年为闰年。
1. 运算符:
++,-右结合性
自增自减运算
2. 运算符优先级与结合性: 3. 表达式:
前缀表达式: ++a,--a
后缀表达式: a++,a-操作数 进行增一或减一运算 操作数增1或减1之后 的值 进行增一或减一运算 操作数原来的值
操作数
运算符
操作数
Z = ( X * 2 ) + ( 5 – Y )
表达式 表达式
表达式
㈠ 算术运算
1. 算术运算符: * / % + 2. 算术表达式: 同级别(高) 同级别(低) 3. 运算符优先级与结合性: 左结合性
1. 关系运算符: > >= < <= == != 同级别(高) 同级别(低) 2. 关系表达式: 3. 关系运算符优先级与结合性: 左结合性 4. 计算结果只有两种:真(1)或假(0)。
举例
举例
㈡ 关系运算
㈢ 逻辑运算
1. 逻辑运算符: !(逻辑非) &&(逻辑与) || (逻辑或) 2. 逻辑表达式: 举例 级别由高到低 3. 逻辑运算符优先级与结合性: &&、||左结合, !右结合 4. 计算结果只有两种:真(1)或假(0)。 1. 自增、自减运算符: ++、-2. 赋值运算符: = 右结合性 3. 条件运算符: ? : 右结合性 3. 逗号运算符: , 左结合性 右结合性
右结合性
赋值运算
2. 运算符优先级与结合性:
3. 表达式:

运算符和表达式

运算符和表达式

运算符和表达式⼀.运算符1.运算符:⼜叫做操作符,是⼀个⽤于运算的符号,它作⽤于⼀个或多个操作数按操作数的数量分类:①⼀元(⽬)运算符—作⽤于⼀个操作数②⼆元(⽬)运算符—作⽤于两个操作数③三元(⽬)运算符—作⽤于三个操作数按运算符的功能分类:①算数运算符—⽤于数学运算②逻辑运算符—⽤于判断真假③位运算符—⽤于⼆进制运算④其他2.算数运算符:+、-、*、/、%、++、--加加运算符书写⽅式:变量名++ ++变量名1.计算返回结果,与变量相同 1.计算返回结果,为变量值加12.将变量的值⾃增1 2.将变量的值⾃增1减减运算符书写⽅式:变量名-- --变量名1.计算返回结果,与变量相同 1.计算返回结果,为变量值减12.将变量的值⾃减1 2.将变量的值⾃减13.赋值运算符:=、+=、-=、*=、/=、%= (不能⽤于变量初始化)+= :x += 运算代码;→ x = x +(运算代码);-= :x -= 运算代码;→ x = x -(运算代码);*= :x *= 运算代码;→ x = x *(运算代码);/= :x /= 运算代码;→ x = x /(运算代码);%= :x %= 运算代码;→ x = x %(运算代码);4.常⽤逻辑运算符:(==)等于、(!=)不等于、(>)⼤于、(>=)⼤于等于、(<)⼩于、(<=)⼩于等于、(&&)并且、(||)或者、(!)⾮返回类型:bool&&:两个bool类型进⾏运算,运算的结果是真真为真,其他为假||:两个bool类型进⾏运算,运算的结果是假假为假,其他为真!:⼀元运算符,对⼀个bool类型的数据求反。

数据为真,运算结果为假;数据为假,运算结果为真5.三⽬运算符书写⽅式:操作数1 ?操作数2 :操作数3返回结果:如果操作数1判定结果为真,则将操作数2作为返回结果如果操作数1判定结果为假,则将操作数3作为返回结果6.位运算符(&)与:对两个数字的⼆进制格式每⼀位进⾏⽐较(如果都为1,取1,否则取0)(|)或:对每⼀位进⾏⽐较(如果都为0,取0,否则取1)(^)异或:对每⼀位进⾏⽐较(相同取0,不同取1)(《)左移:对⼀个⼆进制数字向左移动指定的位数(》)右移:对⼀个⼆进制数字向右移动指定的位数(~)取补:(⼀元运算符)将数字⼆进制位上的0变成1,1变成0⼆.表达式1.常⽤表达式返回类型:①⼀个变量声明的表达式,返回类型是void(⽆返回类型)。

运算符及表达式

运算符及表达式
输出
Enter days 265 Months = 8
Days = 25
Enter days 364 Months = 12
Days = 4
Enter days 45 Months = 1 Days = 15
图 3.1 整数的算术运算
x = 6.0 / 7.0 = 0.857143 y = 1.0 / 3.0 = 0.333333 z = –2.0 / 3.0 = –0.666667
ae-1 relational operator ae-2
其中,ae-1 和 ae-2 为算术表达式,可以是简单的常量、变量或它们的组合。下面给出 一些简单关系表达式的示例及其值:
4.5 < = 10 4.5 < –10 –35 > = 0 10 < 7 + 5 a+b=c+d
真 假 假 真 真(当 a 和 b 之和等于 c 和 d 之和时成立)
x<=y x==y x>y x<y
x!=y
第 3 章 运算符与表达式 53
3.4 逻辑运算符
除了关系运算符外,C 语言还有如下 3 个逻辑运算符:
&& 为逻辑 AND(与)
||
为逻辑 OR(或)
!
为逻辑 NOT(非)
当需要检测多个条件并做出判断时,可以使用逻辑运算符&&和||。例如:
a > b && x==10
运算符%不能用于实数操作数。
3.2.3 混合算术运算
如果表达式的一个操作数为实数,另一个为整数,则称此表达式为混合算术表达式。 如果有一个操作数为实数,那么只进行实数操作,且结果为一个实数。因此:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基本一元操作符
一元操作符 乘、除操作符 加减操作符 移位操作符 关系操作符 等式操作符 逻辑与操作符 逻辑异或操作符 逻辑或操作符 条件与操作符 条件或操作符 三元(条件)操作符 赋值操作符
高 ↓ 低
4.2 算术表达式
4.2.1基本算术运算
类别
算术运算 符
运算符 说明
+ * 执行加法运算 执行减法运算 执行乘法运算
3.当除数为0时的处理方法
• 任何数除以常数0都是不合法的。例:
int x=5/0; //错误,除以常数0; const int zero=0; double y=5/zero; //错误,除以常数0
• 但是除以值为0的变量是合法的。如,int zero =0;当整数时,会发生异 常,实数除以0结果是无穷大。 double a = 10.5 / zero; //PositiveInfinity double b = -10.5 / zero; //NegativeInfinity • C#中0有正、负之分,但是正0和负0是相等的。
1.定义:使用关键字delegate ,需要制定返回类型(可以是void)和参数(可 以为空):例 delegate int ZDelegate(uint i); delegate int ZDelegate( ); delegate void MDelegate(uint i); 2.实例化:使用关键字new ,同时需要指定所引用的方法,而且方法的参数列 表和返回类型应该和委托一致,例: MDelegate md = new MDelegate(card1.Deposit); 3.调用:与一般的调用类中方法一致,但是不需要在指出方法所属类或对象: md(100);
C#中的模运算不仅适用于整数类型,也适应于实数类型。 using System; class A { static void Main() { Console.WriteLine(5 / 2); Console.WriteLine(5.0 / 2); Console.WriteLine(5 % 2); Console.WriteLine(5 % 1.5); } }
4.2.4 其他算术表达式
• 1. 字符串加法 类别 运算符 说明
算术运算 符 +
表达式
执行加法运算(如果两个 操作数是字符串,则该运 算符用作字符串连接运算 操作数1 + 操作数2 符,将一个字符串添加到 另一个字符串的末尾)
例: using System; class A { static void Main() { string s1 = "hello!"; string s2 = "everyone!"; Console.WriteLine(s1 + s2); // hello!everyone!; } }
• 枚举类型在使用加减操作时,将其转换为整型,执行完操作后, 在转换为枚举类型,如果结果超过枚举定义范围,仍然有效,但 是是以整数形式表示。
namespace P4_3 { class EnumOperation { static void Main() { Weekday day = Weekday.Sunday; Console.Write(day); day = day - 1; Console.WriteLine(" - 1 = {0}", day); day = day + 6; Console.WriteLine(" + 6 = {0}", day); day = day + 3; Console.WriteLine(" + 3 = {0}", day); }
using System; namespace P2_8 { class DelegateSample { public static void Main() { BankCard card1 = new BankCard(); card1.m_id = "001"; card1.Deposit(100); MDelegate md = new MDelegate(card1.Deposit); //将委托指向Deposit方法并调用 md(100); } } delegate void MDelegate(uint i); //委托定义 interface IBank { void Deposit(uint x); } class BankCard : IBank { public string m_id; public uint m_amount; public void Deposit(uint x) { m_amount = m_amount + x; Console.WriteLine("银行卡{0}: 存入{1}元, 余额{2}元", m_id, x, m_amount); } } }
4.2.4 其他算术表达式
• 2. 委托的加减法பைடு நூலகம்
“+”代表委托的合并,“-”代表委托的删除。通过合并可以一次调用同一 个对象的多个方法。也可以使用+=和-=运算符。
关于委托
委托类似于函数指针,用于封装对一个或多个方法的引用。其是 从.NET类库中的System.Delegate类中派生出来的。委托使用分3 步:定义、实例化和调用。
public static void Main() class BankCard { { • 2. 委托的加减法 BankCard card1 = new BankCard(); public string m_id; = "001"; -”代表委托的删除。通过合并可以一次调用同一个对 public uint m_amount; “+”card1.m_id 代表委托的合并,“ CreditCard card2 = new CreditCard(); public void Deposit(uint x) 象的多个方法。也可以使用 +=和-=运算符。 card2.m_id = "002"; { CreditCard card3 = new CreditCard(); m_amount = m_amount + x; card3.m_id = "003"; Console.WriteLine("卡{0}: 存入 MDelegate d1 = new MDelegate(card1.Deposit); {1}元, 余额{2}元", m_id, x, m_amount); MDelegate d2 = new MDelegate(card2.Deposit); } MDelegate d4 = new MDelegate(card3.Deposit); } class CreditCard : BankCard MDelegate d3 = d1 + d2; //合并委托 d3(100); { public uint m_debit; d3 = d3 - d1-d4; //删除委托 d3 + =new MDelegate(card2.Borrow); //合并委 public void Borrow(uint x) 托 d3(50); { } m_debit = m_debit - x; Console.WriteLine("信用卡{0}: 任何委托变量加上或减去null后仍为其本身。 贷款{1}元", m_id, x); } 在进行委托删除时,如果作为减数的委托不在 } 作为被减数的委托中,删除运算将不会产生任 } 何效果
4.2.4 其他算术表达式 using System; class BankCard { class DelegateOperation •{ 2. 委托的加减法 public string m_id; public uint m_amount; public static void Main() -”代表委托的删除。通过合并可以一次调用同一个对 “+” 代表委托的合并,“ public void Deposit(uint x) { 象的多个方法。也可以使用 +=和-=运算符。 { BankCard card1 = new BankCard(); m_amount = m_amount + x; card1.m_id = "001"; Console.WriteLine("卡{0}: 存入 CreditCard card2 = new CreditCard(); {1}元, 余额{2}元", m_id, x, m_amount); card2.m_id = "002"; } MDelegate d1 = new MDelegate(card1.Deposit); } MDelegate d2 = new MDelegate(card2.Deposit); class CreditCard : BankCard MDelegate d3 = d1 + d2; //合并委托 { d3(100); public uint m_debit; d3 = d3 - d1; //删除委托,等价于d3-= d1; d3 = d3 + new MDelegate(card2.Borrow); public void Borrow(uint x) d3(50); { } m_debit = m_debit - x; } Console.WriteLine("信用卡{0}: 贷款{1}元", m_id, x); delegate void MDelegate(uint i); } } }
表达式
操作数1 + 操作数2 操作数1 - 操作数2 操作数1 * 操作数2
注意:
1. 类型的范围和精度问题
2. 不同类型操作数进行运算时,结果类型以高精度的为准;如:5/2=2; 5.0/2=2.5。
相关文档
最新文档