数据类型与流程控制.ppt

上传人:za****8 文档编号:16590801 上传时间:2020-10-16 格式:PPT 页数:60 大小:373KB
返回 下载 相关 举报
数据类型与流程控制.ppt_第1页
第1页 / 共60页
数据类型与流程控制.ppt_第2页
第2页 / 共60页
数据类型与流程控制.ppt_第3页
第3页 / 共60页
点击查看更多>>
资源描述
1 第 2章 数据类型与流程控制 2.1 数据类型 2.2 不同数据类型之间的转换 2.3 常量与变量 2.4 运算符与表达式 2.5 控制台应用程序与格式化输出 2.6 C#流程控制语句 2 2.1 数据类型 C#数据类型分为两类:值类型和引用类型。 值类型 : 包括简单类型、枚举类型、结构类型、可空类型。 引用类型 : 包括类、接口、数组、委托。 一般把引用类型的变量称为对象。 3 值类型与引用类型区别 堆栈 堆 5 6 i j 实际数据 12345H obj 图中 i和 j为值类型变量, obj为引用类型变量 值类型的变量保存的是 变量的值 ; 引用类型的变量保存的是 数据的引用地址 。 4 (1)考虑如下代码: int i=5; int j=6; int k = i; i=7; 问 k的值是多少? (2) 假设类 A有实例 Obj, Obj1,执行如下代码 Obj.age = 10; Obj1 = Obj; Obj1.age = 12; 问此时 Obj.age的值是多少? 值类型与引用类型区别 5 值类型和引用类型的区别 特性 值类型 引用类型 变量中保存的内容 实际数据 指向实际数据的引用指针 内存空间配置 堆栈( Stack) 受管制的堆( Managed Heap) 内存需求 较少 较多 执行效率 较快 较慢 内存释放时间点 执行超过定义变量的 作用域时 由垃圾回收机制负责回收 6 2.1.2 整型 C#提供了八种整型(即计算机组成原理中的 “ 定点数 ” ): sbyte: 1字节有符号 byte: 1字节无符号 short: 2字节有符号 ushort: 2字节无符号 int: 4字节有符号,最常用 uint: 4字节无符号 long: 8字节有符号 ulong: 8 字节无符号 7 2.1.3 浮点类型 float: 4字节浮点数,常用。例如: 35.0f double: 8字节浮点数,常用。例如: 2.7E+23 decimal: 16字节浮点数,特殊的浮点数,精度高,适用于 金融、货币等需要高精度数值的领域。其类型指定符为 M (或 m)。 例如: decimal y = 9999999999999999999999999m; float和 double的浮点数格式与计算机组成原理介绍的 IEEE754规定的格式相同 8 2.1.4 布尔型 用 bool表示, bool类型只有两个值 true和 false。 例如: bool isExist = false; bool b = (i0 注意 if(i) j += 10; /错误 if(j = 15) j += 10; /错误 9 2.1.5 字符型与字符串类型 char型,为单个 Unicode字符,字符型常量必须用单引号 引起来 。 例如: char ch a ; 如果是字符串(单个字符的组合),对应的类型为 string。 string类型的常量用双引号将字符串引起来。 例如: string str=“ hello” ; char和 string类型的常量均可以使用转义符。 10 2.2 不同数据类型之间的转换 有两种转换方式:隐式转换与显式转换; 如果是不同值类型之间的转换,可以使用 Convert类 提供的静态方法。 11 2.2.1 隐式转换和显式转换 隐式转换: 系统默认的,不需要加以声明就可以进行的转 换。 从低精度、小范围的数据类型转换为高精度、大范围的数 据类型,可以用隐式转换。 例如: int k = 1; long i = 2; i = k; /隐式转换 12 2.2.1 隐式转换和显式转换 显式转换: 也称为强制转换。用户必须明确地指定转换的类 型 。 例如: long k = 5000; int i = (int)k; 所有的隐式转换也都可以采用显式转换的形式来表示。如: int i = 10; long j = (long)i; 将大范围类型的数据转换为小范围类型的数据的时候,属 于显式转换,另外还必须特别谨慎,因为此时有丢失数据 的危险。 13 例题 下面声明了一些数值类型的变量: short svalue; int ivalue; uint uvalue; long lvalue; double dvalue; float fvalue; 在对各个变量赋过初值之后,试分析下面哪些转换是正确的,哪 些是错误的,并写出解决办法。 1) svalue = uvalue; 错误; svalue=(short)uvalue; 2) lvalue = svalue; 正确 3) fvalue = dvalue; 错误; fvalue=(float)dvalue; 4) lvalue = dvalue; 错误 ; lvalue=(long)dvalue; 14 2.2.2 装箱与拆箱 Object类型:所有其他引用类型的基类 。 装箱:将值类型转换为 object类型 int i=123; object o = i; 拆箱:显式地将 object类型转换为值类型 int i=123; Object box = i;/装箱操作 int k = (int)box;/拆箱操作 装箱和拆箱是互逆的过程 , 但是必须要注意 , 装箱和 拆箱必须满足类型兼容的原则 。 15 2.3 常量和变量 C#中提供 2种类型的常量: 使用 const关键字声明 const常量是在编译时设置其值并且永远不能更改其值的字段,在 对程序进行编译的时候,编译器会把所有 const常量全部替换为常 数。 const int PI=3.14; 使用 readonly关键字声明 readonly关键字在程序运行期间只能初始化“一次”的字段,可以 在声明语句中初始化该字段,也可以在构造函数中初始化该字段。 初始化以后,用 readonly声明的字段的值就不能再更改。 readonly string b ; public Form1() b=“bbb”; 16 2.3.1 常量 二者区别: readonly常量运行时初始化, const常量编译时初 始化。 const常量只能在声明中赋值, readonly常量既可 以在声明中赋值,也可以在构造函数中赋值。 17 2.3.2 变量 变量用来表示一个数值、一个字符串值或者一个类的对象。 变量存储的值可能会发生更改,但变量名称保持不变。 C#定义了 7类变量,分别是:静态变量、实例变量、数组元素、 值参数、引用参数、输出参数和局部变量。 class A public static int x; int y; void F(int v, int a, ref int b, out int c) int i = 1; c = a + b+; 18 2.3.2 变量 声明变量举例: int a = 100; /声明一个整型变量 a,并赋初值为 100 也可以采用先定义、后赋值的方式,例如: int a; /声明一个整型变量 a a = 100; /为整型变量 a赋值为 100 另外,也可以把几个变量声明和初始化用一条语句完成, 各个变量之间用逗号分隔,例如: int a = 100, b, c = 200,d; /声明整型变量 a、 b、 c、 d,并将 a赋值 100, c赋值 200 19 2.3.3 匿名类型的变量 匿名类型的变量就是程序员不必指定“局部”变量的类型, 统统用 var来表示类型即可。 在 LINQ表达式或者 foreach语句中,使用匿名类型的变量比 较方便。 匿名类型仍然属于强类型,只不过判断具体类型的工作由编 译器完成。 具体内容到 LINQ一节再仔细讲解。 20 2.4 运算符和表达式 1.运算符 C#提供了 3大类运算符: 一元运算符:带有一个操作数的运算符称为“一元”运算符, 例如, i+。 二元运算符:带有两个操作数的运算符称为“二元”运算符, 例如, x + y。 三元运算符:带有三个操作数的运算符称为“三元”运算符, 在 C#中,只存在 1个三元运算符,即条件运算符“ ?:”。 例如: int z = 3; int x = (z = 3) ? 2 : 3; 常用运算符 typeof :获取类型的 System.Type 例如: System.Type type = typeof( int) ; 21 2.4 运算符和表达式 is: 检查对象是否与给定的类型兼容 例如: if(o is Class1) a = (Class1)o ; as : x as T 含义为返回类型为 T的 x。 例如: Class1 c= b as Class1 2. 表达式 C#的表达式与 C+和 Java类似。 22 2.5 控制台应用程序与格式化输出 控制台( Console类) 1. 控制台输出 Console.Write (); 把各种类型的数据或对象转换成字符串写入标准输 出流。 Console.WriteLine(); 把各种类型的数据或对象转换成字符串写入标准输 出流,与 Write的区别在于,它还输出回车符和换 行符(“ rn”); 23 2.5 控制台应用程序与格式化输出 2. 控制台输入 Console.ReadKey(); 标准输入流读取用户按下的字符或功能键。 例如: ConsoleKeyInfo c=Console.ReadKey(); Console.ReadLine(); 从标准输入流读取一行字符。 例如: string s = Console.ReadLine(); 24 3. 字符串的格式化输出 字符串格式化: Console类的 Write或 WriteLine方法; String.Format方法中均可以规定输出字符串 的格式。 格式输出的一般形式为 N , M: 格式码 其中, :表示其中的内容为可选项。 N:从零开始的整数,表示第几个参数。 M:可选整数,表示最小长度。若参数 N的长度小于 M,就用 空格填充。如果 M为负,则左对齐;如果 M为正,则右对齐; 如果未指定 M,则默认为零。 格式码:可选的格式化代码字符串。 25 字符串的格式化输出 对于字符串来说,可以直接利用格式化输出得到希望的格 式,例如: string s = string.Format(0, 30, ); /s得到 的结果为 30个空格的字符串 string s1 = string.Format(0, -20, 15); /s1得 到的结果为左对齐长度为 20的字符串 26 常用格式码及举例 格 式 符 含 义 示例:( int i=10;double x=10.5;) 输出结果 C 将数字按照金额形式输出 Console.WriteLine(0:C,i); Console.WriteLine(0:C,x); ¥ 10.00 ¥ 10.50 D 输出十进制整数 Console.WriteLine(0:D,i); Console.WriteLine(0:D5,i); 10 00010 F 小数点后固定位数 Console.WriteLine(0:F,i); Console.WriteLine(0:F4,x); 10.00 10.5000 0 0占位符 , 如果数字位数不够指定 的占位符位数 , 则左边补 0至占位 符位数;如果数字位数超过指定的 占位符位数 , 则按照原数字实际位 数原样输出 。 如果小数部分的位数 超出指定的占位符位数 , 则多余的 部分四舍五入 。 Console.WriteLine(0:00000, 123); Console.WriteLine(0:000, 12345); Console.WriteLine(0:0000, 123.64); Console.WriteLine(0:00.00, 123.6484); 00123 12345 0124 123.65 # #占位符 。 对整数部分 , 去掉数字 左边的无效 0;对小数部分 , 按照 四舍五入原则处理后 , 再去掉右边 的无效 0。 如果这个数就是 0, 而又 不想让它显示的时候 , #占位符很 有用 Console.WriteLine(0:#, 123); Console.WriteLine(0:#, 123.64); Console.WriteLine(0:#.#, 123.64); Console.WriteLine(0:#.#, 0); Console.WriteLine(0:#.#, 123.648); 123 124 123.64 123.65 27 4. 数字的格式化输出 常用格式举例: string s = string.Format(0:d6, 123); /s得到的结 果为 000123 int i = 123; double j = 123.45; string s1 = string.Format(格式: d6,数 0,输出结果: 0: d6, i); Console.WriteLine(s1);/结果为: 格式 d6,数 123,输出结 果: 000123 string s2 = string.Format(i:0,-7, j:1,7, i, j); Console.WriteLine(s2); /结果为: i:123 ,j: 123.4 5 28 4.数字的格式化输出 string s3 = string.Format(0:#,#.00, i); Console.WriteLine(s3); /结果 12.00 int num = 0; string s4 = string.Format(0:#, num); Console.WriteLine(s4); /结果输出长度为 0的空字符串 其他格式化符使用举例 格式: n4 数 12345.6789 输出结果: 12,345.6789 格式: p 数 0.126 输出结果: 12.60% 格式: p2 数 12.34 输出结果: 1, 234.00% 格式: 5:d 数 123 输出结果: 123 格式: 7:f3 数 123.45 输出结果: 123.450 29 5.日期和时间的格式化输出 DateTime dt = new DateTime(2006,5,25); / yy表示年占两位, M表示月占 1位,超出 1位按实际位数 / d表示日占 1位,超出 1位按实际位数 string str = dt.ToString(yy.M.d); Console.WriteLine(str); /结果 06.5.25 /yyyy表示年占 4位, M表示月占 1位,超出 1位按实际位数, 其他按原字符输出 string str1 = dt.ToString(yyyy年 M月 ); Console.WriteLine(str1); /结果 2006年 5月 30 2.6 C#流程控制语句 流程控制的形式: 顺序 分支 循环 异常捕获 如果一个逻辑块包含两条或两条以上的语句序 列,必须使用大括号 将语句括起来。 31 2.6.1 条件分支语句 if语句:根据布尔表达式的值 ( true或者 false) 选择要执行的语句序列 , 使用时要注意 else应和最 近的 if语句匹配 。 三种形式: if if else if else if else 32 2.6.1 条件分支语句 【 例题 2-2】 的关键点: 从键盘读取一个字符串方法 string str=Console.ReadLine(); 将字符串转换成整型数据 int x=Convert.ToInt32(str);/适合于任何类型转换成 整型数据 int x=int.Parse(str); bool b = int.TryParse(str,out x); 针对字符串类 型 int x=Int32.Parse(str); 33 雅虎面试题: 一列数的规则如下 : 1、 1、 2、 3、 5、 8、 13、 21、 3 4.求第 30位数是多少, 用 递归算法 实现。 实现关键代码: public static int Foo(int i) if (i 0 38 else switch (i / 10) /整除 case 10: Console.Write(满分, ); goto case 9; case 9: Console.WriteLine(优秀 ); break; case 8: case 7: Console.WriteLine(良好 ); break; case 6: Console.WriteLine(及格 ); break; default: Console.WriteLine(不及格 ); break; Console.ReadLine(); 39 2.6.2 循环语句 循环 包括: for语句 while语句 do-while语句 foreach语句,用于对集合、数组进行操作。 40 2.6.2 循环语句(续) 1. for语句 一般形式: for (初始值 ;循环条件 ;循环控制 ) 语句序列 注意: for(;) 为无穷循环 41 例 .使用 for语句控制循环体 public static void Main() Console.Clear(); Console.BackgroundColor = 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(); 42 2.6.2 循环语句 (续 ) 2. foreach语句 foreach语句用于逐个提取集合中的元素,并对集合中每 个元素执行语句序列中操作的场合。一般形式为: foreach ( 类型 标识符 in 表达式 ) 语句序列 注意:循环变量是一个只读型的局部变量。 43 2.6.2 循环语句 (续 ) 判断下列语句是否正确 ,并说明原因 int myInt=1,2,3; foreach(int test in myInt) test+; Console.WriteLine(test); 不正确,因为 test是只读变量不能更改它的值 44 【 例题 2-5】 SortedList 可以排序的泛型列表 常用方法和属性: Add( key,value):添加一个键值对 Keys属性:所有键的集合 Values属性:所有的值的集合 45 2.6.2 循环语句(续) 3. while语句 一般形式: while (条件 ) 语句序列 循环体内的程序可能会执行多次 , 也可能一次也不 执行 。 46 2.6.2 循环语句(续) 4. do-while 一般形式: do 语句序列 while (条件 ); 循环体内的程序至少会执行一次,然后再判断条 件是否为 true,如果条件为 true,则继续循环。 47 2.6.3 跳转语句 1.break语句 功能: 退出最近的封闭 switch、 while、 do- while、 for或 foreach语句。 格式: break; 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(); 49 2.6.3 跳转语句 (续 ) 2.continue语句 功能: 将控制传递给下一个 while、 do-while、 for或 foreach,继续执行下一次循环。 格式: continue ; 50 2.6.3 跳转语句 (续 ) 3.goto语句 仅在下面两种情况下才可能会使用 goto语句: ( 1)用于 switch语句中从一个 case标签转到另一个 case标签处。 ( 2)用于直接退出到多重嵌套循环的外部。 51 2.6.3 跳转语句 (续 ) 4.return语句 功能: 将控制返回到出现 return语句的函数成 员的调用方。 格式: return 表达式 ; 其中表达式为可选项,如果该函数成员的返回 类型不为 null,则 return语句必须使用表达式返回 这个类型的值,否则 return语句不能使用表达式。 52 看例子,思考如下问题: ( 1)如何求字符串长度 ( 2)如何求字符串中某个序号对应的字符 ( 3)如何判断字符串中的某个字符是数字还是字母 ( 4)如何截取字符串 解答:假设 str为字符串类型的变量 (1)str.Length即得字符串的长度 (2)strindex /index为下标,取值为 0-str.Length-1; (3)Char.IsDigit(ch) /判断是否为数字 Char.IsLetter(ch)/判断是否为字母 (4)str.SubString( startIndex,length)/从下标为 startI ndex开始截取长度为 length的字符串 【 例 2-9】 循环与跳转综合举例 53 2.6.4 异常处理 1.try-catch语句 try 语句序列 catch(异常类型 标识符) 异常处理 在程序运行正常的时候,执行 try块内的程序。如果 try块中出 现了异常,程序就转移到 catch块中执行。 54 2.6.4 异常处理 (续 ) 2.try-catch-finally语句 try 语句序列 catch(异常类型 标识符) 异常处理 finally 语句序列 55 3.throw语句 格式: throw 表达式 ; 抛出表达式的值。 注意表达式类型必须是 System.Exception或从 System.Excep tion派生的类的类型。 throw也可以不带表达式,不带表达式的 throw语句只 能用在 catch块中,在这种情况下,它重新抛出当前正在由 c atch块处理的异常。 2.6.4 异常处理 (续 ) 56 例 .异常处理 using System; namespace TryCatchExample class Program static void F() try G(); catch (Exception err) Console.WriteLine(方法 F中捕获到 : + err.M essage); 57 / 重新抛出当前正在由 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(); 58 本章涉及的面试题目 C#的数据类型有() ( 某 IT公司 ) a) 值类型和调用类型; b) 值类型和引用类型; c) 引用类型和关系类型; d) 关系类型和调用类型; 下列选项中,( ) 是引用类型。 ( 某 IT公司 ) a) enum类型 b) struct类型 c) string类型 d) int类型 59 本章涉及的面试题目(续) Question 42. (单选 )( 雅虎公司 ) public static void Main(string args) int i = 2000; object o = i; i = 2001; int j =(int) o; Console.WriteLine(i=0,o=1, j=2,i,o,j); 1. i=2001,o=2000,j=2000 2. i=2001,o=2001,j=2001 3. i=2000,o=2001,j=2000 4. i=2001,o=2000,j=2001 60 本章作业及实验 本章作业: P41: 2、 3、 4、 5、 7 本章结束后可以做实验二,小组负责人组织讨论并实现超 级存款计算器子系统设计。 (注意保存)
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


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

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


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