收藏 分销(赏)

第二章C#语言基础.ppt

上传人:pc****0 文档编号:13786811 上传时间:2026-04-14 格式:PPT 页数:96 大小:2.57MB 下载积分:10 金币
下载 相关
第二章C#语言基础.ppt_第1页
第1页 / 共96页
第二章C#语言基础.ppt_第2页
第2页 / 共96页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,2,章,C#,编程基础,C#,的基本数据类型、变量、常量、表达式、程序流程控制语句及数组等概念是,C#,程序设计的基础,掌握这些基本知识是编写正确程序的前提。,主要内容,2.1,基本类型,2.2,变量与常量,2.3,运算符与表达式,2.4,选择语句,2.5,数组,2.6,综合应用,基本编码规则,1,标识符和保留字,C#,语言中,标识符是以字母、下划线(,_,)或,开始的一个字符序列,后面可以跟字母、下划线、数字。,C#,语言区分大小写。一般变量名首字母小写,后面各单词首字母大写;而常量、类名、方法、属性等首字母大写。,具有专门的意义和用途,不能当作一般的标识符使用,这些标识符称为保留字。,2,书写规则,每行语句以“;”结尾。,空行和缩进被忽略。,多条语句可以处于同一行,之间用分号分隔即可。,3,注释,有三种类型的注释语句:,/,注释一行,/*,一行或多行注释*,/,/XML,注释方式,2.1,数据类型,C#,语言中的数据类型划分,C#,语言的数据类型按内置和自定义划分有内置类型和构造类型。,按数据的存储方式划分,有值类型和引用类型。,值类型,各种值类型总是含有相应该类型的一个值。每当把一个值赋给一个值类型时,该值实际上被拷贝了。相比,对于引用类型,仅是引用被拷贝了,而实际的值仍然保留在相同的内存位置。,C#,的值类型可以归类如下:,简单类型,(Simple types),枚举类型,(Enumeration types),结构类型,(,struct,types),2.2.1,值类型,所谓值类型就是一个包含实际数据的量。当定义一个值类型的变量时,,C#,会根据它所声明的类型,以堆栈方式分配一块大小相适应的存储区域给这个变量,随后对这个变量的读,/,写操作就直接在这块内存区域进行。,.,例如:,int,iNum,=10;/,分配一个,32,位内存区域给变量,iNum,,并将,10,放入该内存区域,iNum,=iNum+10;/,从变量,iNum,中取出值,加上,10,,再将计算结果赋给,iNum,图,2.1,值类型操作示意图,表,2.1 C#,简单类型,C#,关键字,.NET CTS,类型名,说,明,范围和精度,bool,System.Boolean,逻辑值(真或假),true,false,sbyte,System.SByte,8,位有符号整数类型,128127,byte,System.Byte,8,位无符号整数类型,0255,short,System.Int16,16,位有符号整数类型,3276832767,ushort,System.UInt16,16,位无符号整数类型,065535,int,System.Int32,32,位有符号整数类型,21474836482147483647,cts是通用类型系统(Common,Type System),clr是公共语言运行时(common,language runtime),cls是公共语言定义(Common,Language Specification),续表,C#,关键字,.NET CTS,类型名,说,明,范围和精度,uint,System.Uint32,32,位无符号整数类型,04294967295,long,System.Int64,64,位有符号整数类型,92233720368547758089223372036854775807,ulong,System.UInt64,64,位无符号整数类型,018446744073709551615,char,System.Char,16,位字符类型,所有的,Unicode,编码字符,float,System.Single,32,位单精度浮点类型,(大约,7,个有效十进制数位),double,System.Double,64,位双精度浮点类型,(大约,1516,个有效十进制数位),decimal,System.Decimal,128,位高精度十进制数类型,(大约,2829,个有效十进制数位),表中“,C#,关键字”是指在,C#,中声明变量时可使用的类型说明符。,引用类型,引用类型包括,class,(类)、,interface,(接口)、数组、,delegate,(委托)、,object,和,string,。其中,object,和,string,是两个比较特殊的类型。,object,是,C#,中所有类型(包括所有的值类型和引用类型)的根类。,string,类型是一个从,object,类直接继承的密封类型(不能再被继承),其实例表示,Unicode,字符串。,一个引用类型的变量不存储它们所代表的实际数据,而是存储实际数据的引用。引用类型分两步创建:首先在堆栈上创建一个引用变量,然后在堆上创建对象本身,再把这个内存的句柄(也是内存的首地址)赋给引用变量。,例如:,string s1,s2;,s1=ABCD;s2=s1;,其中,,s1,、,s2,是指向字符串的引用变量,,s1,的值是字符串,ABCD,存放在内存的地址,这就是对字符串的引用,两个引用型变量之间的赋值,使得,s2,、,s1,都是对,ABCD,的引用,如图,2.2,所示。,图,2.2,引用类型赋值示意,引用类型的值是引用类型实例的引用,特殊值,null,适用于所有引用类型,它表明没有任何引用的对象。当然也可能有若干引用类型的变量同时引用一个对象的实例,对任何一个引用变量作出修改都会导致该对象的值的修改。,注意,:,堆栈是按先进后出(,FILO,)的原则存储数据项的一种数据结构;堆(,heap,)则是用于动态内存分配的一块内存区域,可以按任意顺序和大小进行分配和释放。,C#,中,值类型就分配在堆栈中,堆栈内存区域内保存着值类型的值,内存区域可以通过变量名来存取。引用类型分配在堆中,对象分配在堆时,返回的是地址,这个地址被赋值给引用。,C#,用“装箱”和“拆箱”来实现值类型与引用类型之间的转换。,“装箱”就是将值类型包装成引用类型的处理过程。当一个值类型被要求转换成一个,object,对象时,“装箱”操作自动进行,它首先创建一个对象实例,然后把值类型的值复制到这个对象实例,最后由,object,对象引用这个对象实例。,2.1.3,值类型与引用类型的关系,例如,:,using System;,class Demo,public static void Main(),int,x=123;,object obj1=x;/,装箱操作,x=x+100;/,改变,x,的值,此时,obj1,的值并不会随之改变,Console.WriteLine,(x=0,x);/x=223,Console.WriteLine,(obj1=0,obj1);,/obj1=123,该实例的“装箱”操作说明如图,2.3,所示。,“拆箱”操作与“装箱”相反,它是将一个,object,类型转换成值类型。首先检查由,object,引用的对象实例值类型的包装值,然后把实例中的值复制到值类型的变量中,注意:当一个“装箱”操作把值类型转换为一个引用类型时,不需要显式地强制类型转换;而拆箱操作把引用类型转换到值类型时,由于它可以强制转换到任何可以相容的值类型,所以必须显式地强制类型转换。,using System;,class Demo,public static void Main(),int,x=123,y;,object obj1=x;/,装箱操作,x=x+100;/,改变,x,的值,此时,obj1,的值并不会随之改变,y=(,int,)obj1;/,拆箱操作,必须进行强制类型转换,Console.WriteLine,(x=0,x);/x=223,Console.WriteLine,(obj1=0,obj1);,/obj1=123,2.2,变量与常量,2.2.1,常量,常量,顾名思义就是在程序运行期间其值不会改变的量,它通常可以分为字面常量和符号常量。,每一种值类型都有自己的常量表示形式。,整数常量,:,对于一个整数值,默认的类型就是能保存它的最小整数类型,其类型可以分为,int,、,uint,、,long,或,ulong,。如果默认类型不是想要的类型,可以在常量后面加后缀(,U,或,L,)来明确指定其类型。,在常量后面加,L,或,l,(不区分大小写)表示长整型。例如:,32 /,这是一个,int,类型,32L /,这是一个,long,类型,在常量后面加,U,或,u,(不区分大小写)表示无符号整数。例如:,128U /,这是一个,uint,类型,128UL /,这是一个,ulong,类型,整型常量不加特别说明默认为十进制,在数值前面加,0 x,(或,0X,)则表示十六进制数,十六进制基数用,09,、,AF,(或,af,),例如:,0 x20 /,十六进制数,20,,相当于十进制数,32,0 x1F /,十六进制数,1F,,相当于十进制数,31,一般带小数点的数或用科学计数法表示的数都被认为是浮点数,它的数据类型默认为,double,类型,但也可以加后缀符表明三种不同的浮点格式数。,在数字后面加,F,(,f,)表示是,float,类型。,在数字后面加,D,(,d,)表示是,double,类型。,在数字后面加,M,(,m,)表示是,decimal,类型。,例如:,3.14,3.14e2,0.168E,2 /,这些都是,double,类型常量,,3.14F,0.168f /,这些都是,float,类型常量,3.14D,0.168d /,这些都是,double,类型常量,3.14M,0.168m /,这些都是,decimal,类型常量,2,浮点常量,字符常量,是用单引号括起来的单个字符,如,A,,它占,16,位,以无符号整型数的形式存储这个字符所对应的,Unicode,代码。单引号括起的一个字符,如,A,。,十六进制的换码系列,以“,x”,或“,X”,开始,后面跟,4,位十六进制数,如,X0041,。,Unicode,码表示形式,以“,U”,或“,u”,开始,后面跟,4,位十六进制数,如,U0041,。,显式转换整数字符代码,如(,char,),65,。,字符转义系列,如表,2.2,所示。,3,字符常量,转 义 字 符,含 义,Unicode,码,转 义 字 符,含 义,Unicode,码,单引号,u0027,b,退格符,u0008,双引号,u0022,f,走纸换页符,u000C,反斜线字符,u005C,n,换行符,u000A,0,空字符,u0000,r,回车符,u000D,a,警铃符,u0007,t,水平制表符,u0009,v,垂直制表符,u000B,表,2.2,字符转义符,字符串常量是用双引号括起的零个或多个字符序列。,C#,支持两种形式的字符串常量,一种是常规字符串,另一种是逐字字符串。,(,1,)常规字符串。双引号括起的一串字符,可以包括转义字符。,例如:,Hello,Worldn,C:windowsMicrosoft /,表示字符串,C:windowsMicrosoft,(,2,)逐字字符串。在常规的字符串前面加一个,,就形成了逐字字符串,它的意思是字符串中的每个字符均表示本意,不使用转义字符。,如果在字符串中需用到双引号,则可连写两个双引号来表示一个双引号。,例如:,C:windowsMicrosoft /,与,C:windowsMicrosoft,含义相同,He,saidHello,to me /,与,He saidHello to me,含义相同,4,字符串常量,5,布尔常量,它只有两个值:,true,和,false,。,6,符号常量,在声明语句中,可以声明一个标识符常量,但必须在定义标识符时就进行初始化,并且定义之后就不能再改变该常量的值。,具体的格式为:,const,类型 标识符,=,初值,例如:,const double PI=3.14159,变量是在程序运行过程中其值可以改变的量,它是一个已命名的存储单元,通常用来记录运算的中间结果或保存数据。,在,C#,中,每个变量都具有一个类型,它确定哪些值可以存储在该变量中。变量的特性由类型来决定。,C#,中的变量必须先声明后使用。,声明变量包括变量的名称、数据类型,必要时指定变量的初始值。,声明变量的形式:,类型 标识符表,;,或,类型 标识符,=,初值,;,2.2.2,变量,C#,是大小写敏感的语言,,name,、,Name,分别代表不同的标识符,在定义和使用时要特别注意。另外变量名不能与,C#,中的关键字相同,除非标识符是以,作为前缀的。,例如:,int,x;/,合法,float y1=0.0,y2=1.0,y3;/,合法,变量说明的同时可以设置初始数值,string char /,不合法,因为,char,是关键字,string char /,合法,C#,允许在任何模块内部声明变量,每次进入声明变量所在的模块时,则创建变量并分配存储空间,离开这个模块时,则销毁这个变量并收回分配的存储空间。,实际上,变量只在这个模块内有效,所以称为局部变量,这个模块区域就是变量的作用域,表达式是由操作数和运算符构成的。,操作数可以是常量、变量、属性等;,运算符指示对操作数进行什么样的运算。,C#,运算符有一元运算符(如,+,)、二元运算符(如,+,,*)、三元运算符(如,?:,)。,按运算功能来分,基本的运算符可以分为以下几类:,(,1,)算术运算符,(,2,)关系运算符,(,3,)逻辑运算符,(,4,)位运算符,(,5,)赋值运算符,(,6,)条件运算符,(,7,)其他(分量运算符,,下标运算符,等),2.3,运算符与表达式,2.3.1,算术运算符,运算 符,含 义,示例(假设,x,,,y,是某一数值类型的变量),运 算 符,含 义,示例(假设,x,,,y,是某一数值类型的变量),+,加,x+y;x+3;,%,取模,x%y;11%3;11.0%3;,减,x y;y,1;,+,递增,+x;x+;,*,乘,x*y;3*4;,递减,x;,x,;,/,除,x/y;5/2;5.0/2.0;,算术运算符作用的操作数类型可以是整型也可以是浮点型,运算符如表,2.3,所示,其中:,“,+,*/”,运算与一般代数意义及其他语言相同,但需要注意:当“,/”,作用的两个操作数都是整型数据类型时,其计算结果也是整型。,例如:,4/2 /,结果等于,2,5/2 /,结果等于,2,5/2.0 /,结果等于,2.5,“%”,取模运算,即获得整数除法运算的余数,所以也称取余。,例如:,11%3/,结果等于,2,12%3 /,结果等于,0,11.0%3 /,结果等于,2,,这与,C/C+,不同,它也可作用于浮点类型的,操作数,“,+”,和“,”递增和递减运算符是一元运算符,它作用的操作数必须是变量,不能是常量或表达式。,要区分前缀运算,后缀运算,例如:,+x,先将,x,加一个单位,然后再将计算结果作为表达式的值。,x+,先将,x,的值作为表达式的值,然后再将,x,加一个单位。,不管是前缀还是后缀,操作数都加了一个单位,但出现在表达式运算中是有区别的。,例如:,int,x,y;,x=5;y=+x;/x,和,y,的值都等于,6,x=5;y=x+;/x,的值是,6,,,y,的值是,5,2.3.2,关系运算符,运 算 符,操 作,结果(假设,x,,,y,是某相应类型的操作数),xy,如果,x,大于,y,,则为,true,,否则为,false,=,x=y,如果,x,大于等于,y,,则为,true,,否则为,false,xy,如果,x,小于,y,,则为,true,,否则为,false,=,x,右移,左移,按位异或运算有一个特别的属性,假设有两个整型数,x,和,y,,则表达式,(x y)y,值还原为,x,,利用这个属性可以创建简单的加密程序。例如,using System;,class Encode,public static void Main(),char ch1=O,ch2=K;,int,key=0 x1f;,Console.WriteLine,(,明文:,+ch1+ch2);,ch1=(char)(ch1 key);,ch2=(char)(ch2 key);,Console.WriteLine,(,密文:,+ch1+ch2);,ch1=(char)(ch1 key);,ch2=(char)(ch2 key);,Console.WriteLine,(,解码:,+ch1+ch2);,移位运算符有两个:一个左移(,)。,语法形式:,value,num_bits,左操作数,value,是要被移位的值,右操作数,num_bits,是要移位的位数,(,1,)左移。将给定的,value,向左移动,num_bits,位,左边移出的位丢掉,右边空出的位填,0,。,例如:,0 x1A 2,。右移过程如图,2.8,所示。,例如:,0 x8AU 2,。右移过程如图,2.9,所示。,右移运算符的作用相当于将,value,的值整除以,位运算练习,62=?,1=2);,赋值运算符有两种形式,一种是简单赋值运算符,另一种是复合赋值运算符。,1,简单赋值运算符,语法形式:,var,=exp,2,复合赋值运算符,在进行如,x=x+3,运算时,,C#,提供一种简化方式,x+=3,,这就是复合赋值运算。,语法形式:,var,op=exp /op,表示某一运算符,等价的意义是:,var,=,var,op exp,2.3.5,赋值运算符,运,算,符,用,法,示,例,等价表达式,运,算,符,用,法,示,例,等价表达式,+=,x+=y,x=x+y,&=,x&=y,x=x&y,=,x,=y,x=,x,y,|=,x|=y,x=x|y,*,=,x*=y,x=x*y,=,x=y,x=x y,/=,x/=y,x=x/y,=,x=y,x=x y,%=,x%=y,x=x%y,=,x=y,x=x y?x:y;/z,的值就是,x,,,y,中较大的一个值,z=x=0?x:,x;/z,的值就是,x,的绝对值,条件运算符“,?:”,是,C#,中唯一一个三元运算符。,2.3.6,条件运算符,当一个表达式含有多个运算符时,,C#,编译器需要知道先做哪个运算,这就是所谓的运算符的优先级,它控制各个运算符的运算顺序,当操作数出现在具有相同优先级的运算符之间时,如表达式“,10,6,2”,按从左到右计算的结果是,2,,如果按从右到左计算,结果是,6,。当然“,”运算符是按从左到右的次序计算的,也就是左结合。,再如表达式“,x=y=2”,,它在执行时是按从右到左运算的,即先将数值,2,赋给变量,y,,再将,y,的值赋给,x,。所以“,=”,运算符是右结合的。,运算符的优先级和结合性控制着运算的执行顺序,也可以用圆括号“()”显式地标明运算顺序,如表达式“,(,x+y,)*2”,2.3.7,运算符的优先级与结合性,表,2.9,运算符的优先级与结合性,类,别,运,算,符,结,合,性,初等项,.()new,typeof,checked unchecked,从左到右,一元后缀,+,从右到左,一元前缀,+,+,!,(T)(,表达式,),从右到左,乘法,*,/%,从左到右,加法,+,从左到右,移位,从左到右,关系和类型检测,=is as,从左到右,相等,=!=,从左到右,逻辑与,&,从左到右,逻辑异或,从左到右,逻辑或,|,从左到右,条件与,&,从左到右,条件或,|,从左到右,条件,?:,从右到左,赋值,=*=/=%=+=,=,=&=|=,从右到左,判断闰年的例子,int year=2008;,bool leap=false;,leap=(year%400=0)|(year%100!=0),Console.WriteLine(0,是,:1,year,leap);,1,下列语句片段,int,a=10,b=4,c=20,d=6;,Console.WriteLine(a,+*,b+c,*-d);,的结果为,()(A)144,(B)28 (C)140,(D),不能执行,2,int,n=5;,n=2;,Console.WriteLine(n,);,在表达式中,操作数的数据类型可以不同,只要相互兼容即可。,当表达式中混合了几种不同的数据类型时,,C#,会基于运算的顺序将它们自动转换成同一类型。,下面是,C#,的类型提升规则。,(,1,)一个操作数是,decimal,类型,另一个操作数提升为,decimal,,但,float,或,double,类型不能自动提升为,decimal,。,(,2,)一个操作数是,double,类型,另一个操作数提升为,double,。,(,3,)一个操作数是,float,类型,另一个操作数提升为,float,。,(,4,)一个操作数是,ulong,类型,另一个操作数提升为,ulong,,但带符号数,如,sbyte,、,short,、,int,或,long,不能自动提升。,(,5,)一个操作数是,long,类型,另一个操作数提升为,long,。,(,6,)一个操作数是,uint,类型,另一个操作数若是,sbyte,、,short,或,int,,那么这两个操作数都提升为,long,。,(,7,)一个操作数是,uint,类型,另一个操作数提升为,uint,。,(,8,)除以上情况之外,两个数值类型的操作数都提升为,int,类型。,2.3.8,表达式中的类型转换:,强制类型的转换形式:,(类型)表达式,例如:,decimal d1,d2;,float f1;,d1=99.999;,f1=0.98;,d2=d1+f1;/,出错,因为,float,类型的,f1,不能自动转换成,decimal,类型,d2=d1+(decimal)f1;,注意:,1.,当从占用内存较多的数据类型向占用内存较少的数据类型做强制转换时,有可能会发生数据丢失。例如,从,long,数据类型强制转换成,int,类型时,如果,long,类型的值超过,int,所能表示的范围,则会丢失高位数据。,2.,虽然,char,类型属于整数类型的一种,但却不允许直接将一个整型数赋给一个,char,类型的变量,解决的方法就是用强制类型转换。,3.,布尔类型不能进行数据类型转换。,上机运行下列程序,注意观察输出的结果,for(,int,i=20302;i=20322;i+),Console.WriteLine(char)i);,任何程序都可以且只能由三种基本流程结构构成,即顺序结构、分支结构和循环结构。,1.,顺序结构是三种结构中简单的一种。即语句按照书写的顺序依次执行;,2.,分支结构又称为选择结构,它将根据计算所得的表达式的值来判断应选择执行哪一个流程分支;,3.,循环结构则是在一定条件下反复执行一段语句的流程结构。,2.4.1,结构化程序设计的三种基本流程,图,2.10,程序设计的三种控制流程,分支语句就是条件判断语句,它能让程序在执行时根据特定条件是否成立而选择执行不同的语句块。,C#,提供两种分支语句结构,,if,语句和,switch,语句。,2.4.2,分支语句,1,if,语句,1.if,框架,语法形式:,if(,条件表达式,),语句;,2.,if_else,框架,语法格式:,if(,条件表达式,),语句,1,;,else,语句,2,;,3.,if_else,if,框架,语法形式:,if(,条件表达式,1),语句,1,;,else if(,条件表达式,2),语句,2,;,else if(,条件表达式,3),语句,3,;,else,语句,n,;,4.,嵌套的,if,语句,switch,语句是一个多分支结构的语句,它所实现的功能与,if_else,if,结构相似,但在大多数情况下,,switch,语句表达方式更直观、简单、有效。,2,switch,语句,语法形式:,switch,(表达式),case,常量,1,:语句序列,1,;,/,由零个或多个语句组成,break,;,case,常量,2,:语句序列,2,;,break,;,.,default,:,/default,是任选项,可以不出现语句序列,n,;,break,;,使用注意,(,1,),switch,语句表达式必须是整数类型,,case,常量必须与表达式类型兼容,,case,常量的值必须互异,不能有重复。,(,2,)“不穿透”规则,(,3,)可以有两个或多个,case,前缀指向相同的语句序列。,using System;,class,StudentGrade,public static void Main(),Console.Write,(,输入学生百分制的成绩:,);,int,Grade=(,int)Console.Read,();,switch(Grade/10),case 9:,case 10:,Console.WriteLine,(,你的成绩为:,A);,break;,case 8:,Console.WriteLine,(,你的成绩为:,B);,break;,case 7:,Console.WriteLine,(,你的成绩为:,C);,break;,case 6:,Console.WriteLine,(,你的成绩为:,D);,break;,default:,Console.WriteLine,(,你的成绩为:,E);,break;,【,例,2.1,】,从键盘输入学生的百分制成绩,换算成等级制成绩,int,x=0,y=10;,if(x,=0)=0)|(y=20)=20),Console.WriteLine,(,现在,y,的值是,0:“,y);,int,a=0,b=10;,if(a,=0)=0)|(b=20)=20),Console.WriteLine,(,现在,b,的值是,:0“,b);,循环语句是指在一定条件下,重复执行一组语句,它是程序设计中的一个非常重要也是非常基本的方法。,C#,提供了,4,种循环语句:,while,、,do_while,、,for,和,foreach,。,foreach,语句主要用于遍历集合中的元素。,2.4.3,循环语句,1,while,语句,语法形式:,while,(条件表达式),循环体语句;,如果条件表达式为真(,true,),则执行循环体语句。,while,语句执行流程如图,2.11,所示,图,2.11 while,语句执行流程图,【,例,2.2,】,用,while,语句求,using System;,class Sum100,public static void Main(),int,Sum,i,;,Sum=0;,i=1;,while(i,=100),Sum+=i;,i+;,2,do_while,语句,语法形式:,do,循环体语句;,while,(条件表达式),该循环首先执行循环体语句,再判断条件表达式。如果条件表达式为真(,true,),则继续执行循环体语句。,do_while,循环语句执行流程如图,2.12,所示。,图,2.12,do_while,语句执行流程图,【,例,2.3,】,用,do_while,语句求,using System;,public class Sum100,public static void Main(),int,Sum,i;,Sum=0;i=1;,do,Sum+=i;,i+;,while(i=100),Console.WriteLine,(Sum is +Sum);,while,语句与,do_while,语句很相似,它们的区别在于,while,语句的循环体有可能一次也不执行,而,do_while,语句的循环体至少执行一次。,3,for,语句,语法形式:,for,(表达式,1;,表达式,2;,表达式,3,),循环体语句;,一般情况下,表达式,1,是设置循环控制变量的初值;,表达式,2,是布尔类型的表达式,作为循环控制条件;,表达式,3,是设置循环控制变量的增值(正负皆可)。,for,语句执行流程如图,2.13,所示。,图,2.13 for,语句执行流程图,【,例,2.4,】,用,for,语句求,using System;,public class Sum100,public static void Main(),int,Sum,i;,Sum=0;,for(i=1;i0;i,)/i,也可以每次减,1,Sum+=i;,Console.WriteLine,(Sum is +Sum);,【,例,2.5,】,用,for,语句求,using System;,public class Sum100,public static void Main(),int,Sum,i;,for(Sum=0,i=1;i=100;i+),Sum+=i;,Console.WriteLine,(Sum is +Sum);,for(Sum=0,i=1;i=100;Sum+=i,i+),;/,循环体是一空语句,Console.WriteLine,(Sum is +Sum);,【,例,2.6,】,用,for,语句求,using System;,public class Sum100,public static void Main(),int,Sum,i;,for(Sum=0,i=1;i100)break;/,但条件满足时,,break,语句跳出循环,Console.WriteLine,(Sum is +Sum);,Sum=0;i=1;,for(;)/,三个表达式都默认,Sum+=i+;,if(i100)/,这种情况一般都会用,if,语句来设置跳出循环,break;,Console.WriteLine,(Sum is +Sum);,【,例,2.7,】,用,for,语句求,using System;,public class Sum100,public static void Main(),int,Sum=0;,for(,int,i=1;i=100;i+)/i,只在这个,for,循环中有效,Sum+=i;,Console.WriteLine,(i=+i);/,编译出错,,i,这时已经无效,Console.WriteLine,(Sum is +Sum);,(,1,),for,循环语句,表达式,1,和表达式,3,可引入逗号运算符“,”,,这样可以对若干变量赋初值或增值。,(,2,),for,循环的三个表达式可以任意默认,甚至全部默认,如果表达式,2,默认就约定它的值是,true,。但不管哪个表达式默认,其相应的分号“;”不能默认。,(,3,)可在,for,循环内部声明循环控制变量。,如果循环控制变量仅仅只在这个循环中用到,那么为了更有效地使用变量,也可在,for,循环的初始化部分(表达式,1,)声明该变量,当然这个变量的作用域在这个循环内。,for,循环的一些变化特点:,跳转语句用于改变程序的执行流程,转移到指定之处。,C#,中有,4,种跳转语句:,continue,、,break,、,return,、,goto,语句。它们具有不同的含义,用于特定的上下文环境之中。,2.4.4,跳转语句,1,continue,语句,语法形式:,continue;,continue,语句只能用于循环语句中,它的作用是结束本轮循环,不再执行余下的循环体语句,对,while,和,do_while,结构的循环,在,continue,执行之后,就立刻测试循环条件,以决定循环是否继续下去;对,for,结构循环,在,continue,执行之后,先求循环增量部分,然后再测试循环条件。,using System;,public class Factor3,public static void Main(),for(,int,n=1;n=100;n+),if(n%3!=0),continue;/,如果,n,不能被,3,整除,则直接进入下一轮循环,Console.WriteLine,(n);/,只有能被,3,整除的数,才会执行到此,【,例,2.8,】,输出,1100,之间含有因子,3,的数。,2,break,语句,语法形式:,break;,break,语句只能用于循环语句或,switch,语句中。如果在,switch,语句中执行到,break,语句,则立刻从,switch,语句中跳出,转到,switch,语句的下一条语句;如果在循环语句执行到,break,语句,则会导致循环立刻结束,跳转到循环语句的下一条语句。不管循环有多少层,,break,语句只能从包含它的最内层循环跳出一层。,例,2.9,】,求,1100,之间的所有素数。,using System;,public class Prime,public static void Main(),int,m,k,n=0;,for(m=2;m100;m+=2),for(k=2;k=m),Console.Write,(0,4,m);,if(+n%10=0),Console.WriteLine,(n);,3,return,语句,语法形式:,return,;,或,return,表达式;,return,语句出现在一个方法内。在方法中执行到,return,语句时,程序流程转到调用这个方法处。,如果方法没有返回值(返回类型修饰为,void,),则使用“,return”,格式返回;如果方法有返回值,那么使用“,return,表达式”格式,其后面跟的表达式就是方法的返回值。,例,2.9,】,求,1100,之间的所有素数。,using System;,public class Prime100,public static,bool,prime(,int,m),for(,int,i=2;im;i+),if(m%i=0),return false;,return true;,public static void Main(),int,m,k,n=1;,Console.Write,(0,4,2);,for(m=3;m100;m+=2),if(prime(m,),4,goto,语句,语法形式:,goto,标号;,其中,“标号”就是定位在某一语句之前的一个标识符,称为标号语句。,语法形式:,标号:语句;,它给出,goto,语句转向的目标。值得注意的是,,goto,语句不能使控制转移到另一个语句块内部,更不能转到另一个函数内部。,另外,,goto,语句如果用在,switch,语句中,有如下形式。,语法形式:,goto,case,常量,;,goto,default;,它只能在本,switch,语句中从一种情况转向另一种情况。,【,例,2.11,】,用,goto,语句写“百钱百鸡问题”程序。公鸡,5,元一只,母鸡,3,元一只,小鸡,1,元三只,问,100,元钱可买公鸡、母鸡、小鸡各多少只?,using System;,public class Chook100,public static void Main(),int,x,y,z;,x=y=z=0;,for(x=1;x=100/5;x+),for(y=1;y=100/3;y+),z=100,x,y;,if(z%3=0&5*x+3*y+z/3=100),goto,end;,/,直接从内循环中转出,跳了二层循环,这是,break,语句做不到的,end:,Console.WriteLine(Cock,=0 Hen=1 Chick=2,x,y,z);,Console.Read,();,程序运行结果如下,:,【,例,2.12,】,用,break,语句写“百钱百鸡问题”程序。公鸡,5,元一只,母鸡,3,元一只,小鸡,1,元三只,问,100,元钱可买公鸡、母鸡、小鸡各多少只?,using System;,public class Chook100,public static void Main(),int,x,y,z;,bool,flag=false;,x=y=z=0;,for(x=1;x=100/5;x+),for(y=1;y=100/3;y+),z=100,x,y;,if(z%3=0&5*x+3*y+z/3=100),flag=true;break;,/,这个,break,语
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服