《C基础语法二》课件.ppt

上传人(卖家):晟晟文业 文档编号:4992670 上传时间:2023-01-31 格式:PPT 页数:47 大小:99KB
下载 相关 举报
《C基础语法二》课件.ppt_第1页
第1页 / 共47页
《C基础语法二》课件.ppt_第2页
第2页 / 共47页
《C基础语法二》课件.ppt_第3页
第3页 / 共47页
《C基础语法二》课件.ppt_第4页
第4页 / 共47页
《C基础语法二》课件.ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

1、a1C#C#基础语法二基础语法二西源软件培训中心西源软件培训中心a2回顾uHello World程序的基本结构uC#的数据类型可以分为:值类型、引用类型。u变量是存放特定数据类型的值的容器,而常量也存放特定数据类型的值,但常量在整个程序中都保持一致a3目标目标u理解装箱和拆箱的概念u掌握表达式和运算符u掌握操作符u掌握流程控制a4装箱和取消装箱u装箱是将 值类型转换为 object 类型或由此值类型实现的任一接口类型的过程。当 CLR 对值类型进行装箱时,会将该值包装到 System.Object 内部,再将后者存储在托管堆上。取消装箱将从对象中提取值类型。a5装箱和取消装箱u装箱 int i

2、=123;object o=(object)i;u取消装箱 o=123;i=(int)o;a6装箱和取消装箱的性能 u相对于简单的赋值而言,装箱和取消装箱过程需要进行大量的计算。对值类型进行装箱时,必须分配并构造一个新对象。次之,取消装箱所需的强制转换也需要进行大量的计算。u如果必须频繁地将值类型装箱,则最好避免使用值类型,例如在非泛型集合类(System.Collections.:.ArrayList)中。可以通过使用泛型集合(例如 System.Collections.Generic.:.List(Of))来避免将值类型装箱。装箱和取消装箱都是需要大量运算的过程。对值类型进行装箱时,必须创

3、建一个全新的对象。此操作所需时间可比简单的引用赋值操作长 20 倍。取消装箱时,强制转换过程所需时间可达赋值操作的四倍。a7装箱 u装箱用于在垃圾回收堆中存储值类型。装箱是 值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。int i=123;object o=(object)i;a8装箱u上面哪个例子结果是在堆栈上创建对象引用 o,而在堆上则引用 int 类型的值。该值是赋给变量 i 的值类型值的一个副本。a9装箱u输出 int i=123;object o=i;i=456;System.Console.W

4、riteLine(“i=,i);System.Console.WriteLine(“o=,o);i=456;o=123;u原始值类型和装箱的对象使用不同的内存位置,因此能够存储不同的值。a10取消装箱u取消装箱是从 object 类型到 值类型或从接口类型到实现该接口的值类型的显式转换。取消装箱操作包括:1.检查对象实例,以确保它是给定值类型的装箱值。2.将该值从实例复制到值类型变量中。a11表达式u表达式”是由一个或多个操作数以及零个或零个以上的运算符所组成的序列,可以通过计算得到一个值、对象、方法或命名空间等结果。表达式可以包含文本值、方法调用、运算符及其操作数,或简单名称。简单名称可以是

5、变量、类型成员、方法参数、命名空间或类型的名称。u表达式可以使用运算符,而运算符又可以将其他表达式用作参数,或者使用方法调用,而方法调用的参数又可以是其他方法调用,因此表达式既可以非常简单,也可以非常复杂。(x 5)|(x 20)&(x 25)System.Convert.ToInt32(35)a12表达式值u在大部分使用表达式的上下文中,例如在语句或方法参数中,表达式应计算为某个值。如果 x 和 y 是整数,表达式 x+y 将计算为一个数值。表达式 new MyClass()计算为对 MyClass 对象的新实例的引用。表达式 myClass.ToString()计算为一个字符串,因为字符串

6、是该方法的返回类型。然而,虽然命名空间名称归类为表达式,但它不计算为值,因此永远不能作为任何表达式的最终结果。命名空间名称不能传递给方法参数,不能用在新表达式中,也不能赋值给变量。命名空间名称只能用作较大表达式的子表达式。同样如此的还有类型(与 System.:.Type 对象不同)、方法组名称(与特定方法不同)以及事件 add 和 remove 访问器。a13运算符 u运算符就是表达式中的符号。增增/减减算术算术关系关系相等相等条件条件赋值赋值+-*/%+-=!=&|?:=*=/=%=+=-=&=|=a14运算符详解u运算符分:1.“一元”运算符。2.“二元”运算符。3.算术运算符。4.条件

7、运算符。5.三元运算符。a15“一元”运算符+x-x!xx+x-x(T)x标识标识求反求反逻辑求反逻辑求反按位求反按位求反前递增前递增前递减前递减将将 x 显式转换为类型显式转换为类型 Ta16乘法,加法,移位运算符*/%x+yx-y x y 乘法乘法除法除法余数余数相加、字符串串联、委托相加、字符串串联、委托组合组合相减、委托移除相减、委托移除左移左移右移右移a17关系和类型运算符符x yx=yx is Tx as T小于小于大于大于小于或等于小于或等于大于或等于大于或等于如果如果 x 为为 T,则返回,则返回 True;否则返回否则返回 False返回类型为返回类型为 T 的的 x,如果,

8、如果 x 不是不是 T,则返回,则返回 nulla18相等,赋值和匿名运算符x=yx!=y=x op=y(T x)=y等于等于不等于不等于赋值赋值复合赋值,支持的运算符包括:复合赋值,支持的运算符包括:+=、-=、*=、/=、%=、&=、|=、!=、=匿名函数(匿名函数(lambda 表达式)表达式)a19逻辑、条件和 null 运算符x&y x yx|yx&yx|yX?yx?:y:z 整型按位整型按位“与与”,布尔型逻辑,布尔型逻辑“与与”整型按位整型按位“异或异或”,布尔型逻辑,布尔型逻辑“异或异或”整型按位整型按位“或或”,布尔型逻辑,布尔型逻辑“或或”仅当仅当 x 为为 True 时计

9、算时计算 y仅当仅当 x 为为 False 时计算时计算 y如果如果 x 为为 Null 则计算结果为则计算结果为 y,否,否则计算结果为则计算结果为 x如果如果 x 为为 True 则计算结果为则计算结果为 y,如果如果 x 为为 False 则计算结果为则计算结果为 z a20运算符的优先级u按照运算符的优先级计算表达式。u可以使用圆括号控制运算的顺序。u左结合和右结合。1.所有二元运算符都是左结合的。2.赋值运算符和条件运算符是右结合的。10+20/5结果是 14(10+20)/5 结果是 610+(20/5)结果是 14a21 可重载运算符uC#允许用户定义的类型通过使用 operat

10、or 关键字定义静态成员函数来重载运算符。但不是所有的运算符都可被重载。u比较运算符(如果重载)必须成对重载;也就是说,如果重载=,也必须重载!=。a22可重载运算符运算符可重载性+、-、!、+、-、true 和 false可以重载这些一元运算符。+、-、*、/、%、&、|、可以重载这些二进制运算符。=、!=、=比较运算符可以重载(但请参见本表后面的说明)。&、|条件逻辑运算符不能重载,但可使用能够重载的&和|进行计算。不能重载数组索引运算符,但可定义索引器。()不能重载转换运算符,但可定义新的转换运算符+=、-=、*=、/=、%=、&=、|=、=、=赋值运算符不能重载,但+=可使用+计算,等

11、等。=、.、?:、-、new、is、sizeof、typeof 不能重载这些运算符。a23可重载运算符u若要在自定义类中重载运算符,您需要在该类中创建具有正确签名的方法。该方法必须命名为“operator X”,其中 X 是正在重载的运算符的名称或符号。一元运算符具有一个参数,二元运算符具有两个参数。在每种情况下,参数的类型必须与声明该运算符的类或结构的类型相同。public static Complex operator+(Complex c1,Complex c2)a24操作符u操作符就是特殊的运算符?u括号操作符 格式()u点操作符 格式 (E.I)其中E是基本表达式或者预定义类型,I是

12、一个标识符。C+里除了“.”之外还有“:”“-”,C#里用点操作符来代替。比如一个类T有成员变量M,在C+里用T:M来引用,C#里用T.M来引用。另一点不同的是,C里预定义类型也是从Object类派生出来的,因此也定义了成员变量,比如,I是一个short类型的变量,那么I.ToInt()操作将返回一个Int类型的值。a25操作符unew操作符 格式:a、new 类型(参数列表)b、new 数组类型初始化列表 c、new 代表类型(表达式)utypeof操作符 该操作返回一个类型对应的system.type,如:typeof(int);typeof(System.Int32);typeof(st

13、ring);各自的结果为int32,int32,string。typeof只对类型操作,不能对变量操作,例如,“int I;typeof(I);”是不合法的。a26操作符usizeof操作符 该操作可获得一个类型所占用的空间大小,以字节为单位。该操作符用在unsafe模块中,如 Unsafe S=sizeof(int);或者在调用该操作符的函数中使用该前缀。a27流程控制u程序所执行的操作以“语句”表达。u常见操作包括声明变量、赋值、调用方法、循环访问集合,以及根据给定条件分支到一个或另一个代码块。u语句在程序中的执行顺序称为“控制流”或“执行流”。根据程序对运行时所收到的输入的响应,在程序每

14、次运行时控制流可能有所不同。uC#的控制语句分为两个主要部分:选择语句和循环语句。a28选择语句u选择语句可以根据布尔表达式的值,有选择性的执行程序的某一部分。u在C#中的条件语句有 if 和 switch 两种 if 适合两个分支判断。switch 适合多个分支判断。a29IF语句uIf语句是最先且最常用到的语句,内含语句是否被执行取决于布尔表达式;u语法:if(布尔表达式)语句块1;else 语句块2;uelse 部分可选uif else 可以嵌套a30IF语句u示例:if(sales 10000)bonus=0.05*sales;else bonus=0;u运算符(?:)是 if els

15、e 语句的缩略形式 bonus=(sales1000)?(0.05*sales):0;a31Switch语句uSwitch语句和if语句相比,Switch语句有一个控制表达式,而且内含语句按它们所关联的控制表达式的常量运行。u语法:switch(控制表达式)case value1:语句;break;case value2:语句;break;default:语句;break;a32Switch语句uSwitch语句中的控制表达式所允许的数据类型为:sbyte,byte,short,ushort,uint,ulong,char,string或者枚举类型,只要使其它不同数据类型能隐式的转换成上述任何

16、类型,用它做控制表达式都可以。a33Switch语句uSwitch语句按如下顺序执行:1.控制表达式求值 2.如果case标签后的常量表达式符合控制语句所求出的值,内含语句被执行。3.如果没有常量表达式符合控制语句,在default标签内的内含语句被执行。4.如果没有一个符合case标签,且没有default标签,控制转向switch语段的结束端。5.可以在swtich语句中使用goto标签和goto defaulta34Switch语句u示例:switch(nRndNumber)case 1:/什么也不做 break;case 2:goto case 3;case 3:Console.Wri

17、teLine(Handler for 2 and 3);break;case 4:goto default;/everything beyond a goto will be warned as/unreachable code default:Console.WriteLine(Random number 0,nRndNumber);a35循环语句u循环语句当需要重复执行某些语句段的时候,依据当前不同的任务,C#提供4个不同的循环语句选择供你使用。1.For语句.2.Foreach语句.3.While语句.4.Do语句.a36For语句uFor语句 当你预先知道一个内含语句要执行多少次的时候

18、,使用For语句特别有用。常规语法允许重复地执行内含语句(和循环表达式):For(初试化;条件;循环)内含语句 注:初试化,条件和循环是可选的。如果忽略了条件,你可能就产生了一个死循环,要用到跳转语句(break或goto)才能退出。a37For语句u先执行初始化表达式,此部分只执行一次。u判断条件表达式,若满足条件则执行循环体;否则跳出for 循环。u每次循环语句执行完后要执行一次迭代,并重新判断循环条件。u示例:for(int i=0;i 0;j-=10)Console.WriteLine(j=0,j);a38Break,continue,goto,returnubreak语句 break

19、语句用于跳出和终止整个循环。ucontinue语句 终止当次循环,开始下一次迭代和循环(并不终止整个循环)。ugoto语句 goto语句用于将控制权传递给由标号表明的语句。ureturn语句 Return语句将控制权返回给包含该return语句的函数成员的调用程序。a39Foreach语句uForeach语句已经在在语句已经在在VB中存在很久的一个中存在很久的一个功能是通过使用功能是通过使用FOR Each语句收集枚举。语句收集枚举。C#通过通过foreach语句语句,也有一个用来收集枚举的命也有一个用来收集枚举的命令令:foreach(表达式中的类型标识符表达式中的类型标识符)内含语句循内含

20、语句循环变量有类型和标识符声明环变量有类型和标识符声明,且表达式与收集且表达式与收集相对应。循环变量代表循环正在为之运行的收相对应。循环变量代表循环正在为之运行的收集元素。集元素。a40Foreach语句uforeach语句允许我们连续访问数组中的每一个元素。u示例:foreach(int i in arr)if(i%2=0)even+;else odd+;a41While(条件条件)内含语句内含语句uWhile(条件)内含语句。条件语句-它也是一个布尔表达式-控制内含语句被执行的次数。你可以使用break和continue语句来控制while语句中执行语句,它的运行方式同在for语句中的完全

21、相同。a42While(条件条件)内含语句内含语句u当不知道循环执行的次数时,可以使用while。u示例:while(command!=“Exit”)doSomething();a43Do语句语句u Do语句与while语句十分相式,仅当经过最初的循环之后,条件才被验证。u Do 内含语句 While(条件);Do语句保证内含语句至少被执行过一次,而且只要条件求值等于真,它们继续被执行。通过使用break语句,你可以迫使运行退出do语句块。如果你想跳过这一次循环,使用continue语句。a44Do语句语句u先执行循环语句,再进行循环条件测试,所以循环语句至少执行一次,成为后测试循环。u示例i

22、nt i=1;do Console.WriteLine(0,i+);while(i=10);a45总结u装箱是将值类型转换为引用类型,而拆箱则是将引用类型转换为值类型 uC#提供了以下类型的选择结构:uifuifelseuswitchcaseuC#提供了以下类型的循环结构:uwhile 循环udo 循环ufor 循环uforeach 循环a46作业u水仙花数是一个三位数,它的每位的数字的立方和恰好等于其自身,请写一个C#程序,计算并在控制台窗口中将所有的水仙花数全部打印出来。u写一个C#程序,验证哥德巴赫猜想:任意一个大于任意一个大于6偶数都可分解成两个素数之和。要求首先打印110000之间的偶数的歌德巴赫猜想验证结果。a47作业u利用前面写的枚举常量,要求用户输入两个数和一个四则运算的代号,然后判定用户输入的运算符号,将结果输出在控制台的窗口中。u利用前面写的结构体,编写C#程序,要求用户依次输入多个学生的成绩,将这些信息存储在一个结构型的数组里。在输入完成后,用户还可以通过输入学号,查询自己刚刚输入的对应于该学号的课程成绩。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(《C基础语法二》课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|