收藏 分享(赏)

第2章 数据类型与流程控制 西安科技大学.ppt

上传人:无敌 文档编号:1072130 上传时间:2018-06-09 格式:PPT 页数:51 大小:1.24MB
下载 相关 举报
第2章 数据类型与流程控制 西安科技大学.ppt_第1页
第1页 / 共51页
第2章 数据类型与流程控制 西安科技大学.ppt_第2页
第2页 / 共51页
第2章 数据类型与流程控制 西安科技大学.ppt_第3页
第3页 / 共51页
第2章 数据类型与流程控制 西安科技大学.ppt_第4页
第4页 / 共51页
第2章 数据类型与流程控制 西安科技大学.ppt_第5页
第5页 / 共51页
点击查看更多>>
资源描述

1、第2章 数据类型与流程控制,内容提要,2.1 数据类型2.2 不同数据类型之间的转换2.3 常量与变量2.4 运算符与表达式2.5 控制台应用程序与格式化输出2.6 C#流程控制语句,2,预期目标,掌握C#的基本语法,3,2.1 数据类型,C#数据类型分为两类:值类型和引用类型。值类型:包括简单类型、枚举类型、结构类型、可空类型。引用类型:包括类、接口、数组、委托。一般把引用类型的变量称为对象。,4,值类型与引用类型区别,堆栈,堆,5,6,i,j,实际数据,12345H,obj,5,值类型和引用类型的区别,6,2.1.2 整型,C#提供了八种整型(即计算机组成原理中的“定点数”):sbyte:

2、1字节有符号byte: 1字节无符号short: 2字节有符号ushort:2字节无符号int: 4字节有符号,最常用uint: 4字节无符号long: 8字节有符号ulong:8 字节无符号,7,2.1.3 浮点类型,float:4字节浮点数,常用。例如:35.0fdouble:8字节浮点数,常用。例如:2.7E+23decimal:16字节浮点数,特殊的浮点数,精度高,适用于金融、货币等需要高精度数值的领域。其类型指定符为M(或m)。例如: decimal y = 9999999999999999999999999m;float和double的浮点数格式与计算机组成原理介绍的IEEE754

3、规定的格式相同,8,2.1.4 布尔型,用bool表示,bool类型只有两个值true和false。例如:bool isExist = false;bool b = (i0 /错误,9,2.1.5 字符型与字符串类型,char型,为单个Unicode字符,字符型常量必须用单引号引起来 。例如: char cha;如果是字符串(单个字符的组合),对应的类型为string。string类型的常量用双引号将字符串引起来。例如:string str=“hello”;char和string类型的常量均可以使用转义符。,10,2.2 值类型之间的数据转换,有两种转换方式:隐式转换与显式转换;如果是不同值类

4、型之间的转换,可以使用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,2.2.2 装箱与拆箱,Object类型:所有其他引用

5、类型的基类。装箱:将值类型转换为object类型int i=123;object o = i;拆箱:将object类型转换为值类型int k = (int)o;,14,2.3 常量和变量,C#中提供2种类型的常量:使用const关键字声明const常量是在编译时设置其值并且永远不能更改其值的字段。使用readonly关键字声明readonly关键字在程序运行期间只能初始化“一次”的字段,可以在声明语句中初始化,也可以在构造函数中初始化。初始化以后,用readonly声明的字段的值就不能再更改。二者区别:readonly常量运行时初始化,const常量编译时初始化。const常量只能在声明中赋值

6、,readonly常量既可以在声明中赋值,也可以在构造函数中赋值。,15,变量,变量用来表示一个数值、一个字符串值或者一个类的对象。变量存储的值可能会发生更改,但变量名称保持不变。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+; ,16,变量,声明变量举例:int a = 100;/声明一个整型变量a,并赋初值为100也可以采用先定义、后赋值的方

7、式,例如:int a; /声明一个整型变量aa = 100; /为整型变量a赋值为100另外,也可以把几个变量声明和初始化用一条语句完成,各个变量之间用逗号分隔,例如:int a = 100, b, c = 200,d; /声明整型变量a、b、c、d,并将a赋值100,c赋值200,17,匿名类型的变量,匿名类型的变量就是程序员不必指定“局部”变量的类型,统统用var来表示类型即可。在LINQ表达式或者foreach语句中,使用匿名类型的变量比较方便。,18,2.4 运算符和表达式,C#提供了3大类运算符:一元运算符:带有一个操作数的运算符称为“一元”运算符,例如,i+。二元运算符:带有两个操

8、作数的运算符称为“二元”运算符,例如,x + y。三元运算符:带有三个操作数的运算符称为“三元”运算符,在C#中,只存在1个三元运算符,即条件运算符“?:”。表达式C#的表达式与C+和Java类似。,19,2.5 控制台应用程序与格式化输出,控制台(Console类)控制台输出Console.Write ();Console.WriteLine();控制台输入Console.ReadKey();标准输入流读取用户按下的字符或功能键。Console.ReadLine();从标准输入流读取一行字符。,20,字符串的格式化输出,格式输出的一般形式为N , M: 格式码其中, :表示其中的内容为可选项

9、。N:从零开始的整数,表示第几个参数。M:可选整数,表示最小长度。若参数N的长度小于M,就用空格填充。如果M为负,则左对齐;如果M为正,则右对齐;如果未指定M,则默认为零。格式码:可选的格式化代码字符串。,21,常用格式码及举例,22,字符串的格式化输出,对于字符串来说,可以直接利用格式化输出得到希望的格式,例如:string s = string.Format(0, 30, ); /s得到的结果为30个空格的字符串string s1 = string.Format(0, -20, 15); /s1得到的结果为左对齐长度为20的字符串,23,数字的格式化输出,常用格式举例:1) 在ToStri

10、ng中使用d格式。int i = 12345;/ i.ToString(d)表示将i按照实际整数宽度转换为字符串string str = i.ToString(d);Console.WriteLine(str); /结果12345/ i.ToString(d8)表示将i转换为字符串,宽度为8位,不够8位左边用0填充string str1 = i.ToString(d8);Console.WriteLine(str1); /结果00012345,24,数字的格式化输出,2) 在string.Format中使用d格式。int i = 123;double j = 123.45;/ 0,7:d表示第

11、0个参数,宽度7位,不够7位左边用空格填充,d表示十进制整数string s1 = string.Format(the value is 0,7:d,i);Console.WriteLine(s1); /结果 the value is 123/ 0,7:f3表示第0个参数,总宽度7位,其中小数部分占3位,不够7位左边填空格/ f表示浮点数string s2 = string.Format(the value is 0,7:f3,j); Console.WriteLine(s2); /结果 the value is 123.450,25,数字的格式化输出,3) 在ToString中使用f格式。d

12、ouble i = 12345.6789;/ f2表示浮点数小数部分为2位,多余部分四舍五入,不够2位时右边补零string str = i.ToString(f2); Console.WriteLine(str); /结果 12345.68string str1 = i.ToString(f6); Console.WriteLine(str1); /结果 12345.678900,26,数字的格式化输出,4) 在ToString中使用n格式。double i = 12345.6789;/ n表示整数部分从小数点向左每3位用逗号分隔开,小数部分2位,多余部分四舍五入string str = i

13、.ToString(n); Console.WriteLine(str); /结果 12,345.68/ n4表示整数部分从小数点向左每3位用逗号分隔开,小数部分4位,多余部分四舍五入string str1 = i.ToString(n4); Console.WriteLine(str1); /结果 12,345.6789,27,数字的格式化输出,5) 在ToString中使用p格式。double i = 0.126;/ p表示百分数形式string s = string.Format(the value is 0:p,i);Console.WriteLine(s); /结果 the valu

14、e is 12.60%string str = i.ToString(p);Console.WriteLine(str); /结果 12.60%,28,日期和时间的格式化输出,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.ToSt

15、ring(yyyy年M月);Console.WriteLine(str1); /结果 2006年5月,29,2.6 C#流程控制语句,流程控制的形式:顺序分支循环异常捕获如果一个逻辑块包含两条或两条以上的语句序列,必须使用大括号将语句括起来。,30,2.6.1 条件分支语句,if语句:根据布尔表达式的值(true或者false)选择要执行的语句序列,使用时要注意else应和最近的if语句匹配。三种形式:ififelseifelse ifelse,31,2.6.1 条件分支语句(续),switch 语句也叫case语句switch语句与C+和Java均不完全相同。switch语句常用形式为:,s

16、witch (表达式) case 常量表达式1: 语句序列1 case 常量表达式2: 语句序列2 default: 语句序列,32,2.6.1 条件分支语句(续),常量表达式switch条件表达式的值和每个case后的常量表达式可以是string、int、char、enum或其它值类型。语句序列 每个case后的语句序列可以用大括号括起来,也可以不用, 每个case块的最后一句一定要是break或goto。switch语句的执行顺序 a) 如果switch语句的条件表达式的值和某一个case标记值相等,则转到该case标记后的语句序列执行;b)若switch语句的条件表达式的值和任何一个ca

17、se标记后指定的值都不相等,则跳到default标记后的语句序列执行;,33,2.6.1 条件分支语句(续),c)若switch语句下面没有default标记,则跳到switch语句的结尾。注意: a) 要求每个语句序列的最后一条语句必须是break语句,但是有一个情况例外:如果某个case块为空,则会从这个case块直接跳到下一个case块上。b) 如果case后有语句,则此case的顺序怎么放都无所谓,甚至可以将default子句放到最上面。因此,在一个switch中,不能有相同的两个case标记。,34,例.使用switch语句,完成对成绩等级的评定,using System;names

18、pace 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

19、) /整除 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(); ,35,2.6.2 循环语句,包括:for语句while语句do-while语句foreach语句,用于对集合、数组进行操作。,36,2.6

20、.2 循环语句(续),for语句一般形式:,for (初始值;循环条件;循环控制) 语句序列,37,例.使用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;

21、 j i; j+) Console.Write(*); Console.WriteLine(); Console.ReadLine(); ,38,2.6.2 循环语句(续),while语句一般形式:循环体内的程序可能会执行多次,也可能一次也不执行。,while (条件)语句序列,39,2.6.2 循环语句(续),do-while一般形式:循环体内的程序至少会执行一次,然后再判断条件是否为true,如果条件为true,则继续循环。,do 语句序列while (条件);,40,2.6.2 循环语句(续),foreach语句foreach语句用于逐个提取集合中的元素,并对集合中每个元素执行语句序列中

22、操作的场合。一般形式为:注意:循环变量是一个只读型的局部变量。,foreach ( 类型 标识符 in 表达式 ) 语句序列,41,2.6.2 循环语句(续),判断下列语句是否正确,并说明原因,int myInt=1,2,3; foreach(int test in myInt) test+; Console.WriteLine(test); ,42,2.6.3 跳转语句,1.break语句功能:退出最近的封闭switch、while、do-while、for或foreach语句。格式:break;,43,示例,【例】循环接收和输出键盘输入的每一行的值,当接收的内容为空字符串时退出。,usin

23、g 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(); ,44,2.6.3 跳转语句 (续),2.continue语句功能:将控制传递给下一个while、do-while、for或foreach,继续执行下

24、一次循环。格式:continue ;3.goto语句仅在下面两种情况下才可能会使用goto语句:(1)用于switch语句中从一个case标签转到另一个case标签处。(2)用于直接退出到多重嵌套循环的外部。,45,2.6.3 跳转语句 (续),4.return语句功能:将控制返回到出现return语句的函数成员的调用方。格式:return 表达式;其中表达式为可选项,如果该函数成员的返回类型不为null,则return语句必须使用表达式返回这个类型的值,否则return语句不能使用表达式。,46,2.6.4 异常处理,1.try-catch语句在程序运行正常的时候,执行try块内的程序。如果

25、try块中出现了异常,程序就转移到catch块中执行。,try 语句序列catch(异常类型 标识符) 异常处理,47,2.6.4 异常处理 (续),2.try-catch-finally语句,try 语句序列catch(异常类型 标识符) 异常处理finally 语句序列,48,2.6.4 异常处理 (续),3.throw语句格式:throw 表达式;抛出表达式的值。注意表达式类型必须是System.Exception或从System.Exception派生的类的类型。throw也可以不带表达式,不带表达式的throw语句只能用在catch块中,在这种情况下,它重新抛出当前正在由catch块

26、处理的异常。,49,例.异常处理,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) Console.WriteLine(方法Main中捕获到: + err.Message); Console.ReadLine(); ,50,小结,51,

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

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

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报