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

下载本文档

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

文档简介

1、1 1第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 数据类型uC#C#数据类型分为两类:值类型和引用类型。数据类型分为两类:值类型和引用类型。 值类型值类型:值类型变量直接保存变量的值值类型变量直接保存变量的值 包括简单类型、枚举类型、结构类型、可空类型。包括简单类型、枚举类型、结构类型、可空类型。 引用类型引用类型

2、:引用类型变量保存的是数据的引用地引用类型变量保存的是数据的引用地址。址。 包括类、接口、数组、委托。包括类、接口、数组、委托。 一般把引用类型的变量称为对象。一般把引用类型的变量称为对象。3 3类型一览表类型一览表 类类 别别 描描 述述值类型值类型简单类型简单类型有符号整型:有符号整型:sbyte,short,int,longsbyte,short,int,long无符号整型:无符号整型:byte,ushort,uint,ulongbyte,ushort,uint,ulongUnicodeUnicode字符:字符:charcharIEEEIEEE浮点型:浮点型:float,doublefl

3、oat,double高精度小数:高精度小数:decimaldecimal布尔型:布尔型:boolbool枚举类型枚举类型用户自定义类型用户自定义类型enumenum E E结构类型结构类型用户自定义类型用户自定义类型struct Sstruct S引用类型引用类型类类型类类型所有其他类型的最终基类:所有其他类型的最终基类:objectobjectUnicodeUnicode字符串:字符串:stringstring用户自定义类型用户自定义类型class Cclass C接口类型接口类型用户自定义类型用户自定义类型interface Iinterface I数组类型数组类型单维与多维数组,例如,单

4、维与多维数组,例如,intint与与int,int,委托类型委托类型用户自定义类型用户自定义类型delegate T D()delegate T D()4 4值类型与引用类型区别 12345H堆栈(stack)堆(heap)56ijCHI实际数据12345H地址objobj5 5值类型和引用类型的区别 特性特性值类型值类型引用类型引用类型变量中保存的内容变量中保存的内容实际数据实际数据指向实际数据的引用指针指向实际数据的引用指针内存空间配置内存空间配置堆栈(堆栈(StackStack)受管制的堆(受管制的堆(Managed HeaManaged Heap p)内存需求内存需求较少较少较多较多执

5、行效率执行效率较快较快较慢较慢内存释放时间点内存释放时间点执行超过定义变量执行超过定义变量的作用域时的作用域时由垃圾回收机制负责回收由垃圾回收机制负责回收可以为可以为nullnull不可以不可以可以可以6 62.1.2 整型 uC#C#提供了八种整型(即计算机组成原理中的提供了八种整型(即计算机组成原理中的“定点数定点数”):): sbytesbyte:1 1字节有符号字节有符号 bytebyte: 1 1字节无符号字节无符号 shortshort: 2 2字节有符号字节有符号 ushortushort:2 2字节无符号字节无符号 intint: 4 4字节有符号,最常用字节有符号,最常用 u

6、intuint: 4 4字节无符号字节无符号 longlong: 8 8字节有符号字节有符号 ulongulong:8 8 字节无符号字节无符号各类型表示的数据类型见表各类型表示的数据类型见表2-32-37 72.1.3 浮点类型 floatfloat: 4 4字节浮点数,常用。例如:字节浮点数,常用。例如:35.0f35.0fdoubledouble: 8 8字节浮点数,常用。例如:字节浮点数,常用。例如:2.7E+232.7E+23decimaldecimal:1616字节浮点数,特殊的浮点数,精度高字节浮点数,特殊的浮点数,精度高 适用于金融、货币等需要高精度数值的领域。适用于金融、货币

7、等需要高精度数值的领域。 其类型指定符为其类型指定符为M M(或(或m m)。)。 例如:例如: decimal y = 9999999999999999999999999m; decimal y = 9999999999999999999999999m; floatfloat和和doubledouble的浮点数格式与计算机组成原理介绍的的浮点数格式与计算机组成原理介绍的IEEE754 IEEE754 规定的格式相同规定的格式相同 各类型表示的数据类型见表各类型表示的数据类型见表2-42-48 82.1.4 布尔型 u 用用boolbool表示,表示,boolbool类型只有两个值类型只有两个

8、值truetrue和和falsefalse。 例如:例如: bool isExist = false;bool isExist = false; bool b = (i0 & i0 & i-intint类型类型 public static int Parse(string)。 如果 string 为空,则抛出 ArgumentNullException 异常; 如果 string 格式不正确,则抛出 FormatException 异常; 如果 string 的值小于 MinValue 或大于 MaxValue 的数字,则抛出 OverflowException 异常。 str

9、ing stringType = 12345; int intType = (int)stringType; /错误,string 类型不能直接转换为 int 类型 int intType = Int32.Parse(stringType); /正确,123451414u 显式转换显式转换4 4 使用使用TryParseTryParse()()方法方法实现值类型之间的转换实现值类型之间的转换。Int32.TryParse()不抛异常,会返回true或false来说明解析是否成功,如果解析错误,调用方将会得到0值。例如:字符串例如:字符串-intint类型类型int i;string str=1

10、23456;Int32.TryParse(str,out i);/将str的值强制转换成数字,并赋给 iu toStringtoString()()转换转换 当把值类型转换成字符串类型时,可以直接调用值类型的方法toString()进行转换,另外toString还可以将结果转换成相应的进制形式. /转换为十六进制形式(X可以换为小写,代表对应的a-f的大小写) int a = 256; string b =a.ToString(X);15152.2.2 值类型与object类型之间的转换-装箱与拆箱u C#C#的类型系统是统一的,这样任何类型的值都能够被处理成的类型系统是统一的,这样任何类型的

11、值都能够被处理成对象。对象。u C#C#中每一个类型直接或者间接从中每一个类型直接或者间接从objectobject类继承而来,并且类继承而来,并且obobjectject是所有类型最终的基类。是所有类型最终的基类。u ObjectObject类型:类型:SystemSystem命名空间下有一个命名空间下有一个ObjectObject类,该类是,类,该类是,所有其他引用类型的基类。所有其他引用类型的基类。u 考察:考察:String s=(10).ToString();String s=(10).ToString(); C# C#如何调用数值如何调用数值1010上的方法上的方法ToString

12、()? ToString()? 【值类型与object类型之间的转换】值类型与object类型之间的转换,可以使用装箱与拆箱技术实现。1616u装箱装箱(boxing)(boxing):将值类型转换为:将值类型转换为objectobject类型类型 int i=5;int i=5; object o = i; / object o = i; /含义:在堆栈中创建一个对象含义:在堆栈中创建一个对象o o,该,该对象引用了堆(对象引用了堆(heapheap)上)上intint类型的数值,而该数值是赋给类型的数值,而该数值是赋给变量变量i i的数值的备份。的数值的备份。o o xxxxH堆栈堆5i5

13、xxxxH1717u拆箱(拆箱(unboxingunboxing):将):将objectobject类型转换为值类型类型转换为值类型 int k = (int)o;int k = (int)o;uusing System;using System;class Testclass Test static void Main() static void Main() int i=123; int i=123; object o=i; / object o=i; /装箱装箱 int j=(int)o; int j=(int)o; / /取消装箱取消装箱,拆箱拆箱 1818引用类型的显式类型转换 as

14、运算符用于执行引用类型的显式类型转换。 如果要转换的类型和指定的类型兼容,转换就会成功进行;如果类型不兼容,as运算符就会返回值null。 举例如下:object obj1=a string;object obj2=5;string str1= obj1 as string;/ str1=a string;string str2= obj2 as string;/str2=null; 注:as运算符允许在一步中进行安全的类型转换,不需要先使用is运算符测试类型,再执行转换。19192.3 常量和变量C#C#中提供中提供2 2种类型的常量:种类型的常量:uconstconst关键字关键字: :静

15、态常量(静态常量(Compile-time constantCompile-time constant) constconst常量是在编译时设置其值并且永远不能更改其值的字段,常量是在编译时设置其值并且永远不能更改其值的字段,在对程序进行编译的时候,编译器会把所有在对程序进行编译的时候,编译器会把所有constconst常量全部替常量全部替换为常数。换为常数。u使用使用readonlyreadonly关键字关键字: :动态常量(动态常量(Runtime constantRuntime constant) 在程序运行期间只能初始化在程序运行期间只能初始化“一次一次”的字段,可以在声明语的字段,可

16、以在声明语句中初始化该字段,也可以在构造函数中初始化该字段。初句中初始化该字段,也可以在构造函数中初始化该字段。初始化以后,用始化以后,用readonlyreadonly声明的字段的值就不能再更改。声明的字段的值就不能再更改。二者区别:二者区别:u readonlyreadonly常量运行时初始化,常量运行时初始化,constconst常量编译时初始化。常量编译时初始化。u constconst常量只能在声明中赋值,常量只能在声明中赋值,readonlyreadonly常量既可以在声明中赋常量既可以在声明中赋值,也可以在构造函数中赋值。值,也可以在构造函数中赋值。2020示例示例public

17、const int MAX_VALUE = 10;public const int MAX_VALUE = 10;示例示例public readonly int MAX_VALUE = 10;public readonly int MAX_VALUE = 10;2121变量 变量用来表示一个数值、一个字符串值或者一个类的对象。变量用来表示一个数值、一个字符串值或者一个类的对象。变量存储的值可能会发生更改,但变量名称保持不变。变量存储的值可能会发生更改,但变量名称保持不变。 C#C#是大小写敏感的是大小写敏感的,即大写和小写字母认为是不同的字母。,即大写和小写字母认为是不同的字母。例如变量名例如

18、变量名somethingsomething,SomethingSomething,SOMETHINGSOMETHING都是不同的名都是不同的名字。字。 命名变量名要遵守如下的规则命名变量名要遵守如下的规则:(1 1)不能是)不能是C#C#关键字。关键字。(2 2)第一个字符必须是字母或下划线。)第一个字符必须是字母或下划线。(3 3)不要太长,一般不超过)不要太长,一般不超过3131个字符为宜。个字符为宜。(4 4)不能以数字开头)不能以数字开头(5 5)中间不能有空格)中间不能有空格(6 6)变量名中不能包含)变量名中不能包含“ “.;,”+-”.;,”+-”之类的特殊符号。实际上,变量名中

19、之类的特殊符号。实际上,变量名中除了能使用除了能使用2626个英文大小写字母和数字外,只能使用下划线个英文大小写字母和数字外,只能使用下划线“_ _”。(7 7)变量名不要与)变量名不要与C+C+中的库函数名、类名和对象名相同。中的库函数名、类名和对象名相同。(8 8)有意义)有意义2222C#标识符命名规则Pascal Pascal 大小写大小写 将标识符的首字母和后面连接的每个单词的首字母都大将标识符的首字母和后面连接的每个单词的首字母都大写。可以对三字符或更多字符的标识符使用写。可以对三字符或更多字符的标识符使用Pascal Pascal 大小写大小写。例如:。例如: BackColor

20、 BackColorCamel Camel 大小写大小写标识符的首字母小写,而每个后面连接的单词的首字母都大写标识符的首字母小写,而每个后面连接的单词的首字母都大写。例如:。例如: backColor backColor2323变量 C#C#定义了定义了7 7类变量,分别是:静态变量、实例变量、数组元素、类变量,分别是:静态变量、实例变量、数组元素、值参数、引用参数、输出参数和局部变量。值参数、引用参数、输出参数和局部变量。class Aclass A public static int x; public static int x; int y; int y; void F(int v, i

21、nt a, ref int b, out int c) void F(int v, int a, ref int b, out int c) int i = 1; int i = 1; c = a + b+; c = a + b+; 2424变量 声明变量举例:声明变量举例: int a = 100; int a = 100;/声明一个整型变量声明一个整型变量a a,并赋初值为,并赋初值为100100 也可以采用先定义、后赋值的方式,例如:也可以采用先定义、后赋值的方式,例如: int a; int a; /声明一个整型变量声明一个整型变量a a a = 100; a = 100; /为整型变

22、量为整型变量a a赋值为赋值为100100 另外,也可以把几个变量声明和初始化用一条语句完成,另外,也可以把几个变量声明和初始化用一条语句完成,各个变量之间用逗号分隔,例如:各个变量之间用逗号分隔,例如: int int a = 100a = 100, b, , b, c = 200c = 200,d; /,d; /声明整型变量声明整型变量a a、b b、c c、d d,并将,并将a a赋值赋值100100,c c赋值赋值2002002525匿名类型的变量 匿名类型的变量就是程序员不必指定匿名类型的变量就是程序员不必指定“局部局部”变量的类型,变量的类型,统统用统统用varvar来表示类型来表

23、示类型即可。即可。var v = new Amount = 108, Message = Hello ; var v = new Amount = 108, Message = Hello ; / / 一个匿名对象一个匿名对象Console.WriteLine(v.Amount + v.Message);Console.WriteLine(v.Amount + v.Message); 在在LINQLINQ表达式或者表达式或者foreachforeach语句中,使用匿名类型的变量比较语句中,使用匿名类型的变量比较方便。方便。var productQuery = from prod in prod

24、uctsvar productQuery = from prod in products select new prod.Color, prod.Price ; select new prod.Color, prod.Price ;foreach (var v in productQuery)foreach (var v in productQuery) Console.WriteLine(Color=0, Price=1, v.Color, v.Price) Console.WriteLine(Color=0, Price=1, v.Color, v.Price) 26262.4 运算符和表

25、达式C#C#提供了提供了3 3大类运算符:大类运算符: 一元运算符:带有一个操作数的运算符称为一元运算符:带有一个操作数的运算符称为“一元一元”运算符,运算符,例如,例如,i+i+。 二元运算符:带有两个操作数的运算符称为二元运算符:带有两个操作数的运算符称为“二元二元”运算符,运算符,例如,例如,x + yx + y。 三元运算符:带有三个操作数的运算符称为三元运算符:带有三个操作数的运算符称为“三元三元”运算符,运算符,在在C#C#中,只存在中,只存在1 1个三元运算符,即条件运算符个三元运算符,即条件运算符“?:?:”。 C#C#的常用运算符及其含义如的常用运算符及其含义如表表2-62-

26、6. . C#C#的常用运算符的优先级如的常用运算符的优先级如表表2-72-7. .27272.4 运算符和表达式表达式表达式 C#C#的表达式与的表达式与C+C+和和JavaJava类似。类似。 如:如: x+yx+y (x+yz) & (xz) & (x 100 | i 100 | i 0) Console.WriteLine( Console.WriteLine(成绩不在成绩不在0-1000-100范围内范围内);); 4545 elseelse switch (i / 10) / switch (i / 10) /整除整除 case 10: case 10: Conso

27、le.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.WriteLine( Console.WriteLine(良好良好);); break; break; case 6: case 6: Console.WriteLine( Console.WriteLine(及格及格);); break; bre

28、ak; default: default: Console.WriteLine( Console.WriteLine(不及格不及格);); break; break; Console.ReadLine(); Console.ReadLine(); 46462.6.2 循环语句u 包括:包括: forfor语句语句 whilewhile语句语句 do-whiledo-while语句语句 foreachforeach语句,用于对集合、数组进行操作。语句,用于对集合、数组进行操作。 47472.6.2 循环语句(续)forfor语句语句一般形式:一般形式:for (for (初始值初始值; ;循环条

29、件循环条件; ;循环控制循环控制) ) 语句序列语句序列 4848例2-4.使用for语句控制循环体 public static void Main() public static void Main() Console.Clear(); Console.Clear(); Console.BackgroundColor = ConsoleColor.Blue; Console.BackgroundColor = ConsoleColor.Blue; Console.ForegroundColor = ConsoleColor.Red; Console.ForegroundColor = Con

30、soleColor.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); 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(); Co

31、nsole.WriteLine(); Console.ReadLine(); Console.ReadLine(); 49492.6.2 循环语句(续)u foreachforeach语句语句 foreachforeach语句用于逐个提取集合中的元素,并对集合语句用于逐个提取集合中的元素,并对集合中每个元素执行语句序列中操作的场合。一般形式为:中每个元素执行语句序列中操作的场合。一般形式为: foreachforeach ( ( 类型类型 标识符标识符 in in 表达式表达式 ) ) 语句序列语句序列 注意注意(1 1)循环变量是一个只读型的局部变量循环变量是一个只读型的局部变量。 (2 2

32、)循环变量类型必须和表达式所包含的集合元素循环变量类型必须和表达式所包含的集合元素的类型一致的类型一致50502.6.2 循环语句(续)判断下列语句是否正确判断下列语句是否正确, ,并说明原因:并说明原因: int myInt=1,2,3;int myInt=1,2,3; foreach(float test in myInt) foreach(float test in myInt) test+; test+; Console.WriteLine(test); Console.WriteLine(test); 问题问题1 1:循环变量在循环体中被赋值:循环变量在循环体中被赋值test+;te

33、st+;(循环变量是一个只读型的局部循环变量是一个只读型的局部变量变量)问题问题2 2:float test float test (循环变量类型必须和表达式所包含的节元素类型一致)(循环变量类型必须和表达式所包含的节元素类型一致)例题例题2-52-551512.6.2 循环语句(续)whilewhile语句语句一般形式:一般形式: while (while (条件条件) ) 语句序列语句序列 循环体内的程序可能会执行多次,也可能一次也不执行。循环体内的程序可能会执行多次,也可能一次也不执行。例题例题2-62-652522.6.2 循环语句(续)do-whiledo-while一般形式:一般形

34、式: dodo 语句序列语句序列 while (while (条件条件);); 循环体内的程序至少会执行一次,然后再判断条件是否为循环体内的程序至少会执行一次,然后再判断条件是否为truetrue,如果条件为如果条件为truetrue,则继续循环,则继续循环。53532.6.3 跳转语句u1.break1.break语句语句 功能:功能:退出最近的封闭退出最近的封闭switchswitch、whilewhile、dodo- -whilewhile、forfor或或foreachforeach语句。语句。 格式:格式: break;break;5454【例】循环接收和输出键盘输入的每一行的值,当

35、接收的内容为空字符串时退出。 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(请输入一个字符串(直接回车退出)请输入一个字符串(直接回车退出):);:); string s = Console.ReadLine();

36、string s = Console.ReadLine(); if (s = ) break; if (s = ) break; Console.WriteLine( Console.WriteLine(你输入的是你输入的是: 0., s);: 0., s); Console.ReadLine(); Console.ReadLine(); 55552.6.3 跳转语句 (续)u2.continue2.continue语句语句 功能:功能:将控制传递给下一个将控制传递给下一个whilewhile、do-whiledo-while、forfor或或foreachforeach,继续执行下一次循环。

37、,继续执行下一次循环。 格式:格式: continue ;continue ;56562.6.3 跳转语句 (续)u3.goto3.goto语句语句仅在下面两种情况下才可能会使用仅在下面两种情况下才可能会使用gotogoto语句:语句:(1 1)用于)用于switchswitch语句中从一个语句中从一个casecase标签转到另一个标签转到另一个casecase标标签处。签处。(2 2)用于直接退出到多重嵌套循环的外部。)用于直接退出到多重嵌套循环的外部。不建议使用不建议使用gotogoto语句!语句!57572.6.3 跳转语句 (续)u4.return4.return语句语句 功能:功能:

38、将控制返回到出现将控制返回到出现returnreturn语句的函数成语句的函数成员的调用方。员的调用方。 格式:格式: return return 表达式表达式; 其中表达式为可选项,如果该函数成员的返回其中表达式为可选项,如果该函数成员的返回类型不为类型不为nullnull,则,则returnreturn语句必须使用表达式返回这语句必须使用表达式返回这个类型的值,否则个类型的值,否则returnreturn语句不能使用表达式。语句不能使用表达式。5858【例例2-92-9】循环与跳转综合举例循环与跳转综合举例 。59592.6.4 异常处理 异常可以以两种不同的方式引发:异常可以以两种不同的

39、方式引发:C#C#语句和表达式执行过程中激发了某个异常的条件,语句和表达式执行过程中激发了某个异常的条件,使得操作无法正常结束,从而引发异常。例如整数除使得操作无法正常结束,从而引发异常。例如整数除法操作分母为零时将抛出一个异常。法操作分母为零时将抛出一个异常。throwthrow语句无条件、即时的抛出异常。语句无条件、即时的抛出异常。trytry语句提供了一种机制来捕捉执行过程中发生的语句提供了一种机制来捕捉执行过程中发生的异常。以下是它的三种可能的形式:异常。以下是它的三种可能的形式:try-catchtry-catchtry-finallytry-finallytry-catch-fin

40、allytry-catch-finally60602.6.4 异常处理 1.try-catch1.try-catch语句语句trytry 语句序列语句序列 catchcatch(异常类型(异常类型 标识符)标识符) 异常处理异常处理 在程序运行正常的时候,执行在程序运行正常的时候,执行trytry块内的程序。如果块内的程序。如果trytry块中块中出现了异常,程序就转移到出现了异常,程序就转移到catchcatch块中执行。块中执行。 61612.6.4 异常处理 (续) 2.try-catch-finally 2.try-catch-finally语句语句trytry 语句序列语句序列 catchcatch(异常类型(异常类型 标识符)标识符) 异常处理异常处理 finally finally /无论是否有异常,均会执行;即使无论是否有异常

温馨提示

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

评论

0/150

提交评论