版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据类型与流程控制第一页,共六十页,编辑于2023年,星期六2.1数据类型C#数据类型分为两类:值类型和引用类型。
值类型:包括简单类型、枚举类型、结构类型、可空类型。
引用类型:包括类、接口、数组、委托。
一般把引用类型的变量称为对象。第二页,共六十页,编辑于2023年,星期六值类型与引用类型区别堆栈堆56ij实际数据12345Hobj图中i和j为值类型变量,obj为引用类型变量值类型的变量保存的是变量的值;引用类型的变量保存的是数据的引用地址。第三页,共六十页,编辑于2023年,星期六(1)考虑如下代码:inti=5;intj=6;intk=i;i=7;问k的值是多少?(2)假设类A有实例Obj,Obj1,执行如下代码Obj.age=10;Obj1=Obj;Obj1.age=12;问此时Obj.age的值是多少?值类型与引用类型区别第四页,共六十页,编辑于2023年,星期六值类型和引用类型的区别
特性值类型引用类型变量中保存的内容实际数据指向实际数据的引用指针内存空间配置堆栈(Stack)受管制的堆(ManagedHeap)内存需求较少较多执行效率较快较慢内存释放时间点执行超过定义变量的作用域时由垃圾回收机制负责回收第五页,共六十页,编辑于2023年,星期六2.1.2整型
C#提供了八种整型(即计算机组成原理中的“定点数”):
sbyte:1字节有符号
byte:1字节无符号
short:2字节有符号
ushort:2字节无符号
int:4字节有符号,最常用
uint:4字节无符号
long:8字节有符号
ulong:8字节无符号
第六页,共六十页,编辑于2023年,星期六2.1.3浮点类型
float:4字节浮点数,常用。例如:35.0fdouble:8字节浮点数,常用。例如:2.7E+23decimal:16字节浮点数,特殊的浮点数,精度高,适用于金融、货币等需要高精度数值的领域。其类型指定符为M(或m)。
例如:decimaly=9999999999999999999999999m;float和double的浮点数格式与计算机组成原理介绍的IEEE754规定的格式相同第七页,共六十页,编辑于2023年,星期六2.1.4布尔型
用bool表示,bool类型只有两个值true和false。例如:
boolisExist=false;boolb=(i>0&&i<10);注意
if(i)j+=10;//错误
if(j=15)j+=10;//错误
第八页,共六十页,编辑于2023年,星期六2.1.5字符型与字符串类型
char型,为单个Unicode字符,字符型常量必须用单引号引起来。例如:charch=’a’;如果是字符串(单个字符的组合),对应的类型为string。string类型的常量用双引号将字符串引起来。例如:stringstr=“hello”;char和string类型的常量均可以使用转义符。第九页,共六十页,编辑于2023年,星期六2.2不同数据类型之间的转换
有两种转换方式:隐式转换与显式转换;如果是不同值类型之间的转换,可以使用Convert类提供的静态方法。第十页,共六十页,编辑于2023年,星期六2.2.1隐式转换和显式转换隐式转换:系统默认的,不需要加以声明就可以进行的转换。从低精度、小范围的数据类型转换为高精度、大范围的数据类型,可以用隐式转换。例如:
intk=1;longi=2;i=k;//隐式转换第十一页,共六十页,编辑于2023年,星期六2.2.1隐式转换和显式转换显式转换:也称为强制转换。用户必须明确地指定转换的类型。例如:longk=5000;inti=(int)k;
所有的隐式转换也都可以采用显式转换的形式来表示。如:inti=10;longj=(long)i;将大范围类型的数据转换为小范围类型的数据的时候,属于显式转换,另外还必须特别谨慎,因为此时有丢失数据的危险。第十二页,共六十页,编辑于2023年,星期六例题下面声明了一些数值类型的变量:
shortsvalue;intivalue;uintuvalue;longlvalue;doubledvalue;floatfvalue;在对各个变量赋过初值之后,试分析下面哪些转换是正确的,哪些是错误的,并写出解决办法。
1)svalue=uvalue;
错误;svalue=(short)uvalue;
2)lvalue=svalue;
正确
3)fvalue
=dvalue;
错误;fvalue=(float)dvalue;
4)lvalue
=dvalue;
错误;lvalue=(long)dvalue;第十三页,共六十页,编辑于2023年,星期六2.2.2装箱与拆箱Object类型:所有其他引用类型的基类。装箱:将值类型转换为object类型
inti=123;objecto=i;拆箱:显式地将object类型转换为值类型
inti=123;Objectbox=i;//装箱操作
intk=(int)box;//拆箱操作装箱和拆箱是互逆的过程,但是必须要注意,装箱和拆箱必须满足类型兼容的原则。
第十四页,共六十页,编辑于2023年,星期六2.3常量和变量C#中提供2种类型的常量:使用const关键字声明
const常量是在编译时设置其值并且永远不能更改其值的字段,在对程序进行编译的时候,编译器会把所有const常量全部替换为常数。constintPI=3.14;使用readonly关键字声明
readonly关键字在程序运行期间只能初始化“一次”的字段,可以在声明语句中初始化该字段,也可以在构造函数中初始化该字段。初始化以后,用readonly声明的字段的值就不能再更改。readonlystringb;publicForm1(){b=“bbb”;}第十五页,共六十页,编辑于2023年,星期六2.3.1常量二者区别:readonly常量运行时初始化,const常量编译时初始化。const常量只能在声明中赋值,readonly常量既可以在声明中赋值,也可以在构造函数中赋值。第十六页,共六十页,编辑于2023年,星期六2.3.2变量变量用来表示一个数值、一个字符串值或者一个类的对象。变量存储的值可能会发生更改,但变量名称保持不变。C#定义了7类变量,分别是:静态变量、实例变量、数组元素、值参数、引用参数、输出参数和局部变量。classA{publicstaticintx;inty;voidF(int[]v,inta,refintb,outintc){inti=1;c=a+b++;}}第十七页,共六十页,编辑于2023年,星期六2.3.2变量声明变量举例:inta=100; //声明一个整型变量a,并赋初值为100也可以采用先定义、后赋值的方式,例如:inta; //声明一个整型变量aa=100; //为整型变量a赋值为100另外,也可以把几个变量声明和初始化用一条语句完成,各个变量之间用逗号分隔,例如:inta=100,b,c=200,d;//声明整型变量a、b、c、d,并将a赋值100,c赋值200第十八页,共六十页,编辑于2023年,星期六2.3.3匿名类型的变量匿名类型的变量就是程序员不必指定“局部”变量的类型,统统用var来表示类型即可。在LINQ表达式或者foreach语句中,使用匿名类型的变量比较方便。匿名类型仍然属于强类型,只不过判断具体类型的工作由编译器完成。具体内容到LINQ一节再仔细讲解。第十九页,共六十页,编辑于2023年,星期六2.4运算符和表达式1.运算符C#提供了3大类运算符:一元运算符:带有一个操作数的运算符称为“一元”运算符,例如,i++。二元运算符:带有两个操作数的运算符称为“二元”运算符,例如,x+y。三元运算符:带有三个操作数的运算符称为“三元”运算符,在C#中,只存在1个三元运算符,即条件运算符“?:”。
例如:intz=3;
intx=(z==3)?2:3;常用运算符typeof:获取类型的System.Type
例如:System.Typetype=typeof(int);第二十页,共六十页,编辑于2023年,星期六2.4运算符和表达式is:检查对象是否与给定的类型兼容
例如:if(oisClass1){a=(Class1)o;}as
:xasT含义为返回类型为T的x。
例如:Class1c=basClass12.表达式C#的表达式与C++和Java类似。第二十一页,共六十页,编辑于2023年,星期六2.5控制台应用程序与格式化输出控制台(Console类)1.控制台输出Console.Write();
把各种类型的数据或对象转换成字符串写入标准输出流。Console.WriteLine();把各种类型的数据或对象转换成字符串写入标准输出流,与Write的区别在于,它还输出回车符和换行符(“\r\n”);第二十二页,共六十页,编辑于2023年,星期六2.5控制台应用程序与格式化输出2.控制台输入Console.ReadKey();
标准输入流读取用户按下的字符或功能键。
例如:
ConsoleKeyInfo
c=Console.ReadKey();Console.ReadLine();从标准输入流读取一行字符。
例如:strings=Console.ReadLine();第二十三页,共六十页,编辑于2023年,星期六3.字符串的格式化输出字符串格式化:Console类的Write或WriteLine方法;String.Format方法中均可以规定输出字符串的格式。格式输出的一般形式为
{N[,M][:格式码]}其中,[]:表示其中的内容为可选项。N:从零开始的整数,表示第几个参数。M:可选整数,表示最小长度。若参数N的长度小于M,就用空格填充。如果M为负,则左对齐;如果M为正,则右对齐;如果未指定M,则默认为零。格式码:可选的格式化代码字符串。第二十四页,共六十页,编辑于2023年,星期六字符串的格式化输出对于字符串来说,可以直接利用格式化输出得到希望的格式,例如:strings=string.Format("{0,30}",'');//s得到的结果为30个空格的字符串strings1=string.Format("{0,-20}","15");//s1得到的结果为左对齐长度为20的字符串第二十五页,共六十页,编辑于2023年,星期六常用格式码及举例格式符含
义示例:(inti=10;doublex=10.5;)输出结果C将数字按照金额形式输出Console.WriteLine("{0:C}",i);Console.WriteLine("{0:C}",x);¥10.00¥10.50D输出十进制整数Console.WriteLine("{0:D}",i);Console.WriteLine("{0:D5}",i);1000010F小数点后固定位数Console.WriteLine("{0:F}",i);Console.WriteLine("{0:F4}",x);10.0010.500000占位符,如果数字位数不够指定的占位符位数,则左边补0至占位符位数;如果数字位数超过指定的占位符位数,则按照原数字实际位数原样输出。如果小数部分的位数超出指定的占位符位数,则多余的部分四舍五入。Console.WriteLine("{0:00000}",123);Console.WriteLine("{0:000}",12345);Console.WriteLine("{0:0000}",123.64);Console.WriteLine("{0:00.00}",123.6484);00123123450124123.65##占位符。对整数部分,去掉数字左边的无效0;对小数部分,按照四舍五入原则处理后,再去掉右边的无效0。如果这个数就是0,而又不想让它显示的时候,#占位符很有用Console.WriteLine("{0:####}",123);Console.WriteLine("{0:####}",123.64);Console.WriteLine("{0:####.###}",123.64);Console.WriteLine("{0:####.##}",0);Console.WriteLine("{0:####.##}",123.648);123124123.64123.65第二十六页,共六十页,编辑于2023年,星期六4.数字的格式化输出常用格式举例:strings=string.Format("{0:d6}",123);//s得到的结果为000123inti=123;doublej=123.45;strings1=string.Format("格式:d6,数{0},输出结果:{0:d6}",i);Console.WriteLine(s1);//结果为:格式d6,数123,输出结果:000123strings2=string.Format("i:{0,-7},j:{1,7}",i,j);Console.WriteLine(s2);//结果为:i:123,j:123.45第二十七页,共六十页,编辑于2023年,星期六4.数字的格式化输出strings3=string.Format("{0:###,###.00}",i);Console.WriteLine(s3);//结果12.00intnum=0;strings4=string.Format("{0:###}",num);Console.WriteLine(s4);//结果输出长度为0的空字符串其他格式化符使用举例格式:n4
数12345.6789 输出结果:12,345.6789格式:p
数0.126 输出结果:12.60%格式:p2
数12.34 输出结果:1,234.00%格式:5:d
数123 输出结果:123格式:7:f3
数123.45 输出结果:123.450第二十八页,共六十页,编辑于2023年,星期六5.日期和时间的格式化输出DateTimedt=newDateTime(2006,5,25);//yy表示年占两位,M表示月占1位,超出1位按实际位数//d表示日占1位,超出1位按实际位数stringstr=dt.ToString("yy.M.d");Console.WriteLine(str);//结果06.5.25//yyyy表示年占4位,M表示月占1位,超出1位按实际位数,其他按原字符输出stringstr1=dt.ToString("yyyy年M月");Console.WriteLine(str1);//结果2006年5月第二十九页,共六十页,编辑于2023年,星期六2.6C#流程控制语句流程控制的形式:顺序分支循环异常捕获如果一个逻辑块包含两条或两条以上的语句序列,必须使用大括号{}将语句括起来。第三十页,共六十页,编辑于2023年,星期六2.6.1条件分支语句if语句:根据布尔表达式的值(true或者false)选择要执行的语句序列,使用时要注意else应和最近的if语句匹配。三种形式:
if
if…else
if…elseif…else第三十一页,共六十页,编辑于2023年,星期六2.6.1条件分支语句【例题2-2】的关键点:从键盘读取一个字符串方法stringstr=Console.ReadLine();将字符串转换成整型数据intx=Convert.ToInt32(str);//适合于任何类型转换成整型数据intx=int.Parse(str);boolb=int.TryParse(str,outx);针对字符串类型intx=Int32.Parse(str);第三十二页,共六十页,编辑于2023年,星期六雅虎面试题:
一列数的规则如下:1、1、2、3、5、8、13、21、34...求第30位数是多少,用递归算法实现。
实现关键代码:
publicstaticintFoo(inti)
{
if(i<=0)
return0;
elseif(i>0&&i<=2)
return1;
else
returnFoo(i-1)+Foo(i-2);
}
第三十三页,共六十页,编辑于2023年,星期六2.6.1条件分支语句(续)switch语句也叫case语句switch语句与C++和Java均不完全相同。
switch语句常用形式为:switch(表达式){case常量表达式1:
语句序列1case常量表达式2:
语句序列2
……[default:语句序列]}第三十四页,共六十页,编辑于2023年,星期六2.6.1条件分支语句(续)常量表达式
switch条件表达式的值和每个case后的常量表达式可以是string、int、char、enum或其它值类型。语句序列每个case后的语句序列可以用大括号括起来,也可以不用,但是每个case块的最后一句一定要是break语句,或者是goto语句。switch语句的执行顺序
a)如果switch语句的条件表达式的值和某一个case标记后指定的值相等,则转到该case标记后的语句序列执行;
b)若switch语句的条件表达式的值和任何一个case标记后指定的值都不相等,则跳到default标记后的语句序列执行;第三十五页,共六十页,编辑于2023年,星期六2.6.1条件分支语句(续)
c)若switch语句下面没有default标记,则跳到switch语句的结尾。注意:
a)要求每个语句序列的最后一条语句必须是break语句,但是有一个情况例外:如果某个case块为空,则会从这个case块直接跳到下一个case块上。
b)如果case后有语句,则此case的顺序怎么放都无所谓,甚至可以将default子句放到最上面。因此,在一个switch中,不能有相同的两个case标记。
第三十六页,共六十页,编辑于2023年,星期六例.使用switch语句,完成对成绩等级的评定
usingSystem;namespaceSwitchExample{publicclassProgram{publicstaticvoidMain(){Console.Write("请输入成绩:");//从键盘接收一行字符
stringstr=Console.ReadLine();//转换为整型,注意此语句可能会产生异常,一般需要异常处理
inti=Int32.Parse(str.Trim());//或者int.Parse(…)或者Convert.ToInt32(…)if(i>100||i<0){Console.WriteLine("成绩不在0-100范围内");}第三十七页,共六十页,编辑于2023年,星期六
else{switch(i/10)//整除
{case10:Console.Write("满分,");gotocase9;case9:Console.WriteLine("优秀");break;case8:case7:Console.WriteLine("良好");break;case6:Console.WriteLine("及格");break;default:Console.WriteLine("不及格");break;}}Console.ReadLine();}}}第三十八页,共六十页,编辑于2023年,星期六2.6.2循环语句
循环
包括:
for语句
while语句
do-while语句
foreach语句,用于对集合、数组进行操作。第三十九页,共六十页,编辑于2023年,星期六2.6.2循环语句(续)1.for语句一般形式:for(初始值;循环条件;循环控制){
语句序列}注意:for(;;){}为无穷循环第四十页,共六十页,编辑于2023年,星期六例.使用for语句控制循环体
publicstaticvoidMain(){Console.Clear();Console.BackgroundColor=ConsoleColor.Blue;Console.ForegroundColor=ConsoleColor.Red;Console.Beep();for(inti=1;i<10;i+=2){Console.SetCursorPosition(40-i/2,i);
for(intj=0;j<i;j++){Console.Write("*");}}Console.WriteLine();Console.ReadLine();}
第四十一页,共六十页,编辑于2023年,星期六2.6.2循环语句(续)2.foreach语句
foreach语句用于逐个提取集合中的元素,并对集合中每个元素执行语句序列中操作的场合。一般形式为:foreach
(类型标识符in表达式){
语句序列}
注意:循环变量是一个只读型的局部变量。第四十二页,共六十页,编辑于2023年,星期六2.6.2循环语句(续)判断下列语句是否正确,并说明原因
int[]myInt={1,2,3};foreach(inttestinmyInt){test++;Console.WriteLine(test);}
不正确,因为test是只读变量不能更改它的值第四十三页,共六十页,编辑于2023年,星期六【例题2-5】SortedList<T,V>可以排序的泛型列表常用方法和属性:Add(key,value):添加一个键值对Keys属性:所有键的集合Values属性:所有的值的集合
第四十四页,共六十页,编辑于2023年,星期六2.6.2循环语句(续)3.while语句一般形式:
while(条件){
语句序列
}
循环体内的程序可能会执行多次,也可能一次也不执行。第四十五页,共六十页,编辑于2023年,星期六2.6.2循环语句(续)4.do-while一般形式:
do{
语句序列
}while(条件);
循环体内的程序至少会执行一次,然后再判断条件是否为true,如果条件为true,则继续循环。第四十六页,共六十页,编辑于2023年,星期六2.6.3跳转语句
1.break语句
功能:退出最近的封闭switch、while、do-while、for或foreach语句。
格式:
break;第四十七页,共六十页,编辑于2023年,星期六【例】循环接收和输出键盘输入的每一行的值,当接收的内容为空字符串时退出。
usingSystem;namespaceBreakExample{publicclassProgram{publicstaticvoidMain(){for(;;){Console.Write("请输入一个字符串(直接回车退出):");
strings=Console.ReadLine();if(s=="")break;Console.WriteLine("你输入的是:{0}.",s);}Console.ReadLine();}}}
第四十八页,共六十页,编辑于2023年,星期六2.6.3跳转语句(续)
2.continue语句
功能:将控制传递给下一个while、do-while、for或foreach,继续执行下一次循环。
格式:
continue;第四十九页,共六十页,编辑于2023年,星期六2.6.3跳转语句(续)
3.goto语句仅在下面两种情况下才可能会使用goto语句:(1)用于switch语句中从一个case标签转到另一个case标签处。(2)用于直接退出到多重嵌套循环的外部。第五十页,共六十页,编辑于2023年,星期六2.6.3跳转语句(续)4.return语句
功能:将控制返回到出现return语句的函数成员的调用方。
格式:return[表达式];其中表达式为可选项,如果该函数成员的返回类型不为null,则return语句必须使用表达式返回这个类型的值,否则return语句不能使用表达式。第五十一页,共六十页,编辑于2023年,星期六看例子,思考如下问题:(1)如何求字符串长度(2)如何求字符串中某个序号对应的字符(3)如何判断字符串中的某个字符是数字还是字母(4)如何截取字符串解答:假设str为字符串类型的变量(1)str.Length即得字符串的长度(2)str[index]//index为下标,取值为0-str.Length-1;(3)Char.IsDigit(ch)//判断是否为数字Char.IsLetter(ch)//判断是否为字母(4)str.SubString(startIndex,length)//从下标为startIndex开始截取长度为length的字符串【例2-9】循环与跳转综合举例第五十二页,共六十页,编辑于2023年,星期六2.6.4异常处理
1.try-catch语句try{
语句序列}catch(异常类型标识符){
异常处理}
在程序运行正常的时候,执行try块内的程序。如果try块中出现了异常,程序就转移到catch块中执行。
第五十三页,共六十页,编辑于2023年,星期六2.6.4异常处理(续)
2.try-catch-finally语句try{
语句序列}catch(异常类型标识符){
异常处理}finally{
语句序列}第五十四页,共六十页,编辑于2023年,星期六3.throw语句格式:
throw[表达式];
抛出表达式的值。注意表达式类型必须是System.Exception或从System.Exceptio
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二四年度园林工程苗木供应合同示范3篇
- 二零二五年度存量房买卖合同合同法解读与合同风险防范(2024版)3篇
- 2025年度船舶内部装修工程合同2篇
- 二零二五年度知识产权运营承包经营合同样本4篇
- 2025年度电商区块链技术应用服务合同12篇
- 二零二五年度油气储罐租赁与安全培训合同4篇
- 2025年出租车租赁公司车辆租赁与客户满意度调查合同4篇
- 2025年绿色环保型厂房中央空调系统安装及维护合同4篇
- 二零二五年度新能源储能系统租赁合同3篇
- 二零二四年绿色仓储环保改造合同
- 江苏省苏州市2024-2025学年高三上学期1月期末生物试题(有答案)
- 销售与销售目标管理制度
- 人教版(2025新版)七年级下册英语:寒假课内预习重点知识默写练习
- 2024年食品行业员工劳动合同标准文本
- 2025年第一次工地开工会议主要议程开工大吉模板
- 全屋整装售后保修合同模板
- 壁垒加筑未来可期:2024年短保面包行业白皮书
- 高中生物学科学推理能力测试
- GB/T 44423-2024近红外脑功能康复评估设备通用要求
- 2024-2030年中国减肥行业市场发展分析及发展趋势与投资研究报告
- 运动技能学习
评论
0/150
提交评论