版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章流程控制语句与函数5.1控制程序流程5.2使用选择语句5.3使用循环语句5.4使用goto语句5.5嵌套使用流程控制语句5.6函数5.7常用内部函数5.8小结15.1控制程序流程控制程序流程的方法很多,主要有如下3种。选择语句:如同考试中的单选题目,选择执行了某条语句,另一条就不会再执行。循环语句:在需要将一个表达式进行多次重复运算时,可以使用循环语句,指定其循环次数或者界定其退出循环的条件。goto语句:即标记语句,使程序自动跳到标记语句处执行,标记语句执行完毕又直接回到调用标记语句处。需要注意的是,在程序中最好不使用goto语句,因为该语句会使得程序代码可读性很差。25.2使用选择语句5.2.1if语句用if语句实现单分支选择结构
if(表达式)语句;语句中的表达式通常用于表示条件,应为关系表达式或逻辑表达式。语句只是一条语句,如果在条件满足时需要执行多条语句,应使用花括号({})括起来,使之成为语句块。“(表达式)”中的括号不能省略。35.2.1if语句用if语句实现双分支选择结构
if(表达式)语句1;else语句2;55.2.1if语句用if语句实现多分支选择结构if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;……else语句n;6staticvoidMain(string[]args){doublex;doubley=0;Strings;Regexr=newRegex("^[0-9]{1,}.[0-9]{1,}$");Console.WriteLine("请输入一个浮点数");s=Console.ReadLine();if(r.IsMatch(s)){x=Convert.ToDouble(s);if((x-(int)x)>=0.5){y=(int)x+1;}elsey=(int)x;Console.WriteLine("{0}经过四舍五入后的结果是:{1}",x,y);}elseConsole.WriteLine("您输入的不是一个浮点数");Console.ReadLine();}75.2.2switch语句switch表达式的类型为sbyte、byte、short、ushort、int、uint、long、ulong、char、string、枚举或用户自定义类型。每个case分支中的常量表达式必须能隐式转换为switch表达式的类型,且常量表达式的值不能相同,从而保证分支选择的唯一性。如果某个分支有多条语句,可以用花括号括起来,也可以不加花括号。default分支可有可无,但是每个switch语句最多只能有一个default分支。当default语句缺省时,如果switch后面的表达式值与任意常量表达式值不相等,将不执行任何语句,直接退出switch语句。各分支语句中的break不可省略,否则将会出现某些错误。使用switch语句时一定要注意,case后面必须是常量表达式,以冒号结束而不是分号。95.2.2switch语句示例:staticvoidMain(string[]args){doublescore;charclass1;inti;Console.WriteLine("请输入你的成绩:");score=Convert.ToDouble(Console.ReadLine());i=(int)score/10;switch(i){case10:case9:class1='A';break;case8:class1='B';break;case7:class1='C';break;case6:class1='D';break;default:class1='E';break;}Console.WriteLine("你的成绩等级为:{0}",class1);}105.2.3switch语句的控制类型switch语句的控制可以按case语句的排列先后顺序进行,也可以通过跳转语句来实现。示例:实现switch语句的跳转语句。
staticvoidMain(string[]args){intdays=0;intmonth=3;switch(month){case1:case3:case5:case7:case8:case10:case12:days=31;break;case2:days=28;break;case4:case6:case9:case11:days=30;break;default:days=0;break;}Console.WriteLine("thismonthhas{0}days",days);}115.3使用循环语句5.3.1while语句while语句是用来实现循环的语句,该类循环先测试循环条件再执行循环体,按照不同条件执行循环体部分零次或多次。它的语法形式如下。while(表达式)循环体部分;135.3.1while语句注意:循环体如果包含一条以上的语句,应以花括号括起来作为复合语句。在循环体中,通常应包含改变循环条件表达式值的语句,否则便会造成无限循环。由于先判断条件,可能出现第一次测试条件时,表达式的值就为false。此种情况下循环体将一次也不执行,又称“允许0次循环”。145.3.1while语句示例:
classTestWhile{staticvoidMain(string[]args){intnumber=1,sum=0;
while(number<=10){sum+=number;number++;}Console.WriteLine("thesumis{0}",sum);Console.Read();}}执行上述代码,运行结果为:thesumis55。155.3.2do语句示例:
classTestWhile{staticvoidMain(string[]args){intnumber=1,sum=0;
do{sum+=number;number++;}while(number<=10);Console.WriteLine("thesumis{0}",sum);Console.Read();}}执行上述代码,运行结果为:thesumis55。17使用do循环,求输入任意大于0整数的阶乘。输入一个整数,将各位数字反转后输出。Console.write()输出时不换行。185.3.3for语句for(表达式1;表达式2;表达式3)语句;195.3.4foreach语句foreach(类型标识符in表达式)嵌入语句;示例:staticvoidMain(string[]args){int[]list={10,20,30,40,50,60};//初始数组
foreach(intiinlist)Console.Write("{0,-5}",i);
Console.Read();}215.3.5break语句和continue语句break语句用于跳出包含它的switch、while、do、for、foreach语句。如果break不是在switch、while、do、for、foreach语句块中,将发生编译错误。当switch、while、do、for、foreach语句相互嵌套时,break语句只是跳出直接包含它的语句块。225.3.5break语句和continue语句
classTestBreak{staticvoidMain(string[]args){for(inti=0;i<10;i++){Console.Write("enteraword:");strings=Console.ReadLine();if(s=="end")
break;
//跳出最内层的循环Console.WriteLine("youentered:{0}",s);}Console.Read();}}235.3.5break语句和continue语句示例staticvoidMain(string[]args){for(inti=0;i<10;i++){Console.Write("enteraword:");strings=Console.ReadLine();if(s=="end")continue;Console.WriteLine("youentered:{0}",s);}Console.Read();}255.4使用goto语句
goto语句是除选择语句、循环语句之外的控制程序流程的语句,常用于将程序流程转移出嵌套范围。goto语句的常见用法为gotolable语句。其中,lable为一个标签,其语法形式为:标签1:265.5嵌套使用流程控制语句循环结构的嵌套示例:staticvoidMain(string[]args){inti=1,a=0;for(;i<=5;i++){do{i++;a++;}while(i<3);i++;}Console.WriteLine("a的值为{0},i的值为{1}",a,i);Console.ReadLine();}295.6函数5.6.1函数的定义与使用函数在使用之前必须先定义,函数定义的形式如下。函数修饰符数据类型标识符函数名(形式参数说明列表){变量、数组的定义语句;其他可执行部分}函数的返回值是需要返回给主调函数的处理结果,由return语句给出。对于无返回值的函数,其类型标识符为void,不需要return语句305.6.1函数的定义与使用示例:编写一个函数,用于求任意两个整数之间所有数的平方和。classProgram{privatestaticintpfh(intx,inty){inti,sum=0;for(i=x;i<=y;i++)sum=sum+i*i;return(sum);}}315.6.1函数的定义与使用函数的使用在类中的某个函数中,调用本类中由“函数名”指定的函数,其语法形式如下:函数名([实际参数列表])调用由另一个类的对象指定的函数,其语法形式如下:对象名.方法名([实际参数列表])只能调用非本类的另一个类的静态方法,其语法形式如下:类名.方法名([实际参数列表])325.6.2函数的参数传递参数传递中的类型转化
示例:classProgram{staticfloatSqr(floatk){return(k*k);}staticvoidMain(string[]args){inty;floatyy;y=6;yy=Sqr(y);Console.WriteLine("{0}的平方是{1}",y,yy);Console.ReadLine();}}335.6.2函数的参数传递参数传递的类型:值传递时参数的语法形式如下:参数类型参数名引用传递时参数的语法形式如下:ref参数类型参数名输出传递时参数的语法形式如下:out参数类型参数名参数数组:使用params关键字声明参数,参数个数为不确定。345.6.2函数的参数传递值传递参数示例:classProgram{staticvoidswap(inta,intb){inti;i=a;a=b;b=i;}staticvoidMain(string[]args){intx,y;
Console.WriteLine("请输入x和y的值:");x=Convert.ToInt32(Console.ReadLine());y=Convert.ToInt32(Console.ReadLine());
swap(x,y);
Console.WriteLine("转换后x和y的值为:{0},{1}",x,y);
Console.ReadLine();}}355.6.2函数的参数传递引用传递参数示例:classProgram{staticvoidswap(ref
inta,refintb){inti;i=a;a=b;b=i;}staticvoidMain(string[]args){intx,y;
Console.WriteLine("请输入x和y的值:");x=Convert.ToInt32(Console.ReadLine());y=Convert.ToInt32(Console.ReadLine());
sx,refy);
Console.WriteLine("转换后x和y的值为:{0},{1}",x,y);
Console.ReadLine();}}365.6.2函数的参数传递输出传递参数示例:classProgram{staticvoidswap(out
inta,outintb){
inti;a=Convert.ToInt32(Console.ReadLine());b=Convert.ToInt32(Console.ReadLine());i=a;a=b;b=i;}staticvoidMain(string[]args){
intx,y;
sx,outy);
Console.WriteLine("转换后x和y的值为:{0},{1}",x,y);
Console.ReadLine();}}37Ref与out的区别:out关键字会导致参数通过引用来传递,这与ref关键字类似。不同之处在于:(1)ref传进去的参数必须在调用前初始化,而out不必,因为out的函数会先清空变量,即使变量已经赋值。
inti;SomeMethod(refi);//语法错误SomeMethod(outi);//通过38Ref与out的区别:(2)ref传进去的参数在函数内部可以直接使用,而out不可。publicvoidSomeMethod(refinti)
{
intj=i;//通过
//...
}publicvoidSomeMethod(outinti)
{
intj=i;//语法错误
}(3)ref传进去的参数在函数内部可以不被修改,但out必须在离开函数体前进行赋值。39usingsystem;
classtestapp
{
staticvoidouttest(outintx,outinty)
{//离开这个函数前,必须对x和y赋值,否则会报错。//y=x;
//上面这行会报错,因为使用了out后,x和y都清空了,需要重新赋值,即使调用函数前赋过值也不行x=1;
y=2;
}
staticvoidreftest(refintx,refinty)
{
y=x;
}40publicstaticvoidmain()
{
inta,b;
//out使用前,变量可以不赋值
outtest(outa,outb);
console.writeline("a={0};b={1}",a,b);
intc=11,d=22;
outtest(outc,outd);
console.writeline("c={0};d={1}",c,d);
intm,n;
//reftest(refm,refn);
//上面这行会出错,ref使用前,变量必须赋值into=11,p=22;
reftest(refo,refp);
console.writeline("o={0};p={1}",o,p);
}41(4)ref:
当需要通过调用某函数来改变实参变量的值时,使用ref。out:
主要是为了一个方法能返回两个以上的结果。Ref与out的区别:42注:※对于值型变量作为方法参数时,可以有如上所述三种情况:1.没有ref和out修饰(直接传值,不能改变实参)2.使用ref修饰(引用传递,输入,可以改变实参)3.使用out修饰(引用传递,输出,可以改变实参)※对于引用类型的变量的三种情况:1.没有ref和out修饰(引用传递,可以改变实参)2.使用ref修饰(与1类似。但如果在被调用函数里面把传过来的类=null,我们就可以看出区别了)3.使用out修饰(引用传递,可以改变实参)Ref与out的区别:435.6.2函数的参数传递参数数组
有时需要传递的参数个数不确定,例如求几个数的平均值。可以使用param关键字声明参数的个数为不确定。
445.6.2函数的参数传递参数数组示例:classProgram{publicstaticfloatAverage(paramslong[]array){longtotal,i;for(i=0,total=0;i<array.Length;i++){total=total+array[i];}return((float)total/array.Length);}staticvoidMain(string[]args){floatx=Average(1,2,3,5);Console.WriteLine("1、2、3、5的平均值为{0}",x);
x=Average(10,20,35,52);Console.WriteLine("10、20、35、52的平均值为{0}",x);Console.ReadLine();}}455.6.3内联函数对于一些功能简单、规模较小又使用频繁的函数,CLR会做出是否使用内联函数的判断。内联函数不在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处,这样就节省了参数传递、控制转移等消耗。注意:在何处内联代码完全由CLR判断得出,无法使用诸如C++中inline的关键字来控制哪些方法是内联的。465.6.4函数重载函数重载允许一个类中有同名的函数存在,即一个类中可以存在两个以上的函数名称相同。重载函数的形参必须不同,可以个数不同或者类型不同。示例:intadd(intx,inty);intadd(inta,intb); //错误!编译器不以形参名来区分函数intadd(intx,inty);voidadd(intx,inty); //错误!编译器不以返回值来区分函数475.6.4函数重载示例:classProgram{publicstaticintAdd(inti,intj){returni+j;}publicstaticstringAdd(strings1,strings2){returns1+s2;}publicstaticlongAdd(longx){returnx+5;}staticvoidMain(string[]args){Console.WriteLine(Add(1,2));Console.WriteLine(Add("1","2"));Console.WriteLine(Add(10));Console.ReadLine();}}485.7常用内部函数5.7.1随机函数介绍在C#中要生成随机数需要使用Random类。该类的主要方法是Next方法,它生成一个介于两个整数之间的随机数,其语法形式如下:publicvirtualintNext([intminValue,intmaxValue]);495.7.1随机函数介绍示例:
classProgram{staticvoidMain(string[]args){
Randomop1=newRandom(10);Randomop2=newRandom();intresult;result=op1.Next(10,99)+op2.Next(0,9);Console.WriteLine(result);Console.Read();}}由于结果是随机值,所以这里不再描述运行结果,505.7.2格式化函数介绍.NET为处理数字、日期以及字符串的格式化提供了WriteLine方法、Format方法和ToString方法。通过WriteLine方法和Format方法可对多个变量进行格式化,ToString方法只能对一个变量进行格式化。对于使用WriteLine方法和Format方法格式化字符串,规定格式的一般语法形式如下。{N,[M][:格式码精度]}515.7.2格式化函数介绍{N,[M][:格式码精度]}[]:表示其中的内容为可选项。N:表示要格式化的参数的索引。M:可选参数,表示格式化后的参数所占的宽度。如果M是负数,那么格式化后的值就是左对齐的;如果M是正数,那么格式化后的值是右对齐的;如果未指定M,则默认为零。格式码:可选的格式化代码字符串。精度:格式化输出的有效位数或小数位数。52//部分数值格式输出方式的例子usingSystem;classFormating{publicstaticvoidMain(){Console.WriteLine("在宽度为的空间里靠左对齐:{0,-10}",99);Console.WriteLine("在宽度为的空间里靠右对齐:{0,10}",99);Console.WriteLine("在宽度为的空间里靠左对齐:{0,-10}","LLL");Console.WriteLine("在宽度为的空间里靠右对齐:{0,10}","RRR");Console.WriteLine("货币-{0:C}{1:C4}",88.8,-888.8);Console.WriteLine("10进制整数-{0:D5}",88);Console.WriteLine("科学计数-{0:E}",888.8);Console.WriteLine("固定小数点-{0:F3}",888.8888);Console.WriteLine("浮点数-{0:G}",888.8888);Console.WriteLine("数字格式-{0:N}",8888888.8);Console.WriteLine("16进制格式-{0:X4}",88);Console.ReadLine();}}intval1=0;intval2=val1;val2=123;stringval3="一个占位符例子";Console.WriteLine("Values:{0},{1},这是{2}",val1,val2,val3);{N,[M][:格式码精度]}535.7.3日期函数介绍用于处理时间和日期的对象为DateTime结构和TimeSpan类。DateTime结构用于表示日期和时间,表示范围在0001年1月1日午夜00:00:00到9999年12月31日晚上11:59:59之间的日期和时间,最小时间单位等于100纳秒。TimeSpan类可以表示一个时间间隔,表示范围可以在Int64.MinValue到Int64.MaxValue之间。545.7.3日期函数介绍DateTime结构的常用方法如下:AddYears、AddMonths、AddDays、AddHours、AddMinutes、AddSeconds方法,用于将指定的年、月、日、时、分、秒加到DateTime上。Substract方法:日期相减。IsLeapYear方法:判断是否为闰年。true为闰年,false为非闰年。ToLongDateString和ToLongTimeString方法:把DateTime转换为字符串,且以长格式表示日期或时间。ToShortDateString和ToShortTimeString方法:把DateTime转换为字符串,且以短格式表示日期或时间。==、!=、<、>、>=、<=运算符:用于比较日期。+、-运算符:用于日期的加、减。555.7.4数学运算函数介绍Math类属于命名空间System,包含很多数学函数。常用方法如下:Abs方法:返回值指定数字的绝对值。例如,代码Math
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 04版电工工具租赁合同3篇
- 二零二四年餐饮加盟合同:加盟商培训与技术支持规定
- 2024年度电商合作标的为农产品直销平台的合同
- 二零二四年度常州住宅小区电动车充电设施建设合同
- 代理招标合同范本完整版
- 抵押房产证合同范本
- 二零二四年度车间设备更新与淘汰策略合同
- 二零二四年度建筑工程设计合同:关于某公司设计并施工办公楼项目
- 二零二四年租赁期限内的租赁合同3篇
- 二零二四年实验室厂房设计与施工合同
- 医院感染管理质量控制评价内容及考核标准(各临床科室)
- 乡村医生聘用合同书模板
- PI形式发票模板
- 闭合导线计算表(带公式)
- 九宫数独题目200题(附答案)
- JGJ-130-2011建筑施工扣件式钢管脚手架安全技术规范(新版)
- 关节痛的诊治思路PPT医学课件
- 《论语》名句英文选译
- 人教版高中英语单词表必修二
- 设计阶段监理细则
- 大学物理_电磁场
评论
0/150
提交评论