第02章C数据类型

上传人:仙*** 文档编号:43939783 上传时间:2021-12-05 格式:PPT 页数:76 大小:477.02KB
收藏 版权申诉 举报 下载
第02章C数据类型_第1页
第1页 / 共76页
第02章C数据类型_第2页
第2页 / 共76页
第02章C数据类型_第3页
第3页 / 共76页
资源描述:

《第02章C数据类型》由会员分享,可在线阅读,更多相关《第02章C数据类型(76页珍藏版)》请在装配图网上搜索。

1、1第二章第二章 数据类型与流程控制2.1 2.1 C#C#语言概述语言概述 2.2 2.2 C#C#数据类型数据类型 2.3 2.3 C#C#流程控制语句流程控制语句 22.1 C#2.1 C#语言概述语言概述 u在在C+和和Java的基础上设计的。的基础上设计的。u完全面向对象。完全面向对象。 32.1.1 C#语言特点语言特点 语法简洁语法简洁 C#和和Java一样,使用统一操作符,淘汰了一样,使用统一操作符,淘汰了c+的伪关键字的伪关键字 精心的面向对象设计精心的面向对象设计 只允许单继承;无全局函数,全局变量和全局常数等概念,代码可读性更好,减少命名只允许单继承;无全局函数,全局变量和

2、全局常数等概念,代码可读性更好,减少命名冲突冲突 与与Web结合紧密结合紧密 c#构建的组件能够方便的为构建的组件能够方便的为web服务,并可以通过服务,并可以通过internet被运行在任何操作系统的任何被运行在任何操作系统的任何语言调用。语言调用。4 完全的安全性和错误处理完全的安全性和错误处理提供了类型安全的内在的完整安全性能。提供了类型安全的内在的完整安全性能。 从从internet和和intranet下载的代码不允许访问本地文件和资源;不允许使用未初始化变量,下载的代码不允许访问本地文件和资源;不允许使用未初始化变量,提供边界检查与溢出检查;使用内存的垃圾回收机制。提供边界检查与溢出

3、检查;使用内存的垃圾回收机制。 版本处理技术版本处理技术 内置版本控制功能内置版本控制功能 灵活性和兼容性灵活性和兼容性 在托管状态不能使用指针,但用委托(在托管状态不能使用指针,但用委托(Delegate)模拟指针功能。)模拟指针功能。52.1.2 C#与其他语言比较与其他语言比较 与与c+比较比较 编译目标编译目标C+为本地可执行代码;为本地可执行代码;C#为中间语言为中间语言(IL) 内存管理内存管理 C+显示删除;显示删除;C#回收机制回收机制 指针指针 C+大量使用;大量使用;C#一般不使用一般不使用 字符串处理字符串处理 C+作为类处理;作为类处理;C#作为基本数据类型作为基本数据

4、类型 继承机制继承机制 C+多继承;多继承;C#单继承单继承6与与java比较比较项目项目C#Java运行环境CLRJVM面向对象是是多重继承否否内存管理使用垃圾回收机制使用垃圾回收机制异常处理Try-catch-finallyTry-catch-finally指针非管理代码中使用不支持类型安全性验证强制类型验证强制类型验证命名空间支持支持布尔值true or falsetrue or false变量初始化不能使用为初始化变量默认初始化中间语言处理将MSIL转换为JIT机器码Java字节码访问修饰Public ,protected, private, internal ,partial Pub

5、lic,protected,private72.2 C#2.2 C#数据类型数据类型 u分为两类:值类型和引用类型。分为两类:值类型和引用类型。 值类型:值类型: 包括基本类型、枚举类型、结构类型。包括基本类型、枚举类型、结构类型。 引用类型:引用类型: 包括类、接口、数组、委托。包括类、接口、数组、委托。 8Using Sysem;namespace TyeExample /引用类型 class REfTypeRectangle public int Width; public int Height; /值类型 struct ValTypeRetangle public int Width;

6、 public int Height; class program public static void Main() /定义rect1为引用类型变量 RefTypeRectangle rect1=new RefTypeRectangle(); rect1.Width=10; rect1.Height=15; /定义rect2为引用类型变量,并与rect1指向相同对象 RefTypeRectangle rect2=rect1; /输出rect2 Console.WriteLine(“Dimensions of rect2 are”+rect2.width+”x”+rect2.Height);

7、Console.WriteLine(“changing dimensions of rect1”); /通过rect1更改对象值 rect1.width=20; rect1.Height=25; Console.WriteLine(“Dimensions of rect2 now are”+rect2.width+”x”+rect2.Height); /定义rect3为值类型变量ValTypeREtangle rect3=new ValTypeRetangle(); rect3.Width=10; rect3.Height=15/定义rect4为值类型变量,并用rect3为其赋值ValType

8、REtangle rect4=rect3;/输出rect4值Console.WriteLine(“Dimensions of rect4 are”+rect4.width+”x”+rect4.Height);Console.WriteLine(“changing dimensions of rect3”); /更改rect3值,由于rect3与rect4分别保存自己的值,rect4的值不受影响。 rect3.width=20; rect3.Height=25;Console.WriteLine(“Dimensions of rect4 now are”+rect2.width+”x”+rect

9、4.Height);Console.ReadLine(); 9值类型和引用类型的区别值类型和引用类型的区别 特性特性值类型值类型引用类型引用类型变量中保存的内容变量中保存的内容实际数据实际数据指向实际数据的引用指针指向实际数据的引用指针内存空间配置内存空间配置堆栈(堆栈(Stack)受管制的堆(受管制的堆(Managed Heap)内存需求内存需求较少较少较多较多执行效率执行效率较快较快较慢较慢内存释放时间点内存释放时间点执行超过定义变量执行超过定义变量的作用域时的作用域时由垃圾回收机制负责回收由垃圾回收机制负责回收可以为可以为null不可以不可以可以可以102.2.1 2.2.1 值类型值类

10、型 u 值类型包括整型、浮点型、小数型、布尔值类型包括整型、浮点型、小数型、布尔型、字符型、结构型、枚举型。型、字符型、结构型、枚举型。 声明一个值类型的语法形式为:声明一个值类型的语法形式为: = n; 例如:例如:int a = 100; /声明一个整型变量声明一个整型变量a,并赋初值为,并赋初值为100; 注意注意,C#不允许使用未初始化的变量。不允许使用未初始化的变量。111.1.整型整型 u C#提供了九种整型:提供了九种整型: sbyte:1字节有符号字节有符号 byte: 1字节无符号字节无符号 short: 2字节有符号字节有符号 ushort: 2字节无符号字节无符号 int

11、: 4字节有符号,最常用字节有符号,最常用 uint: 4字节无符号字节无符号 long: 8字节有符号字节有符号 ulong:8 字节无符号字节无符号 char:2字节,单个字节,单个Unicode字符编码,例如:字符编码,例如:1 12 注意:注意: 声明变量,均可采用十进制或十六进制声明变量,均可采用十进制或十六进制 long x=0 x23ab; 可以指定类型可以指定类型 long x= 1234L 默认为默认为int 132.2.浮点类型浮点类型 floatfloat:4 4字节浮点数,常用。例如:字节浮点数,常用。例如:35.0f35.0fdoubledouble:8 8字节浮点数

12、,常用。例如:字节浮点数,常用。例如:2.7E+232.7E+23143.3.小数型小数型 u 即即decimal类型,共类型,共128个二进制位,个二进制位,具有具有28至至29位十进制有效数字。适用于位十进制有效数字。适用于金融、货币等需要高精度数值的领域。金融、货币等需要高精度数值的领域。154.4.布尔型布尔型 u 用用bool表示,表示,bool类型只有两个值类型只有两个值true和和false。 例如:例如: bool isExist = false; bool b = (i0 & i); Console.Write(数组的列数为:); Console.Write(arr2.Get

13、UpperBound(arr2.Rank - 1) + 1); Console.Write(n); for (int i = 0; i arr2.Rank; i+) string s = ; for (int j = 0; j ); /多维数组 /声明一个三维数组 int, , arr3; /初始化该三维数组 arr3 = new int, 1, 2, 3 , 4, 5, 6 ; /使用foreach语句遍历数组并输出 foreach (int i in arr3) Console.WriteLine(i); 32 动态数组的声明及初始化using System;using System.Co

14、llections.Generic;using System.Text;namespace dynaticArray class Program static void Main(string args) /一维数组 int arr = new int5; Console.WriteLine(请输入一组数:); for (int i = 0; i arr.GetUpperBound(0) + 1; i+) arri = Convert.ToInt32(Console.ReadLine(); Console.WriteLine(显示输入后的数组:); foreach (int n in arr)

15、 Console.Write(0, n + ,); Console.WriteLine(); /二维数组 Console.Write(请输入定义数组的行数:); int row = Convert.ToInt32(Console.ReadLine(); Console.Write(请输入定义数组的列数:); int col = Convert.ToInt32(Console.ReadLine(); int, arr2 = new introw, col; Console.WriteLine(结果:); for (int i = 0; i row; i+) for (int j = 0; j =

16、 j) Console.Write(*); else Console.Write(); Console.WriteLine(); 33例例. .使用使用SortSort和和ReverseReverse方法对数组排序方法对数组排序 using System;namespace ArrayExample1 class Program static void Main() /声明一维数组声明一维数组Artists,并赋初始值;,并赋初始值; string Artists = Leonardo, Monet, Van Gogh, Klee ; /将数组将数组Artists做升序排列,并输出其结果;做升

17、序排列,并输出其结果; Array.Sort(Artists); for (int i = 0; i Artists.Length; i+) Console.WriteLine(Artistsi); 34 /将数组将数组Artists做降序排列,并输出其结果;做降序排列,并输出其结果; Array.Reverse(Artists); for (int i = 0; i Artists.Length; i+) Console.WriteLine(Artistsi); Console.ReadLine(); 352.2.3 2.2.3 值类型之间的数据转换值类型之间的数据转换 u 有两种转换方式:

18、有两种转换方式: 隐式转换与显式转换;隐式转换与显式转换;u 如果是不同值类型之间的转换,可以如果是不同值类型之间的转换,可以使用使用Convert类。类。 362.2.3 2.2.3 值类型之间的数据转换值类型之间的数据转换( (续续) )u隐式转换隐式转换 从低精度、小范围的数据类型转换从低精度、小范围的数据类型转换为高精度、大范围的数据类型,可以用为高精度、大范围的数据类型,可以用隐式转换。隐式转换。 例如:例如: int k = 1;int k = 1; long i = 2; long i = 2; i = k; / i = k; /隐式转换隐式转换372.2.3 2.2.3 值类型

19、之间的数据转换值类型之间的数据转换( (续续) )u显式转换显式转换 如:如:long k = 5000;int i = (int)k 所有的隐式转换也都可以采用显式转换的形式来所有的隐式转换也都可以采用显式转换的形式来表示。如:表示。如:int i = 10;long j = (long)i; 将大范围类型的数据转换为小范围类型的数据的将大范围类型的数据转换为小范围类型的数据的时候,必须特别谨慎,因为此时有丢失数据的危险。时候,必须特别谨慎,因为此时有丢失数据的危险。382.2.4 2.2.4 装箱与拆箱装箱与拆箱u在在.net中的通用类型系统中的通用类型系统(Common Type sys

20、tem,CTS)中,所有类型都是对象(中,所有类型都是对象(object),都派生都派生自自System.Object。CTS支持两组类型:值类型和引用支持两组类型:值类型和引用类型。如果变量是值类型那么这个变量就包含实际的类型。如果变量是值类型那么这个变量就包含实际的数据。也就是在内存中确实会分配那么一部分空间给数据。也就是在内存中确实会分配那么一部分空间给这个变量并存储值,引用类型就类似一个类型安全的这个变量并存储值,引用类型就类似一个类型安全的指针,本身并没有开辟内存空间去存储东西。指针,本身并没有开辟内存空间去存储东西。uObject 类:所有其他类:所有其他 类的基类类的基类39 u

21、 装箱:将值类型转换为装箱:将值类型转换为object类型类型 int i = 13; object ob = i; u 拆箱:将拆箱:将object类型转换为值类型类型转换为值类型 int i = 13; object ob = i; int j = (int)ob; 402.2.5 2.2.5 运算符与优先级运算符与优先级 初级运算符初级运算符 () . x+ x new typeof sizeof checked unchecked一元运算符一元运算符 + ! +x x和数据类型转换和数据类型转换乘乘/除运算符除运算符 * / %加加/减运算符减运算符 + 移位运算符移位运算符 关系运算

22、符关系运算符 = is as比较运算符比较运算符 = = !=按位按位AND运算符运算符 &按位按位XOR运算符运算符 |按位按位OR运算符运算符 布尔布尔 AND运算符运算符 &布尔布尔OR运算符运算符 |三元运算符三元运算符 ?:赋值运算符赋值运算符 = += = *= /= %= &= |= = = =412.3 C#2.3 C#流程控制语句流程控制语句1. 顺序执行顺序执行2. 分支分支3. 循环循环4. 异常捕获异常捕获 如果一个逻辑块包含两条或两条以如果一个逻辑块包含两条或两条以上的语句序列,必须使用大括号上的语句序列,必须使用大括号将语句将语句括起来。括起来。422.3.1 2.

23、3.1 条件分支语句条件分支语句 u if语句:它的功能是根据布尔表达式的值语句:它的功能是根据布尔表达式的值(true或者或者false)选择要执行的语句序列,使)选择要执行的语句序列,使用时要注意用时要注意else应和最近的应和最近的if语句匹配。语句匹配。43u常见形式有:常见形式有: 1) 单独使用单独使用if语句,不加语句,不加else语句语句if ( 布尔表达式布尔表达式 ) 布尔表达式为真时执行的语句序列布尔表达式为真时执行的语句序列 2) if语句和语句和else语句配套使用的单条件测试语句配套使用的单条件测试if ( 布尔表达式布尔表达式 ) 布尔表达式为真时执行的语句序列布

24、尔表达式为真时执行的语句序列else 布尔表达式为假时执行的语句序列布尔表达式为假时执行的语句序列442.3.1 2.3.1 条件分支语句条件分支语句( (续续) ) 3) else块中嵌套块中嵌套if语句的多条件测试语句的多条件测试if ( if ( 布尔表达式布尔表达式1 )1 ) 布尔表达式布尔表达式1 1为真时执行的语句序列为真时执行的语句序列 else if ( else if ( 布尔表达式布尔表达式2) 2) 布尔表达式布尔表达式2 2为真时执行的语句序列为真时执行的语句序列 else if ( else if ( 布尔表达式布尔表达式3)3) 布尔表达式布尔表达式3 3为真时执

25、行的语句序列为真时执行的语句序列 elseelse 所有条件均为假时执行的语句序列所有条件均为假时执行的语句序列 注意,注意,elseelse和和ifif之间有一个空格。之间有一个空格。45设有一个数学函数的表达式为:设有一个数学函数的表达式为: if(x0) y=1;else if(x=0) y=0; esle y=-1; 462.3.1 2.3.1 条件分支语句条件分支语句( (续续) )uswitch 语句也叫语句也叫case语句语句uswitch语句与语句与C+和和Java均不完全相同。均不完全相同。 switch语句常用形式为:语句常用形式为:switch (表达式) case 常量

26、表达式1: 语句序列1 case 常量表达式2: 语句序列2 default: 语句序列 472.3.1 2.3.1 条件分支语句条件分支语句( (续续) )u 常量表达式常量表达式 switch条件表达式的值和每个条件表达式的值和每个case后的常量表后的常量表达式可以是达式可以是string、int、char、enum或其它值类或其它值类型。型。u 语句序列语句序列 每个每个case后的语句序列可以用大括号括起来,后的语句序列可以用大括号括起来,也可以不用也可以不用, 但是每个但是每个case块的最后一句一定要是块的最后一句一定要是break语句,或者是语句,或者是goto语句。语句。48

27、uswitch语句的执行顺序语句的执行顺序 a) 如果如果switch语句的条件表达式的值和某语句的条件表达式的值和某一个一个case标记后指定的值相等,则转到该标记后指定的值相等,则转到该case标记后的语句序列执行;标记后的语句序列执行; b)若若switch语句的条件表达式的值和任何语句的条件表达式的值和任何一个一个case标记后指定的值都不相等,则跳到标记后指定的值都不相等,则跳到default标记后的语句序列执行;标记后的语句序列执行; c)若若switch语句下面没有语句下面没有default标记,则标记,则跳到跳到switch语句的结尾。语句的结尾。492.3.1 2.3.1 条

28、件分支语句条件分支语句( (续续) )注意:注意: a) 当找到符合条件表达式值的当找到符合条件表达式值的case标记时,标记时,如果其后有语句序列,则它只会执行此如果其后有语句序列,则它只会执行此case块块中的语句序列,不会再对其它的中的语句序列,不会再对其它的case标记进行标记进行判断,所以才要求每个语句序列的最后一条语判断,所以才要求每个语句序列的最后一条语句必须是句必须是break语句,语句, 但是有一个情况例外:但是有一个情况例外:如果某个如果某个case块为空,则会从这个块为空,则会从这个case块直接块直接跳到下一个跳到下一个case块上。块上。 b) 如果如果case后有语

29、句,则此后有语句,则此case的顺序怎的顺序怎么放都无所谓,甚至可以将么放都无所谓,甚至可以将default子句放到最子句放到最上面。因此,上面。因此,在一个在一个switch中,不能有相同的中,不能有相同的两个两个case标记标记。 50例例. .使用使用switchswitch语句,完成对成绩等级的评定语句,完成对成绩等级的评定 using System;namespace SwitchExample public class Program public static void Main() Console.Write(请输入成绩:请输入成绩:); /从键盘接收一行字符从键盘接收一行字符

30、 string str = Console.ReadLine(); /转换为整型转换为整型 int i = Int32.Parse(str.Trim();/i=Convert.ToInt32(str) if (i 100 | i 0) Console.WriteLine(成绩不在成绩不在0-100范围内范围内); 51 else switch (i / 10) case 10: Console.Write(满分,满分,); goto case 9; case 9: Console.WriteLine(优秀优秀); break; case 8: case 7: Console.WriteLine

31、(良好良好); break; case 6: Console.WriteLine(及格及格); break; default: Console.WriteLine(不及格不及格); break; Console.ReadLine(); 52用用 switch语句来显示一个月的天数(忽略跨年度)语句来显示一个月的天数(忽略跨年度) 1: using System; 2: 3: class FallThrough 4: 5: public static void Main(string args) 6: 7: if (args.Length != 1) return; 8: 9: int nMon

32、th = Int32.Parse(args0); 10: if (nMonth 12) return; 11: int nDays = 0; 12: 13: switch (nMonth) 14: 15: case 2: nDays = 28; break; 16: case 4: 17: case 6: 18: case 9: 19: case 11: nDays = 30; break; 20: default: nDays = 31; 21: 22: Console.WriteLine(0 days in this month,nDays); 23: 24: 532.3.2 2.3.2

33、循环语句循环语句u 包括:包括: for语句,与语句,与Java相同相同 while语句,与语句,与Java相同相同 do-while语句,与语句,与Java相同相同 foreach语句,用于对集合进行操作。语句,用于对集合进行操作。 542.3.2 2.3.2 循环语句(续)循环语句(续)For语句语句一般形式为:一般形式为:for (初始值初始值;循环条件循环条件;循环控制循环控制) 语句序列语句序列55在在Main方法中加入如下代码:方法中加入如下代码: public static void Main() Console.Clear(); Console.BackgroundColor

34、= ConsoleColor.Blue; Console.ForegroundColor = ConsoleColor.Red; Console.Beep(); for (int i = 1; i 10; i += 2) Console.SetCursorPosition(40 - i / 2, i); for (int j = 0; j i; j+) Console.Write(*); Console.WriteLine(); Console.ReadLine(); 例例. .使用使用forfor语句控制循环体语句控制循环体562.3.2 2.3.2 循环语句(续)循环语句(续)While语

35、句语句一般形式为:一般形式为:while (条件条件) 语句序列语句序列 显然,循环体内的程序可能会执行多次,显然,循环体内的程序可能会执行多次,也可能一次也不执行。也可能一次也不执行。57 表达式必须是一个布尔表达式。表达式必须是一个布尔表达式。 布尔表达式必须放在圆括号内。布尔表达式必须放在圆括号内。 假如首次求值时,布尔表达式为假如首次求值时,布尔表达式为false,语句,语句不会运行。不会运行。 假如想要在一个假如想要在一个while的控制下执行两个或的控制下执行两个或者更多的语句,必须使用大括号将语句分组者更多的语句,必须使用大括号将语句分组到一个块中。到一个块中。58用用while

36、语句求语句求100以内所有的素数?以内所有的素数? / check prime / / / public static bool isPrime(int a) int i=2; while ( i a) if (Math.IEEERemainder(float)a, (float)i) = 0) /是否能被i整除 return false; i+;return true; u/ / get all prime / / / / public static List getPrime(int min, int max) if (min 1) throw new Exception(min must

37、 greater than 1); int i; for (i = min; i = max; i+) if (isPrime(i) _prime.add(i); return _prime; / / print all prime / public static void printPrime() _prime.print(); 592.3.2 2.3.2 循环语句(续)循环语句(续)do-while一般形式为:一般形式为: do 语句序列语句序列 while (条件条件); 与与while语句不同的是,语句不同的是,do-while语句循语句循环体内的程序至少会执行一次,然后再判断环体内的

38、程序至少会执行一次,然后再判断条件是否为条件是否为true,如果条件为,如果条件为true,则继续,则继续循环。循环。60如何使用如何使用do-while循环来实现求整数的阶乘。循环来实现求整数的阶乘。 long y=1;do y*=x; x-; while(x0)61在在do 循环中计算平均值循环中计算平均值 1: using System; 2: 3: class ComputeAverageApp 4: 5: public static void Main() 6: 7: ComputeAverageApp theApp = new ComputeAverageApp(); 8: the

39、App.Run(); 9: 10: 11: public void Run() 12: 13: double dValue = 0; 14: double dSum = 0; 15: int nNoOfValues = 0; 16: char chContinue = y; 17: string strInput; 18: 19: do 20: 21: Console.Write(Enter a value: ); 22: strInput = Console.ReadLine(); 23: dValue = Double.Parse(strInput); 24: dSum += dValue

40、; 25: nNoOfValues+; 26: Console.Write(Read another value?); 27: 28: strInput = Console.ReadLine(); 29: chContinue = Char.FromString(strInput); 30: 31: while (y = chContinue); 32: 33: Console.WriteLine(The average is 0,dSum / nNoOfValues); 34: 35: 在静态在静态 Main函数中实例化函数中实例化 ComputeAverageApp类型的一个对象。它同样类

41、型的一个对象。它同样接着调用实例的接着调用实例的Run方法,方法, 该方法包含了计算平均值所有必要的功能。该方法包含了计算平均值所有必要的功能。 do 循环跨越第循环跨越第1931行。条件是这样设定的:分别回答各个问题行。条件是这样设定的:分别回答各个问题 “y”,以,以决定是否要增加另一个值。输入任何其它决定是否要增加另一个值。输入任何其它 字符会引起程序退出字符会引起程序退出 do语块,且平均值被计算。语块,且平均值被计算。 62u foreach语句语句 foreach语句用于逐个提取集合中的元素,并语句用于逐个提取集合中的元素,并对集合中每个元素执行语句序列中操作的场合。对集合中每个元

42、素执行语句序列中操作的场合。foreach语句特别适合对集合(语句特别适合对集合(Collection)对象的)对象的存取。其一般形式为:存取。其一般形式为: foreach ( 类型类型 标识符标识符 in 表达式表达式 ) 语句序列语句序列 2.3.2 2.3.2 循环语句循环语句( (续续) )63例例. .使用使用foreachforeach语句提取语句提取HashtableHashtable对象的每个元素对象的每个元素 using System;using System.Collections;namespace ForeachExample class Program public

43、 static void Main() /声明一个声明一个Hashtable集合集合hs,/并使用并使用Hashtable.Add方法为其添加带有指定键和值的元素方法为其添加带有指定键和值的元素 Hashtable hs = new Hashtable(); hs.Add(001, str1); hs.Add(002, str2); hs.Add(003, str3);64 /循环显示循环显示hs集合的每个元素;集合的每个元素; Console.WriteLine(code string); foreach (string s in hs.Keys) Console.WriteLine(s +

44、 + hss); Console.ReadLine(); 65程序读所有的环境变量程序读所有的环境变量 1: using System; 2: using System.Collections; 3: 4: class EnvironmentDumpApp 5: 6: public static void Main() 7: 8: IDictionary envvars = Environment.GetEnvironmentVariables(); 9: Console.WriteLine(There are 0 environment variables declared, envvars

45、.Keys.Count); 10: foreach (String strKey in envvars.Keys) 11: 12: Console.WriteLine(0 = 1,strKey, envvarsstrKey.ToString(); 13: 14: 15: 对对GetEnvironmentVariables的调用返回一个的调用返回一个IDictionary类型接口,它是类型接口,它是由由.NET框架中的许多类实现了的字典接口。框架中的许多类实现了的字典接口。 通过通过 IDictionary 接口,可以访问两个收集:接口,可以访问两个收集:Keys 和和 Values。在这个例在

46、这个例子里,我在子里,我在foreach语句中使用语句中使用Keys,接着查接着查 找基于当前找基于当前key值的值(第值的值(第12行)。行)。 当使用当使用foreach时,只要注意一个问题:当确定循环变量的类型时,应该时,只要注意一个问题:当确定循环变量的类型时,应该格外小心。选择错误的类型并没有受到编译格外小心。选择错误的类型并没有受到编译 器的检测,但它会在运行时器的检测,但它会在运行时受检测,且会引发一个异常。受检测,且会引发一个异常。 66课堂练习课堂练习 使用使用foreach语句和语句和Hashtable类,编写一个类,编写一个程序,先将一个班的同学的姓名和成绩输入程序,先将

47、一个班的同学的姓名和成绩输入存放到一个存放到一个Hashtable中,然后计算全班平中,然后计算全班平均成绩,打印输出;并将最高分数的个人的均成绩,打印输出;并将最高分数的个人的姓名和分数输出。姓名和分数输出。 ForeachExample-2.cs672.3.3 2.3.3 跳转语句跳转语句u 1.break语句语句 功能:功能:退出最近的封闭退出最近的封闭switch、while、do-while、for或或foreach语句。语句。 格式:格式: break;68【例例】循环接收和输出键盘输入的每一行的值,当接收的内容为空字循环接收和输出键盘输入的每一行的值,当接收的内容为空字符串时退出

48、。符串时退出。 using System;namespace BreakExample public class Program public static void Main() for (; ; ) Console.Write(请输入一个字符串(直接回车退出)请输入一个字符串(直接回车退出):); string s = Console.ReadLine(); if (s = ) break; Console.WriteLine(你输入的是你输入的是: 0., s); Console.ReadLine(); 69u 2.continue语句语句 功能:功能:将控制传递给下一个将控制传递给下一

49、个while、do-while、for或或foreach,继续执行下一次循,继续执行下一次循环。环。 格式:格式: continue ;2.3.3 2.3.3 跳转语句跳转语句 ( (续续) )70u 3.goto语句语句 一般不用。一般不用。2.3.3 2.3.3 跳转语句跳转语句 ( (续续) )71u 4.return语句语句 功能:功能:将控制返回到出现将控制返回到出现return语句的语句的函数成员的调用方。函数成员的调用方。 格式:格式: return 表达式表达式; 其中表达式为可选项,如果该函数成员其中表达式为可选项,如果该函数成员的返回类型不为的返回类型不为null,则,则r

50、eturn语句必须使语句必须使用表达式返回这个类型的值,否则用表达式返回这个类型的值,否则return语语句不能使用表达式。句不能使用表达式。 2.3.3 2.3.3 跳转语句跳转语句 ( (续续) )722.3.5 2.3.5 异常处理异常处理 u 1.try-catch语句语句try 语句序列语句序列catch(异常类型(异常类型 标识符)标识符) 异常处理异常处理 在程序运行正常的时候,执行在程序运行正常的时候,执行try块内的程块内的程序。如果序。如果try块中出现了异常,程序就转移到块中出现了异常,程序就转移到catch块中执行块中执行。 73u 2.try-catch-finall

51、y语句语句try 语句序列语句序列catch(异常类型(异常类型 标识符)标识符) 异常处理异常处理finally 语句序列语句序列2.3.5 2.3.5 异常处理异常处理 ( (续续) )74u 3.throw语句语句 格式:格式:throw 表达式表达式; 抛出表达式的值。抛出表达式的值。注意表达式类型必须是注意表达式类型必须是System.Exception或从或从System.Exception派生的类的类型。派生的类的类型。 throw也可以不带表达式,不带表达式的也可以不带表达式,不带表达式的throw语句只能用在语句只能用在catch块中,在这种情况下,块中,在这种情况下,它重新

52、抛出当前正在由它重新抛出当前正在由catch块处理的异常。块处理的异常。 2.3.5 2.3.5 异常处理异常处理 ( (续续) )75例例. .异常处理异常处理 using System;namespace TryCatchExample class Program static void F() try G(); catch (Exception err) Console.WriteLine(方法方法F中捕获到中捕获到: + err.Message); 76 / 重新抛出当前正在由重新抛出当前正在由catch 块处理的异常块处理的异常err throw; static void G() throw new Exception(方法方法G中抛出的异常。中抛出的异常。); static void Main() try F(); catch (Exception err) Console.WriteLine(方法方法Main中捕获到中捕获到: + err.Message); Console.ReadLine();

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!