#数据类型与流程控制

上传人:宝路 文档编号:48005039 上传时间:2018-07-08 格式:PPT 页数:87 大小:698.98KB
返回 下载 相关 举报
#数据类型与流程控制_第1页
第1页 / 共87页
#数据类型与流程控制_第2页
第2页 / 共87页
#数据类型与流程控制_第3页
第3页 / 共87页
#数据类型与流程控制_第4页
第4页 / 共87页
#数据类型与流程控制_第5页
第5页 / 共87页
点击查看更多>>
资源描述

《#数据类型与流程控制》由会员分享,可在线阅读,更多相关《#数据类型与流程控制(87页珍藏版)》请在金锄头文库上搜索。

1、1第2章 数据类型与流程控制2.1 数据类型 2.2 不同数据类型之间的转换 2.3 常量与变量 2.4 运算符与表达式 2.5 控制台应用程序与格式化输出 2.6 C#流程控制语句2 2.1 数据类型uC#数据类型分为两类:值类型和引用类型。P17m值类型:包括简单类型、枚举类型、结构类型、可空类型。u引用类型:m 包括类、接口、数组、委托。一般把引用类型的变量称为对象。3值类型与引用类型4栈和堆 内存基本上被划分为栈和堆l 栈是用来存储值类型变量的数据结构,如创建int变量时, 该变量的值存储在栈上,此外对函数(方法)的任何调用都 添加到栈的顶端,在函数返回时删除该调用。l 堆用于存储引用

2、类型的变量,在创建类的实例时在堆上分配对象,返回该对象的地址,并且将该地址存储在位于栈上的 变量中。5值类型: C#的所有值类型均隐式派生自SYSTEM.VALUETYPE: 1、结构体:Struct(直接派生于SYSTEM.VALUETYPE); 2、数值类型: 整型:SBYTE,SHORT,INT,LONG,BYTE,USHORT,UINT, ULONG,CHAR; 浮点型:FLOAT,DOUBLE;用于财务计算的高精度DECIMAL型; 3、BOOL型:BOOL(SYSTEM.BOOLEAN的别名); 4、用户定义的结构体(派生于SYSTEM.VALUETYPE)。 5、枚举:ENUM(

3、派生于SYSTEM.ENUM); 6、可空类型(派生于SYSTEM.NULLABLE泛型结构体,T?实际上是 SYSTEM.NULLABLE的别名)。 值类型与引用类型区别6值类型: C#中的所有值类型变量在声明时都有初始值,然而没有明确 地初始化变量,C#就禁止使用该变量。如: bool married;Console.WriteLine(married); 则提示错误信息“使未赋值的变量married” C#中可以将值类型声明为可空(nullable),意味着它可以暂 时没有值。 如:bool?married=null; 或者Nullable married = null;值类型与引用类型

4、区别7引用类型: 1、数组(派生于SYSTEM.ARRAY) 2、用户用定义的以下类型: 类:class(派生于SYSTEM.OBJECT); 接口:interface(接口不存在派生于何处的问题。3、委托:delegate(派生于SYSTEM.DELEGATE)。 4、Object(System.OBJECT的别名); 5、字符串:string(System.String的别名)。值类型与引用类型区别8值类型与引用类型区别堆栈堆56ij实际数据12345Hobj图中i和j为值类型变量,obj为引用类型变量值类型的变量保存的是变量的值; 引用类型的变量保存的是数据的引用地址。9引用类型分两步创

5、建:首先在堆栈上创建一个引用变量, 然后在堆上创建对象本身,再把这个内存的句柄(也是内 存的首地址)赋给引用变量例如:string s1, s2;s1=“ABCD“; s2 = s1; 其中,s1,s2是指向字符串的引用变量,s1的值是字符串 “ABCD”存放在内存的地址,这就是对字符串的引用,两个 引用型变量之间的赋值,使得s2、s1都是对“ABCD”的引用 。如下图所示。值类型与引用类型区别10(1)考虑如下代码: int i=5; int j=6; int k = i; i=7; 问k的值是多少? (2) 假设类A有实例Obj,Obj1,执行如下代码 Obj.age = 10; Obj1

6、 = Obj; Obj1.age = 12; 问此时Obj.age的值是多少?值类型与引用类型区别11值类型和引用类型的区别 特性值类型引用类型变量中保存的内容实际数据指向实际数据的引用指针内存空间配置堆栈(Stack)受管制的堆(Managed Heap )内存需求较少较多执行效率较快较慢内存释放时间点执行超过定义变量的 作用域时由垃圾回收机制负责回收12为什么要托管堆(受管制的堆)?.NET框架包含一个托管堆,所有的.NET语言在分配引用 类型对象时都要使用它。像值类型这样的轻量级对象始终分 配在栈中,但是所有的类实例和数组都被生成在一个内存池 中,这个内存池就是托管堆。垃圾收集器的基本算

7、法很简单: 将所有的托管内存标记为垃圾 寻找正被使用的内存块,并将他们标记为有效 释放所有没有被使用的内存块 整理堆以减少碎片13相关面试题目int k=5; int j=5; if (Object.ReferenceEquals(k, j) /判定k和j是否为为同一个实实例Console.WriteLine(“Equal“); else Console.WriteLine(“Not Equal“);Object o = new object();Object obj = o;if (Object.ReferenceEquals(o, obj) Console.WriteLine(“Equal

8、“); else Console.WriteLine(“Not Equal”); 运行结果: Not Equal Equal 14 2.1.2 整型 uC#提供了八种整型(即计算机组成原理中的“定点数”):sbyte:1字节有符号byte: 1字节无符号short: 2字节有符号ushort:2字节无符号int: 4字节有符号,最常用uint: 4字节无符号long: 8字节有符号ulong:8 字节无符号15 2.1.3 浮点类型 float:4字节浮点数,常用。例如:35.0f double:8字节浮点数,常用。例如:2.7E+23 decimal:16字节浮点数,特殊的浮点数,精度高,适

9、用于 金融、货币等需要高精度数值的领域。其类型指定符为M( 或m)。 例如: decimal y = 9999999999999999999999999m; float和double的浮点数格式与计算机组成原理介绍的 IEEE754规定的格式相同16 C#中所有非整数的数值始终被视为双精度,如果将非整数的数值赋给float类型的变量,需要在该数之后附加F或者f后缀,否则会出现错误“不能隐式地将 Double 类型转换为“float”类型;请使用“F”后缀创建此类型”。如 float i=3.99f; 同样需要使用M后缀将非整数值赋给decimal变量如 decimal d=4.56M;2.1.

10、3 浮点类型 172.1.4 布尔型 u 用bool表示,bool类型只有两个值true和false。例如:bool isExist = false;bool b = (i0 循环体内的程序至少会执行一次,然后再判断条 件是否为true,如果条件为true,则继续循环。592.6.3 跳转语句u 1.break语句功能:退出最近的封闭switch、while、do- while、for或foreach语句。格式:break;60【例】循环接收和输出键盘输入的每一行的值,当接收的 内容为空字符串时退出。 using System; namespace BreakExample public cl

11、ass Programpublic static void Main()for (; ; )Console.Write(“请输入一个字符串(直接回车退出) :“);string s = Console.ReadLine();if (s = “) break;Console.WriteLine(“你输入的是: 0.“, s);Console.ReadLine(); 61 2.6.3 跳转语句 (续)u 2.continue语句功能:将控制传递给下一个while、do-while 、 for或foreach,继续执行下一次循环。格式:continue ;622.6.3 跳转语句 (续)u 3.go

12、to语句仅在下面两种情况下才可能会使用goto语句:(1)用于switch语句中从一个case标签转到另一个case标签处。(2)用于直接退出到多重嵌套循环的外部。63 2.6.3 跳转语句 (续)u4.return语句功能:将控制返回到出现return语句的函数成员的调用方。格式:return 表达式;其中表达式为可选项,如果该函数成员的返回类型不为null,则return语句必须使用表达式返回这个类型的值,否则return语句不能使用表达式。64看例子,思考如下问题: (1)如何求字符串长度 (2)如何求字符串中某个序号对应的字符 (3)如何判断字符串中的某个字符是数字还是字母 (4)如何

13、截取字符串 解答:假设str为字符串类型的变量(1)str.Length即得字符串的长度(2)strindex /index为下标,取值为0-str.Length-1;(3)Char.IsDigit(ch) /判断是否为数字Char.IsLetter(ch)/判断是否为字母(4)str.SubString(startIndex,length)/从下标为 startIndex开始截取长度为length的字符串【例2-9】循环与跳转综合举例65 2.6.4 异常处理 异常是程序执行时遇到的任何错误情况或意外行为。 在C#里,异常处理就是C#为处理错误情况提供的一种机制。它为每种错误情况提它为每种错

14、误情况提供了定制的处理方式,并且把标识错误的代码与处理错误的代码分离开来 在.Net Fraework中,异常是从Exception类继承的对象。异常从发生问题的代码区域引发,然后沿堆栈向上传递,直到应用程序处理它或程序终止。66系统定义的经常用到的异常系统定义的经常用到的异常System.OutOfMemoryExceptionSystem.OutOfMemoryException用用newnew分配内存失败分配内存失败System.NullReferenceExceptionSystem.NullReferenceException对象为空对象为空Syetem.IndexOutOfRang

15、eExceptionSyetem.IndexOutOfRangeException数组边界超出数组边界超出System.ArithmaticExceptionSystem.ArithmaticException算术操作异常的基类算术操作异常的基类System.DivideByZeroExceptionSystem.DivideByZeroException除零错除零错System.OverflowExceptionSystem.OverflowException溢出错误溢出错误System.ArrayTypeMismatchExceptionSystem.ArrayTypeMismatchException数组类型不匹配数组类型不匹配672.6.4 异常处理 1.try-catch语句 try 语句序列 catch(异常类型 标识符) 异常处理 在程序运行正常的时候,执行try块内的程序。如果try块中代 码出现了异常,程序就转移到catch块中指定的异常进行处理。 681.try-catch语句 public void test() tryint b = int.Parse(“abc“);catch (FormatException ex)Console.WriteLine(ex.Message); 2.6.4 异常处理 692:try-finally

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号