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

下载本文档

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

文档简介

1、1 1第第2 2章章 数据类型与流程控制数据类型与流程控制2.1 2.1 数据类型数据类型2.2 2.2 不同数据类型之间的转换不同数据类型之间的转换2.3 2.3 常量与变量常量与变量2.4 2.4 运算符与表达式运算符与表达式2.5 2.5 控制台应用程序与格式化输出控制台应用程序与格式化输出2.6 2.6 C#C#流程控制语句流程控制语句2 22.1 2.1 数据类型数据类型u C#C#数据类型分为两类:值类型和引用类型。数据类型分为两类:值类型和引用类型。 值类型值类型: 包括简单类型、枚举类型、结构类型、可空类型。包括简单类型、枚举类型、结构类型、可空类型。 引用类型引用类型: 包括

2、类、接口、数组、委托。包括类、接口、数组、委托。 一般把引用类型的变量称为对象。一般把引用类型的变量称为对象。3 3值类型与引用类型区别值类型与引用类型区别堆栈堆56ij实际数据12345Hobjobj4 4值类型和引用类型的区别值类型和引用类型的区别 5 52.1.2 2.1.2 整型整型 u C#C#提供了八种整型(即计算机组成原理中的提供了八种整型(即计算机组成原理中的“定点数定点数”):): sbytesbyte:1 1字节有符号字节有符号 bytebyte: 1 1字节无符号字节无符号 shortshort: 2 2字节有符号字节有符号 ushortushort:2 2字节无符号字节

3、无符号 intint: 4 4字节有符号,最常用字节有符号,最常用 uintuint: 4 4字节无符号字节无符号 longlong: 8 8字节有符号字节有符号 ulongulong:8 8 字节无符号字节无符号6 62.1.3 2.1.3 浮点类型浮点类型 floatfloat:4 4字节浮点数,常用。例如:字节浮点数,常用。例如:35.0f35.0fdoubledouble:8 8字节浮点数,常用。例如:字节浮点数,常用。例如:2.7E+232.7E+23decimaldecimal:1616字节浮点数,特殊的浮点数,精度高,适用于金字节浮点数,特殊的浮点数,精度高,适用于金融、货币等需

4、要高精度数值的领域。其类型指定符为融、货币等需要高精度数值的领域。其类型指定符为M M(或(或m m)。)。 例如:例如: decimal y = 9999999999999999999999999m; decimal y = 9999999999999999999999999m;floatfloat和和doubledouble的浮点数格式与计算机组成原理介绍的的浮点数格式与计算机组成原理介绍的IEEE754IEEE754规定的格式相同规定的格式相同7 72.1.4 2.1.4 布尔型布尔型 u 用用boolbool表示,表示,boolbool类型只有两个值类型只有两个值truetrue和和f

5、alsefalse。 例如:例如: bool isExist = false;bool isExist = false; bool b = (i0 & i0 & i 80 where score 80 select score; select score;foreach (var i in scoreQuery)foreach (var i in scoreQuery) Console.Write(i+ ); Console.Write(i+ ); 17172.4 2.4 运算符和表达式运算符和表达式C#C#提供了提供了3 3大类运算符:大类运算符: 一元运算符:带有一个操作数

6、的运算符称为一元运算符:带有一个操作数的运算符称为“一元一元”运算符,运算符,例如,例如,i+i+。 二元运算符:带有两个操作数的运算符称为二元运算符:带有两个操作数的运算符称为“二元二元”运算符,运算符,例如,例如,x + yx + y。 三元运算符:带有三个操作数的运算符称为三元运算符:带有三个操作数的运算符称为“三元三元”运算符,运算符,在在C#C#中,只存在中,只存在1 1个三元运算符,即条件运算符个三元运算符,即条件运算符“?:?:”。表达式表达式 C#C#的表达式与的表达式与C+C+和和JavaJava类似。类似。18182.5 2.5 控制台应用程序与格式化输出控制台应用程序与格

7、式化输出控制台(控制台(ConsoleConsole类)类)控制台输出控制台输出l Console.Write ();Console.Write ();l Console.WriteLine();Console.WriteLine();控制台输入控制台输入l Console.ReadKey();Console.ReadKey(); 标准输入流读取用户按下的字符或功能键。标准输入流读取用户按下的字符或功能键。l Console.ReadLine();Console.ReadLine(); 从标准输入流读取一行字符。从标准输入流读取一行字符。1919字符串的格式化输出字符串的格式化输出 格式输出的

8、一般形式为格式输出的一般形式为 N , M: N , M: 格式码格式码 其中,其中, :表示其中的内容为可选项。:表示其中的内容为可选项。N N:从零开始的整数,表示第几个参数。:从零开始的整数,表示第几个参数。M M:可选整数,表示最小长度。若参数:可选整数,表示最小长度。若参数N N的长度小于的长度小于M M,就用,就用空格填充。如果空格填充。如果M M为负,则左对齐;如果为负,则左对齐;如果M M为正,则右对为正,则右对齐;如果未指定齐;如果未指定M M,则默认为零。,则默认为零。格式码:可选的格式化代码字符串。格式码:可选的格式化代码字符串。2020常用格式码及举例常用格式码及举例2

9、121字符串的格式化输出字符串的格式化输出 对于字符串来说,可以直接利用格式化输出得到希望的格对于字符串来说,可以直接利用格式化输出得到希望的格式,例如:式,例如: string s = string.Format(0, 30, ); /s string s = string.Format(0, 30, ); /s得到得到的结果为的结果为3030个空格的字符串个空格的字符串 string s1 = string.Format(0, -20, 15); /s1 string s1 = string.Format(0, -20, 15); /s1得得到的结果为左对齐长度为到的结果为左对齐长度为20

10、20的字符串的字符串2222数字的格式化输出数字的格式化输出常用格式举例:常用格式举例:1) 1) 在在ToStringToString中使用中使用d d格式。格式。int i = 12345;int i = 12345;/ i.ToString(d)/ i.ToString(d)表示将表示将i i按照实际整数宽度转换为字符按照实际整数宽度转换为字符串串string str = i.ToString(d);string str = i.ToString(d);Console.WriteLine(str); /Console.WriteLine(str); /结果结果1234512345/ i.

11、ToString(d8)/ i.ToString(d8)表示将表示将i i转换为字符串,宽度为转换为字符串,宽度为8 8位,位,不够不够8 8位左边用位左边用0 0填充填充string str1 = i.ToString(d8);string str1 = i.ToString(d8);Console.WriteLine(str1); /Console.WriteLine(str1); /结果结果00012345000123452323数字的格式化输出数字的格式化输出2) 2) 在在string.Formatstring.Format中使用中使用d d格式。格式。int i = 123;int

12、 i = 123;double j = 123.45;double j = 123.45;/ 0,7:d/ 0,7:d表示第表示第0 0个参数,宽度个参数,宽度7 7位,不够位,不够7 7位左边用空格填位左边用空格填充,充,d d表示十进制整数表示十进制整数string s1 = string.Format(the value is 0,7:d,i);string s1 = string.Format(the value is 0,7:d,i);Console.WriteLine(s1); /Console.WriteLine(s1); /结果结果 the value is 123the va

13、lue is 123/ 0,7:f3/ 0,7:f3表示第表示第0 0个参数个参数, ,总宽度总宽度7 7位位, ,其中小数部分占其中小数部分占3 3位位, ,不够不够7 7位左边填空格位左边填空格/ f/ f表示浮点数表示浮点数string s2 = string.Format(the value is 0,7:f3,j); string s2 = string.Format(the value is 0,7:f3,j); Console.WriteLine(s2); /Console.WriteLine(s2); /结果结果 the value is 123.450the value is

14、 123.4502424数字的格式化输出数字的格式化输出3) 3) 在在ToStringToString中使用中使用f f格式。格式。double i = 12345.6789;double i = 12345.6789;/ f2/ f2表示浮点数小数部分为表示浮点数小数部分为2 2位,多余部分四舍五入,不位,多余部分四舍五入,不够够2 2位时右边补零位时右边补零string str = i.ToString(f2); string str = i.ToString(f2); Console.WriteLine(str); /Console.WriteLine(str); /结果结果 1234

15、5.6812345.68string str1 = i.ToString(f6); string str1 = i.ToString(f6); Console.WriteLine(str1); /Console.WriteLine(str1); /结果结果 12345.67890012345.6789002525数字的格式化输出数字的格式化输出4) 4) 在在ToStringToString中使用中使用n n格式。格式。double i = 12345.6789;double i = 12345.6789;/ n/ n表示整数部分从小数点向左每表示整数部分从小数点向左每3 3位用逗号分隔开,小

16、数位用逗号分隔开,小数部分部分2 2位,多余部分四舍五入位,多余部分四舍五入string str = i.ToString(n); string str = i.ToString(n); Console.WriteLine(str); /Console.WriteLine(str); /结果结果 12,345.6812,345.68/ n4/ n4表示整数部分从小数点向左每表示整数部分从小数点向左每3 3位用逗号分隔开,小位用逗号分隔开,小数部分数部分4 4位,多余部分四舍五入位,多余部分四舍五入string str1 = i.ToString(n4); string str1 = i.ToS

17、tring(n4); Console.WriteLine(str1); /Console.WriteLine(str1); /结果结果 12,345.678912,345.67892626数字的格式化输出数字的格式化输出5) 5) 在在ToStringToString中使用中使用p p格式。格式。double i = 0.126;double i = 0.126;/ p/ p表示百分数形式表示百分数形式string s = string.Format(the value is 0:p,i);string s = string.Format(the value is 0:p,i);Console

18、.WriteLine(s); /Console.WriteLine(s); /结果结果 the value is the value is 12.60%12.60%string str = i.ToString(p);string str = i.ToString(p);Console.WriteLine(str); /Console.WriteLine(str); /结果结果 12.60%12.60%2727日期和时间的格式化输出日期和时间的格式化输出 DateTime dt = new DateTime(2006,5,25);DateTime dt = new DateTime(2006,

19、5,25); / yy / yy表示年占两位,表示年占两位,M M表示月占表示月占1 1位,超出位,超出1 1位按实际位数位按实际位数 / d / d表示日占表示日占1 1位,超出位,超出1 1位按实际位数位按实际位数 string str = dt.ToString(yy.M.d); string str = dt.ToString(yy.M.d); Console.WriteLine(str); / Console.WriteLine(str); /结果结果 06.5.2506.5.25 /yyyy /yyyy表示年占表示年占4 4位,位,M M表示月占表示月占1 1位,超出位,超出1 1

20、位按实际位数,位按实际位数,其他按原字符输出其他按原字符输出 string str1 = dt.ToString(yyyy string str1 = dt.ToString(yyyy年年M M月月);); Console.WriteLine(str1); / Console.WriteLine(str1); /结果结果 20062006年年5 5月月28282.6 C#2.6 C#流程控制语句流程控制语句流程控制的形式:流程控制的形式:顺序顺序分支分支循环循环异常捕获异常捕获 如果一个逻辑块包含两条或两条以上的语句序列,如果一个逻辑块包含两条或两条以上的语句序列,必须使用大括号必须使用大括号

21、将语句括起来。将语句括起来。29292.6.1 2.6.1 条件分支语句条件分支语句 u if if语句:根据布尔表达式的值(语句:根据布尔表达式的值(truetrue或者或者falsefalse)选择)选择要执行的语句序列,使用时要注意要执行的语句序列,使用时要注意elseelse应和最近的应和最近的ifif语语句匹配。句匹配。u 三种形式:三种形式: ifif ifelseifelse ifelse ifelseifelse ifelse30302.6.1 2.6.1 条件分支语句条件分支语句( (续续) )u switch switch 语句也叫语句也叫casecase语句语句u swi

22、tchswitch语句与语句与C+C+和和JavaJava均不完全相同。均不完全相同。 switchswitch语句常用形式为:语句常用形式为:switch (switch (表达式表达式) ) case case 常量表达式常量表达式1: 1: 语句序列语句序列1 1 case case 常量表达式常量表达式2: 2: 语句序列语句序列2 2 default: default: 语句序列语句序列 31312.6.1 2.6.1 条件分支语句条件分支语句( (续续) )u常量表达式常量表达式 switchswitch条件表达式的值和每个条件表达式的值和每个casecase后的常量表达式可以是后

23、的常量表达式可以是stringstring、intint、charchar、enumenum或其它值类型。或其它值类型。u语句序列语句序列 每个每个casecase后的语句序列可以用大括号括起来,也可以不用后的语句序列可以用大括号括起来,也可以不用, ,但是每个但是每个casecase块的最后一句一定要是块的最后一句一定要是breakbreak语句,或者是语句,或者是gotogoto语句。语句。uswitchswitch语句的执行顺序语句的执行顺序 a) a) 如果如果switchswitch语句的条件表达式的值和某一个语句的条件表达式的值和某一个casecase标记后标记后指定的值相等,则转

24、到该指定的值相等,则转到该casecase标记后的语句序列执行;标记后的语句序列执行; b)b)若若switchswitch语句的条件表达式的值和任何一个语句的条件表达式的值和任何一个casecase标记后指标记后指定的值都不相等,则跳到定的值都不相等,则跳到defaultdefault标记后的语句序列执行;标记后的语句序列执行;32322.6.1 2.6.1 条件分支语句条件分支语句( (续续) ) c)c)若若switchswitch语句下面没有语句下面没有defaultdefault标记,则跳到标记,则跳到switchswitch语句的结尾。语句的结尾。注意:注意: a) a) 要求每个

25、语句序列的最后一条语句必须是要求每个语句序列的最后一条语句必须是breakbreak语句,语句,但是有一个情况例外:如果某个但是有一个情况例外:如果某个casecase块为空,则会从这块为空,则会从这个个casecase块直接跳到下一个块直接跳到下一个casecase块上。块上。 b) b) 如果如果casecase后有语句,则此后有语句,则此casecase的顺序怎么放都无所谓,的顺序怎么放都无所谓,甚至可以将甚至可以将defaultdefault子句放到最上面。因此,子句放到最上面。因此, 在一个在一个switchswitch中,不能有相同的两个中,不能有相同的两个casecase标记。标

26、记。 3333例例. .使用使用switchswitch语句,完成对成绩等级的评定语句,完成对成绩等级的评定 using System;using System;namespace SwitchExamplenamespace SwitchExample public class Program public class Program public static void Main() public static void Main() Console.Write( Console.Write(请输入成绩:请输入成绩:);); / /从键盘接收一行字符从键盘接收一行字符 string str

27、 = Console.ReadLine();string str = Console.ReadLine(); / /转换为整型,注意此语句可能会产生异常,一般需要异常处转换为整型,注意此语句可能会产生异常,一般需要异常处理理 int i = Int32.Parse(str.Trim(); /int i = Int32.Parse(str.Trim(); /或者或者int.Parse(int.Parse() )或者或者Convert.ToInt32 (Convert.ToInt32 () ) if (i 100 | i 100 | i 0) Console.WriteLine( Console.

28、WriteLine(成绩不在成绩不在0-1000-100范围内范围内);); 3434 elseelse switch (i / 10) / switch (i / 10) /整除整除 case 10: case 10: Console.Write( Console.Write(满分,满分,);); goto case 9; goto case 9; case 9: case 9: Console.WriteLine( Console.WriteLine(优秀优秀);); break; break; case 8: case 8: case 7: case 7: Console.WriteLi

29、ne( Console.WriteLine(良好良好);); break; break; case 6: case 6: Console.WriteLine( Console.WriteLine(及格及格);); break; break; default: default: Console.WriteLine( Console.WriteLine(不及格不及格);); break; break; Console.ReadLine(); Console.ReadLine(); 35352.6.2 2.6.2 循环语句循环语句u 包括:包括: forfor语句语句 whilewhile语句语句

30、do-whiledo-while语句语句 foreachforeach语句,用于对集合、数组进行操作。语句,用于对集合、数组进行操作。 36362.6.2 2.6.2 循环语句(续)循环语句(续)forfor语句语句一般形式:一般形式:for (for (初始值初始值; ;循环条件循环条件; ;循环控制循环控制) ) 语句序列语句序列 3737例例. .使用使用forfor语句控制循环体语句控制循环体 public static void Main() public static void Main() Console.Clear(); Console.Clear(); Console.Bac

31、kgroundColor = ConsoleColor.Blue; Console.BackgroundColor = ConsoleColor.Blue; Console.ForegroundColor = ConsoleColor.Red; Console.ForegroundColor = ConsoleColor.Red; Console.Beep(); Console.Beep(); for (int i = 1; i 10; i += 2) for (int i = 1; i 10; i += 2) Console.SetCursorPosition(40 - i / 2, i);

32、 Console.SetCursorPosition(40 - i / 2, i); for (int j = 0; j i; j+)for (int j = 0; j i; j+) Console.Write( Console.Write(* *);); Console.WriteLine(); Console.WriteLine(); Console.ReadLine(); Console.ReadLine(); 38382.6.2 2.6.2 循环语句(续)循环语句(续)whilewhile语句语句一般形式:一般形式: while (while (条件条件) ) 语句序列语句序列 循环体

33、内的程序可能会执行多次,也可能一次也不执行。循环体内的程序可能会执行多次,也可能一次也不执行。39392.6.2 2.6.2 循环语句(续)循环语句(续)do-whiledo-while一般形式:一般形式: dodo 语句序列语句序列 while (while (条件条件);); 循环体内的程序至少会执行一次,然后再判断条件是否为循环体内的程序至少会执行一次,然后再判断条件是否为truetrue,如果条件为,如果条件为truetrue,则继续循环。,则继续循环。40402.6.2 2.6.2 循环语句循环语句( (续续) )u foreachforeach语句语句 foreachforeach

34、语句用于逐个提取集合中的元素,并对集合语句用于逐个提取集合中的元素,并对集合中每个元素执行语句序列中操作的场合。一般形式为:中每个元素执行语句序列中操作的场合。一般形式为: foreachforeach ( ( 类型类型 标识符标识符 in in 表达式表达式 ) ) 语句序列语句序列 注意:循环变量是一个只读型的局部变量。注意:循环变量是一个只读型的局部变量。41412.6.2 2.6.2 循环语句循环语句( (续续) )判断下列语句是否正确判断下列语句是否正确, ,并说明原因并说明原因 int myInt=1,2,3;int myInt=1,2,3; foreach(int test in

35、 myInt) foreach(int test in myInt) test+; test+; Console.WriteLine(test); Console.WriteLine(test); 循环变量是一个只读型的局部变量,循环体内不能改变它的值42422.6.3 2.6.3 跳转语句跳转语句u 1.break1.break语句语句 功能:功能:退出最近的封闭退出最近的封闭switchswitch、whilewhile、do-do-whilewhile、forfor或或foreachforeach语句。语句。 格式:格式: break;break;4343【例例】循环接收和输出键盘输入的

36、每一行的值,当接收的循环接收和输出键盘输入的每一行的值,当接收的内容为空字符串时退出。内容为空字符串时退出。 using System;using System;namespace BreakExamplenamespace BreakExample public class Program public class Program public static void Main() public static void Main() for (; ; ) for (; ; ) Console.Write( Console.Write(请输入一个字符串(直接回车退出)请输入一个字符串(直接回车

37、退出):);:); string s = Console.ReadLine();string s = Console.ReadLine(); if (s = ) break; if (s = ) break; Console.WriteLine( Console.WriteLine(你输入的是你输入的是: 0., s);: 0., s); Console.ReadLine(); Console.ReadLine(); 44442.6.3 2.6.3 跳转语句跳转语句 ( (续续) )u 2.continue 2.continue语句语句 功能:功能:将控制传递给下一个将控制传递给下一个whil

38、ewhile、do-whiledo-while、forfor或或foreachforeach,继续执行下一次循环。,继续执行下一次循环。 格式:格式: continue ;continue ;45452.6.3 2.6.3 跳转语句跳转语句 ( (续续) )u 3.goto 3.goto语句语句仅在下面两种情况下才可能会使用仅在下面两种情况下才可能会使用gotogoto语句:语句:(1 1)用于)用于switchswitch语句中从一个语句中从一个casecase标签转到另一个标签转到另一个casecase标标签处。签处。(2 2)用于直接退出到多重嵌套循环的外部。)用于直接退出到多重嵌套循环

39、的外部。46462.6.3 2.6.3 跳转语句跳转语句 ( (续续) )u 4.return 4.return语句语句 功能:功能:将控制返回到出现将控制返回到出现returnreturn语句的函数成语句的函数成员的调用方。员的调用方。 格式:格式: return return 表达式表达式; 其中表达式为可选项,如果该函数成员的返回其中表达式为可选项,如果该函数成员的返回类型不为类型不为nullnull,则,则returnreturn语句必须使用表达式返回这语句必须使用表达式返回这个类型的值,否则个类型的值,否则returnreturn语句不能使用表达式。语句不能使用表达式。47472.6

40、.4 2.6.4 异常处理异常处理 1.try-catch 1.try-catch语句语句trytry 语句序列语句序列 catchcatch(异常类型(异常类型 标识符)标识符) 异常处理异常处理 在程序运行正常的时候,执行在程序运行正常的时候,执行trytry块内的程序。如果块内的程序。如果trytry块中块中出现了异常,程序就转移到出现了异常,程序就转移到catchcatch块中执行。块中执行。 48482.6.4 2.6.4 异常处理异常处理 ( (续续) ) 2.try-catch-finally 2.try-catch-finally语句语句trytry 语句序列语句序列 catc

41、hcatch(异常类型(异常类型 标识符)标识符) 异常处理异常处理 finallyfinally 语句序列语句序列 49493.throw3.throw语句语句 格式:格式:throw throw 表达式表达式; 抛出表达式的值。抛出表达式的值。 注意表达式类型必须是注意表达式类型必须是System.ExceptionSystem.Exception或从或从System.ExceptionSystem.Exception派生的类的类型。派生的类的类型。 throwthrow也可以不带表达式,不带表达式的也可以不带表达式,不带表达式的throwthrow语句语句只能用在只能用在catchcat

42、ch块中,在这种情况下,它重新抛出当前正块中,在这种情况下,它重新抛出当前正在由在由catchcatch块处理的异常。块处理的异常。 2.6.4 2.6.4 异常处理异常处理 ( (续续) )5050例例. .异常处理异常处理 using System;using System;namespace TryCatchExamplenamespace TryCatchExample class Program class Program static void F() static void F() try try G(); G(); catch (Exception err) catch (Ex

43、ception err) Console.WriteLine( Console.WriteLine(方法方法F F中捕获到中捕获到: + : + err.Message); err.Message); 5151 / / 重新抛出当前正在由重新抛出当前正在由catch catch 块处理的异常块处理的异常errerr throw; throw; static void G() static void G() throw new Exception( throw new Exception(方法方法G G中抛出的异常。中抛出的异常。);); static void Main() static void Main() try try F(); F(); catch (Exception err) catch (Exception err) Console.WriteLine( Console.WriteLine(方法方法MainMain中捕获到中捕获到: + : + err.Message);err.Message); Console.ReadLine(); Console.ReadLine(); 5252作业:作业:P41 P41 习题习

温馨提示

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

评论

0/150

提交评论