数据类型与流程控制.ppt_第1页
数据类型与流程控制.ppt_第2页
数据类型与流程控制.ppt_第3页
数据类型与流程控制.ppt_第4页
数据类型与流程控制.ppt_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章 数据类型与流程控制,2.1 数据类型 2.2 不同数据类型之间的转换 2.3 常量与变量 2.4 运算符与表达式 2.5 控制台应用程序与格式化输出 2.6 C#流程控制语句,2.1 数据类型,C#数据类型分为两类:值类型和引用类型。 值类型: 包括简单类型、枚举类型、结构类型、可空类型。 引用类型: 包括类、接口、数组、委托。 一般把引用类型的变量称为对象。,值类型与引用类型区别,堆栈,堆,5,6,i,j,实际数据,12345H,obj,图中i和j为值类型变量,obj为引用类型变量,(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的值是多少?,值类型与引用类型区别,值类型和引用类型的区别,相关面试题目,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“); else Console.WriteLine(“Not Equal”); 运行结果: Not Equal Equal,2.1.2 整型,C#提供了八种整型(即计算机组成原理中的“定点数”): sbyte:1字节有符号 byte: 1字节无符号 short: 2字节有符号 ushort:2字节无符号 int: 4字节有符号,最常用 uint: 4字节无符号 long: 8字节有符号 ulong:8 字节无符号,2.1.3 浮点类型,float:4字节浮点数,常用。例如:35.0f double:8字节浮点数,常用。例如:2.7E+23 decimal:16字节浮点数,特殊的浮点数,精度高,适用于金融、货币等需要高精度数值的领域。其类型指定符为M(或m)。 例如: decimal y = 9999999999999999999999999m; float和double的浮点数格式与计算机组成原理介绍的IEEE754规定的格式相同,2.1.4 布尔型,用bool表示,bool类型只有两个值true和false。 例如: bool isExist = false; bool b = (i0 /错误,2.1.5 字符型与字符串类型,char型,为单个Unicode字符,字符型常量必须用单引号引起来 。 例如: char cha; 如果是字符串(单个字符的组合),对应的类型为string。string类型的常量用双引号将字符串引起来。 例如:string str=“hello”; char和string类型的常量均可以使用转义符。,2.2 值类型之间的数据转换,有两种转换方式:隐式转换与显式转换; 如果是不同值类型之间的转换,可以使用Convert类。,2.2.1 隐式转换和显式转换,隐式转换 从低精度、小范围的数据类型转换为高精度、大范围的数据类型,可以用隐式转换。 例如: int k = 1; long i = 2; i = k; /隐式转换,2.2.1 隐式转换和显式转换,显式转换:也称为强制转换。用户必须明确地指定转换的类型。 如: long k = 5000; int i = (int)k; 所有的隐式转换也都可以采用显式转换的形式来表示。如: int i = 10; long j = (long)i; 将大范围类型的数据转换为小范围类型的数据的时候,属于显式转换,另外还必须特别谨慎,因为此时有丢失数据的危险。,相关例题,下面声明了一些数值类型的变量: 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;,2.2.2 装箱与拆箱,Object类型:所有其他引用类型的基类。 装箱:将值类型转换为object类型 int i=123; object o = i; 拆箱:显式地将object类型转换为值类型 int i=123; Object box = i;/装箱操作 int k = (int)box;/拆箱操作,2.3 常量和变量,C#中提供2种类型的常量: 使用const关键字声明 const常量是在编译时设置其值并且永远不能更改其值的字段,在对程序进行编译的时候,编译器会把所有const常量全部替换为常数。 const int PI=3.14; 使用readonly关键字声明 readonly关键字在程序运行期间只能初始化“一次”的字段,可以在声明语句中初始化该字段,也可以在构造函数中初始化该字段。初始化以后,用readonly声明的字段的值就不能再更改。 readonly string b ; public Form1() b=“bbb”; ,2.3.1 常量,二者区别: readonly常量运行时初始化,const常量编译时初始化。 const常量只能在声明中赋值,readonly常量既可以在声明中赋值,也可以在构造函数中赋值。,变量,变量用来表示一个数值、一个字符串值或者一个类的对象。变量存储的值可能会发生更改,但变量名称保持不变。 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+; ,变量,声明变量举例: 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,匿名类型的变量,匿名类型的变量就是程序员不必指定“局部”变量的类型,统统用var来表示类型即可。 在LINQ表达式或者foreach语句中,使用匿名类型的变量比较方便。 匿名类型仍然属于强类型,只不过判断具体类型的工作由编译器完成。 具体内容到LINQ一节再仔细讲解。,2.4 运算符和表达式,1.运算符 C#提供了3大类运算符: 一元运算符:带有一个操作数的运算符称为“一元”运算符,例如,i+。 二元运算符:带有两个操作数的运算符称为“二元”运算符,例如,x + y。 三元运算符:带有三个操作数的运算符称为“三元”运算符,在C#中,只存在1个三元运算符,即条件运算符“?:”。 常用运算符 typeof :获取类型的System.Type 例如:System.Type type = typeof(int);,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类似。,2.5 控制台应用程序与格式化输出,控制台(Console类) 1. 控制台输出 Console.Write (); 把各种类型的数据或对象转换成字符串写入标准输出流。 Console.WriteLine(); 把各种类型的数据或对象转换成字符串写入标准输出流,与Write的区别在于,它还输出回车符和换行符(“rn”);,2.5 控制台应用程序与格式化输出,2. 控制台输入 Console.ReadKey(); 标准输入流读取用户按下的字符或功能键。 例如: ConsoleKeyInfo c=Console.ReadKey(); Console.ReadLine(); 从标准输入流读取一行字符。 例如:string s = Console.ReadLine();,3. 字符串的格式化输出,字符串格式化:Console类的Write或WriteLine方法; String.Format方法中均可以规定输出字符串的格式。 格式输出的一般形式为 N , M: 格式码 其中, :表示其中的内容为可选项。 N:从零开始的整数,表示第几个参数。 M:可选整数,表示最小长度。若参数N的长度小于M,就用空格填充。如果M为负,则左对齐;如果M为正,则右对齐;如果未指定M,则默认为零。 格式码:可选的格式化代码字符串。,常用格式码及举例,字符串的格式化输出,对于字符串来说,可以直接利用格式化输出得到希望的格式,例如: string s = string.Format(“0, 30“, ); /s得到的结果为30个空格的字符串 string s1 = string.Format(“0, -20“, “15“); /s1得到的结果为左对齐长度为20的字符串,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.45,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% 格式:5:d 数123 输出结果: 123 格式:7:f3 数123.45 输出结果:123.450,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月,2.6 C#流程控制语句,流程控制的形式: 顺序 分支 循环 异常捕获 如果一个逻辑块包含两条或两条以上的语句序列,必须使用大括号将语句括起来。,2.6.1 条件分支语句,if语句:根据布尔表达式的值(true或者false)选择要执行的语句序列,使用时要注意else应和最近的if语句匹配。 三种形式: if ifelse ifelse ifelse,雅虎面试题:,一列数的规则如下: 1、1、2、3、5、8、13、21、34.求第30位数是多少, 用递归算法实现。 实现关键代码: public static int Foo(int i) if (i 0 ,2.6.1 条件分支语句(续),switch 语句也叫case语句 switch语句与C+和Java均不完全相同。 switch语句常用形式为: switch (表达式) case 常量表达式1: 语句序列1 case 常量表达式2: 语句序列2 default: 语句序列 ,2.6.1 条件分支语句(续),常量表达式 switch条件表达式的值和每个case后的常量表达式可以是string、int、char、enum或其它值类型。 语句序列 每个case后的语句序列可以用大括号括起来,也可以不用,但是每个case块的最后一句一定要是break语句,或者是goto语句。 switch语句的执行顺序 a) 如果switch语句的条件表达式的值和某一个case标记后指定的值相等,则转到该case标记后的语句序列执行; b)若switch语句的条件表达式的值和任何一个case标记后指定的值都不相等,则跳到default标记后的语句序列执行;,2.6.1 条件分支语句(续),c)若switch语句下面没有default标记,则跳到switch语句的结尾。 注意: a) 要求每个语句序列的最后一条语句必须是break语句,但是有一个情况例外:如果某个case块为空,则会从这个case块直接跳到下一个case块上。 b) 如果case后有语句,则此case的顺序怎么放都无所谓,甚至可以将default子句放到最上面。因此,在一个switch中,不能有相同的两个case标记。,例.使用switch语句,完成对成绩等级的评定,using System; namespace SwitchExample public class Program public static void Main() Console.Write(“请输入成绩:“); /从键盘接收一行字符 string str = Console.ReadLine(); /转换为整型,注意此语句可能会产生异常,一般需要异常处理 int i = Int32.Parse(str.Trim(); /或者int.Parse()或者Convert.ToInt32 () if (i 100 | i 0) Console.WriteLine(“成绩不在0-100范围内“); ,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(); ,2.6.2 循环语句,循环 包括: for语句 while语句 do-while语句 foreach语句,用于对集合、数组进行操作。,2.6.2 循环语句(续),1. for语句 一般形式: for (初始值;循环条件;循环控制) 语句序列 ,例.使用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(); ,2.6.2 循环语句(续),2. foreach语句 foreach语句用于逐个提取集合中的元素,并对集合中每个元素执行语句序列中操作的场合。一般形式为: foreach ( 类型 标识符 in 表达式 ) 语句序列 注意:循环变量是一个只读型的局部变量。,2.6.2 循环语句(续),判断下列语句是否正确,并说明原因 int myInt=1,2,3; foreach(int test in myInt) test+; Console.WriteLine(test); ,2.6.2 循环语句(续),3. while语句 一般形式: while (条件) 语句序列 循环体内的程序可能会执行多次,也可能一次也不执行。,2.6.2 循环语句(续),4. do-while 一般形式: do 语句序列 while (条件); 循环体内的程序至少会执行一次,然后再判断条件是否为 true,如果条件为true,则继续循环。,2.6.3 跳转语句,1.break语句 功能:退出最近的封闭switch、while、do- while、for或foreach语句。 格式: break;,【例】循环接收和输出键盘输入的每一行的值,当接收的内容为空字符串时退出。,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(); ,2.6.3 跳转语句 (续),2.continue语句 功能:将控制传递给下一个while、do-while、 for或foreach,继续执行下一次循环。 格式: continue ;,2.6.3 跳转语句 (续),3.goto语句 仅在下面两种情况下才可能会使用goto语句: (1)用于switch语句中从一个case标签转到另一个case标签处。 (2)用于直接退出到多重嵌套循环的外部。,2.6.3 跳转语句 (续),4.return语句 功能:将控制返回到出现return语句的函数成 员的调用方。 格式: return 表达式; 其中表达式为可选项,如果该函数成员的返回 类型不为null,则return语句必须使用表达式返回这 个类型的值,否则return语句不能使用表达式。,看例子,思考如下问题: (1)如何求字符串长度 (2)如何求字符串中某个序号对应的字符 (3)如何判断字符串中的某个字符是数字还是字母,【例2-9】循环与跳转综合举例,2.6.4 异常处理,1.try-catch语句 try 语句序列 catch(异常类型 标识符) 异常处理 在程序运行正常的时候,执行try块内的程序。如果try块中出现了异常,程序就转移到catch块中执行。,2.6.4 异常处理 (续),2.try-catch-finally语句 try 语句序列 catch(异常类型 标识符) 异常处理 finally 语句序列 ,3.throw语句 格式: throw 表达式; 抛出表达式的值。 注意表达式类型必须是System.Exception或从System.Exception派生的类的类型。 throw也可以不带表达式,不带表达式的throw语句只能用在catch块中,在这种情况下,它重新抛出当前正在由catch块处理的异常。,2.6.4 异常处理 (续),例.异常处理,using System; namespace TryCatchExample class Program static void F() try G(); catch (Exception err) Console.WriteLine(“方法F中捕获到: “ + err.Message);,/ 重新抛出当前正在由catch 块处理的异常err throw; static void G() throw new Exception(“方法G中抛出的异常。“); static void Main() try F(); catch (Exception err)

温馨提示

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

评论

0/150

提交评论