第3章语句、表达式、运算符_第1页
第3章语句、表达式、运算符_第2页
第3章语句、表达式、运算符_第3页
第3章语句、表达式、运算符_第4页
第3章语句、表达式、运算符_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章语句、运算符和表达式C#语言语句、运算符和表达式的基本概念算术运算符关系和类型测试运算符逻辑运算符赋值运算字符串运算符位运算符条件运算符运算符优先级表达式的组成和书写规则3.1语句(1)语句(statement)是C#程序的过程构造块,用于声明变量和常量、创建对象、变量赋值、调用方法、控制分支、创建循环等。语句通常以分号终止。由花括号({和

})括起来的一系列语句构成代码块(block)3.1语句(2)声明语句(declarationstatement)用于声明局部变量和常量表达式语句(expressionstatement)用于对表达式求值。可用作语句的表达式包括方法调用、使用

new运算符的对象分配、使用

=和复合赋值运算符的赋值,以及使用

++和

--运算符的增量和减量运算选择语句(selectionstatement)用于根据表达式的值从若干个给定的语句中选择一个来执行。这一组语句有

if和

switch语句迭代语句(iterationstatement)用于重复执行嵌入语句。这一组语句有

while、do、for和

foreach

语句跳转语句(jumpstatement)用于转移控制。这一组语句有

break、continue、goto、return、和throw语句等try...catch语句用于捕获在块的执行期间发生的异常,try...finally语句用于指定终止代码,不管是否发生异常,该代码都始终要执行checked语句和

unchecked语句用于控制整型算术运算和转换的溢出检查上下文lock语句用于获取某个给定对象的互斥锁,执行一个语句,然后释放该锁using语句用于获得一个资源,执行一个语句,然后释放该资源常用符号分类关键字(Keyword)又称为保留字,C#预先规定的具有固定含义的一些单词,赋予特殊的含义

标识符(Identifier)系统预定义标识符用户自定义标识符运算符(Operator)+,-,*,…

分隔符(Separator)空格、回车/换行、逗号等其它符号大花括号“{”和“}”通常用于标识函数体或者一个语句块“/*”和“*/”是程序注释所需的定界符3.2运算符C#运算符(operator)是术语或符号,用于在表达式中对一个或多个称为操作数的进行计算并返回结果值。接受一个操作数的运算符被称作一元运算符,例如增量运算符(++)或new。接受两个操作数的运算符被称作二元运算符,例如算术运算符+、-、*、/。接受三个操作数的运算符被称作三元运算符,条件运算符“?:”是C#中唯一的三元运算符

C#运算符种类算术运算符关系和类型测试运算符逻辑运算符赋值运算符字符串运算符位运算符条件运算符其他运算符1.算术运算符算术运算符用于对操作数进行算术运算。C#的算术运算符同数学中的算术运算符是很相似的。运算符含义说明优先级实例/num=8结果++增量操作数加

11++num,num++9--减量操作数减

11--num,num--7+一元+操作数的值2+num8-一元-操作数的反数2-num-8*乘法操作数的积3num*num*2128/除法第二个操作数除第一个操作数310/num10.0/num11.25%模数第二个操作数除第一个操作数后的余数310%num8%2.221.4+加法两个操作数之和410+num18-减法从第一个操作数中减去第二个操作数410-num2注意(1)算术运算符两边的操作应是数值型。若是字符型,则自动转换成字符所对应的ASCII码值后再进行运算(2)增量运算符(++、--)可以出现在操作数之前(++variable、--variable)或之后(variable++、variable--)(3)对于字符串类型则+表示拼接操作字符串。doublex=5.8;Console.WriteLine(“{0}”,x+“5”);//字符串拼接//注意:double自动转换为string后再拼接,对x类型无影响(4)

对于字符类型,转换为ASCII码值,进行数值相加

Console.WriteLine("'5'+'5'={0},'A'+'A'={1}",'5'+'5','A'+'A')usingSystem;classModDemo{ staticvoidMain() {

int

iresult,irem; doubledreult,drem;

iresult=10/3;

irem=10%3;

dresult=10.0/3.0;

drem=10.0%3.0; Console.WriteLine("10/3={0}\t10%3={1}",iresult,irem); Console.WriteLine("10.0/3.0={0}\t10.0%3.0={1}",dresult,drem);}}程序的输出如下所示:10/3=310%3=110.0/3.0=3.3333333333333310.0%3.0=1例特殊的算术运算符++(自增运算符)--(自减运算符)作用:使变量的值自动增加1或者减少1例如,x=x+1;

++x;//前缀格式或者

x++;

//后缀格式例:

x=8;y=++x;

在这种情况下,x和y被赋值为9。但是,如果代码如下所写:

x=8;y=x++;

那么y被赋值为8,x被赋值为9

。当一个自增或自减运算符在它的操作数前面时,C#将在取得操作数的值前执行自增或自减操作。如果运算符在操作数的后面,C#将先取得操作数的值,然后进行自增或自减运算。

注意usingSystem;classTest{ staticvoidMain(){

intx=5;

inty=x--;

Console.WriteLine("y={0}",y); y=--x;

Console.WriteLine("y={0}",y);}}

结果:y=5y=3

注意:++、--只能用变量,而不能用于常量或表达式,例如5++或--(x+y)都是错误的。例usingSystem;classcount{staticvoidMain(){

intVal1=2;

intVal2=3;Console.WriteLine(“Val1*Val2={0}”,Val1*Val2);Console.WriteLine(“Val1/Val2={0}”,Val1/Val2);Console.WriteLine(“Val1%Val2={0}”,Val1%Val2);

Console.WriteLine(++Val1);Console.WriteLine(--Val2);Console.WriteLine(Val1++);Console.WriteLine(Val2--);}}结果:例【例3.2】算术运算符++、--、一元+、一元-、二元+、二元-、*、/、%等综合示例doublex,y;x=1.5;y=++x;Console.WriteLine("x={0},y={1}",x,y);x=1.5;y=x++;x=5.8;inti=5;Console.WriteLine("x={0},y={1}",x,y);inti=5;Console.WriteLine("i={0},+i={1}",i,+i);//一元+Console.WriteLine("i+5={0},i+.5={1}",i+5,i+.5);//加法Console.WriteLine("x={0},x+\"5\"={1}",x,x+"5");//字符串拼接//注意:double自动转换为stringConsole.WriteLine("'5'+'5'={0},'A'+'A'={1}",'5'+'5','A'+'A')//字符转换为ASCII码值,进行数值相加i=5;Console.WriteLine("i/2={0},-i/2.1={1}",i/2,-i/2.1);2.关系运算符

关系运算符用于比较两个值的大小,关系运算的结果不是true就是false。例:

boola=‘a’<‘b’;//a的值为truea=3+6>5-2//a的值为true注意:关系运算符的优先级相同。对于两个预定义的数值类型,关系运算符按照操作数的数值大小进行比较。对于string类型,关系运算符比较字符串的值,即按字符的ASCII码值从左到右一一比较:首先比较两个字符串的第一个字符,其ASCII码值大的字符串大,若第一个字符相等,则继续比较第二个字符,依此类推,直至出现不同的字符为止。表

C#的关系运算符运算符含义实例结果==相等"ABCDEF"=="ABCD"False!=不等"ABCD"!="abcd"True>大于56>134False>=大于等于123>=23False<小于‘4’<56True<=小于等于78.8<=90TruexisT数据x是否属于类型TmyArrayisintmyArrayisint[]FalseTruexasT返回转换为类型T的x,如果x不是T则返回nullmyArrayasint[]myArrayasobjectSystem.Int32[]System.Int32[]注意字符串的比较通常用==和!=,不允许直接用>,<,>=,<=关系运算符,采用以下方式:String.Compare(“哎”,“b”);//返回1,表明前面的字符串大。例:usingSystem;classRelaOpr{staticvoidMain(){

inta=50;

intx=30;

inty=60;

intb;b=x+y;

boolj;j=a==b-40;

Console.WriteLine(“a=bis{0}”,j);}}该程序运行后,输出结果为:

a=bisTrue

3.逻辑运算符逻辑运算符用于表示两个布尔值之间的逻辑关系,逻辑运算结果是布尔类型。逻辑非(!):运算的结果是原先的运算结果的逆。

逻辑与(&&):只有两个运算对象都为true,结果才为true;只要其中有一个是false,结果就为false。

逻辑或(||):只要两个运算对象中有一个是true,结果就为true,只有两个条件均为false,结果才为false。

运算符含义说明优先级实例结果!逻辑非当操作数为False时返回True;当操作数为True时返回False1!True!FalseFalseTrue&逻辑与两个操作数均为True时,结果才为True,否则为False2True&TrueTrue&FalseFalse&TrueFalse&FalseTrueFalseFalseFalse^逻辑异或两个操作数不相同,即一个为True一个为False时,结果才为True,否则为False3True^TrueTrue^FalseFalse^TrueFalse^FalseFalseTrueTrueFalse|逻辑或两个操作数中有一个为True时,结果即为True,否则为False4True|TrueTrue|FalseFalse|TrueFalse|FalseTrueTrueTrueFalse&&条件与两个操作数均为True时,结果才为True。但仅在必要时才计算第二个操作数5True&&TrueTrue&&FalseFalse&&TrueFalse&&FalseTrueFalseFalseFalse||条件或两个操作数中有一个为True时,结果即为True。但仅在必要时才计算第二个操作数6True||TrueTrue||FalseFalse||TrueFalse||FalseTrueTrueTrueFalse当需要多个判定条件时,可以很方便地使用逻辑运算符将关系表达式连接起来。例:x>y&&x>0

如果表达式中同时存在着多个逻辑运算符,逻辑非的优先级最高,逻辑与的优先级高于逻辑或。例:3>2||!(5-3<6)&&’a’<‘b’4.位运算符

(1)“~”运算符把二进制数的0转换为1,1转换为0。例:6的二进制表示:00000110~6的结果:11111001(2)“&”运算符

0&0=00&1=01&0=01&1=1

例:7的二进制表示:0000011111的二进制表示:00001011—————————————“&”运算的结果是:00000011

即:7&11=3

(3)“|”运算符

0|0=00|1=11|0=11|1=1

例:7的二进制表示:0000011111的二进制表示:00001011—————————————“|”运算的结果是:00001111

即:7|11=15(4)“^”运算符

0^0=00^1=11^0=11^1=0

例:7的二进制表示:0000011111的二进制表示:00001011—————————————“^”运算的结果是:00001100

即:7^11=12

(5)“<<”运算符

二进制位全部按位左移,高位被丢弃,低位顺序补0。

例:7的二进制表示:000001117<<1结果是00001110(十进制是14)

对于一个int类型(32位)如果左移33位,则相当于1位

(6)

“>>”运算符二进制位全部按位右移。补首位(0或者1)

例:7的二进制表示:000001117>>1结果是00000011(十进制是3)【例3.3】逻辑运算符!、&、&&、|、||、^等示例【例3.4】位运算符<<、>>示例位运算优先级运算符含义优先级实例结果~按位求补1~0xf80xffffff07<<左移20x1<<10x2>>右移20xffffffff>>10x7fffffff&按位逻辑与30xf8&0x3f0x38^按位逻辑异或40xf8^0x3f0xc7|按位逻辑或50xf8|0x3f0xff例shorta=10;

ushortb=10;

intc=10;

uintd=10;Console.WriteLine(~10);Console.WriteLine("short:{0}",~a);Console.WriteLine("ushort:{0}",~b);Console.WriteLine("int:{0}",~c);Console.WriteLine("uint:{0}",~d);5.赋值运算符赋值运算符用于将一个数据赋予一个变量,赋值操作符的左操作数必须是一个变量,赋值结果是将一个新的数值存放在变量所指示的内存空间中。(1)简单赋值语句:变量名

=表达式;(2)复合赋值语句例如:

intx=8;x=x+x;x=16-x;运算符含义举例等效于+=加法赋值sum+=itemsum=sum+item-=减法赋值count-=1count=count–1*=乘法赋值x*=y+5x=x*(y+5)/=除法赋值x/=y-zx=x/(y-z)%=取模赋值x%=2x=x%2<<=左移赋值x<<=yx=x<<y>>=右移赋值x>>=yx=x>>y&=与赋值x&=5>3x=x&(5>3)|=或赋值x|=truex=x|true^=异或赋值x^=yx=x^y表

C#的赋值运算符可以把表达式的值通过复合赋值运算符赋予变量,这时复合赋值运算右边的表达式是作为一个整体参加运算的。例:

inta=8,b=3;a%=b*2-5;

/*相当于a%=(b*2-5),它与a=a%(b*2-5)是等价的。*/

对变量可以进行连续赋值。例:

intz=3;

x=y=z;//等价于x=(y=z)。

6.条件运算符格式:

操作数1?操作数2:操作数3

含义:进行条件运算时,首先判断问号前面的布尔值是true还是false,如果是true,则值等于操作数2的值;如果为false,则值等于操作数3的值。例如:条件表达式“6>8?15+a:39”,由于6>8的值为false,所以整个表达式的值是39。7.其他运算符

(1)字符串连接符(+)就是将两个字符串连接在一起,形成新的字符串。比如:“abc”+“efg”//结果是abcefg“36812”+“3.14”//结果是368123.1432.5+“99”//结果是32.59932.5默认双精度被自动转换成string,详见注意3注意:当其中的一个操作数是字符串类型或两个操作数都是字符串类型时,二元+运算符执行字符串串联。在字符串串联运算中,如果它的一个操作数为null,则用空字符串来替换此操作数。否则,任何非字符串参数都通过调用从object类型继承的虚ToString方法,转换为它的字符串表示形式。如果ToString返回null,则替换成空字符串。

(2)

is运算符

is运算符用于检查表达式是否指定的类型,如果是,结果为true,否则结果为false。例如:

intk=2;

bool

isTest=kisint;//isTest=true

(3)

sizeof运算符

sizeof运算符用于获得值类型数据在内存占用的字节数。sizeof用于获取值类型的字节大小,仅适用于值类型,而不适用于引用类型。例如:

inta=sizeof(double);//a=8

(4)

typeof(数据类型)//结果是CTS的类型对象注意:

typeof用于获取类型的System.Type对象;若要获取变量或者表达式的运行时类型,可以使用.NETFramework方法GetType()。不能对表达式或变量用typeof

;只能采用GetType().例如:正确:System.Typetype=typeof(int);

System.Typet1=typeof(bool);//typeof内只能写数据类型

intradius=5;

System.Typet2=radius.GetType();错误:System.Typet3=typeof(radius);错误!!【例3.6】typeof运算符示例8运算符优先级表达式中的运算符按照运算符优先级(precedence)的特定顺序和结合性规则计算表3-6按优先级从高到低的顺序列出各运算符类别,同一类别中的运算符优先级相同3.3表达式表达式的组成表达式由操作数(变量、常量、函数)、运算符和圆括号按一定规则组成。表达式通过运算后产生运算结果,运算结果的类型由操作数和运算符共同决定。表达式的书写规则(1)乘号不能省略,例如,a乘以b应写为a*b。(2)括号必须成对出现,而且只能使用圆括号;圆括号可以嵌套使用。(3)表达式从左到右在同一个基准上书写,无高低、大小区分

1.算术表达式算术表达式是用算术运算符将运算对象连接起来的符合语法规则的式子。自增运算符和自减运算符的优先级别高于其他的算术运算符。例如表达式8+x++,应看作8+(x++)。如果x的原值是6,则表达式8+x++的值是14,运算结束后x的值是7。

2.赋值表达式由赋值运算符将变量和表达式连接起来的式子称为赋值表达式。例如:

y=x=8*8+3

这个赋值表达式的值是67。由于赋值运算符的结合性是自右至左的,所以y=x=8*8+3和y=(x=8*8+3)是等价的。

3.关系表达式用关系运算符将两个表达式连接起来的式子称为关系表达式。关系表达式的值是布尔类型,即真(true)或假(false)。例如:

x=8;y=6;z=x>y+3;//结果为falsea=x>y&&z;//结果为false

4.逻辑表达式

用逻辑运算符将关系表达式或者逻辑值连接起来的式子称为逻辑表达式。逻辑表达式的值只能取true或false。

三个逻辑运算符的运算顺序为“逻辑非”最高,其次是“逻辑与”,最后为“逻辑或”。例如:

!(3>6)||(5<8)&&(2>=9)||(7>=1)

//结果为true5.条件表达式(自右向左结合性)由条件运算符和表达式组成的式子称为条件表达式。例如:

8>3?5:2;

其结果为5,因为8>3为true,则整个表达式的值为“:”前面表达式的值,这里是常数5。【例3.7】C#表达式示例

练习:判断题:已知a=3,b=4,则++(a+b)的结果为8。()整数除法会产生一个整数商,其小数部分会被舍去。()若变量a为整型,则表达式“aisint”的结果为true。()选择题1.已知

inta;stringb=”123”;

boolc;

则有错误的表达式为()

A.a==10&&cB.c>120C.2*a+1D.b+”456”2.表达式“abcde”==”abcde”+”2006”的值为()

A.True2006B.trueC.falseD.0读程序,写结果:1.usingSystem;ClassDemo{staticvoidMain(){doublex=10.0,y=3.0;byteb;inti;charch;i=(int)(x/y);

Console.WriteLine(“(int)(x/y)={0}”,i);i=100;b=(byte)i;

Console.WriteLine(“b={0}”,b);i=257;b=(byte)i;

Console.WriteLine(“b={0}”,b);b=66;

ch=(char)b;

Console.WriteLine(“ch={0}”,ch);}}结果:

2.usingSystem;classLogicalOperator

{staticvoidMain(){

inti=1;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论