版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章
选择结构和循环结构
3.1一个简单的选择结构程序3.2if语句——二分支选择语句3.3switch语句——多分支选择语句3.4一个简单的循环结构程序3.5while语句和do…while语句3.6for语句和foreach语句3.7跳转语句
本章内容【例3.1】
构造一个C#控制台应用程序,使之实现下列分段函数的功能:3.1一个简单的选择结构程序——分段函数的实现创建一个控制台应用程序PiecewiseFunction:3.1一个简单的选择结构程序——分段函数的实现3.1.1创建C#控制台应用程序运行该程序,从键盘上输入一个数值数据,如-3.14:
3.1一个简单的选择结构程序——分段函数的实现3.1.2选择结构解析如果x>0,则f=1如果x=0,则f=0如果x<0,则f=-1选择结构3.1一个简单的选择结构程序——分段函数的实现3.1.2选择结构解析(续)选择结构主要有:单入口双分支单入口三分支(如上面的if语句实现的选择结构)单入口多分支(三个或三个以上的分支)对于这些选择结构,除了可以利用if语句来实现以
外,还可以用switch语句来完成。3.2if语句——二分支选择语句为表述方便,我们将if语句分为三种类型:if…语句if…else…语句if…elseif…else…语句3.2if语句——二分支选择语句3.2.1if…语句if…语句是最简单的一种if语句,其语法格式如下:if(布尔表达式)语句块说明:该语句的作用是:如果括号中布尔表达式的值为true,则
执行后面的语句块(语句块是指放在大括号“{”和“}”之间
的语句序列),否则什么都不做。如果语句块仅由一条语句组成,那么大括号“{”和“}”可以
省略。“if(布尔表达式)”和“语句块”可以放在一行上,也可以分在
两行上。“if”后面括号中的表达式的返回值必须为布尔类型,即返回
true或false,这一点与C/C++不同;此外,关键字“if”后面
没有“then”。3.2if语句——二分支选择语句3.2.1if…语句(续)if…语句的流程图如下图所示。3.2if语句——二分支选择语句3.2.1if…语句(续)【例3.2】
从键盘上输入两个整数,然后输出较大的整数。经过该语句后x总是保存了它们当中的最大者3.2if语句——二分支选择语句3.2.2if…else…语句if…else…语句是一种二分支选择语句,其语法格式如下:if(布尔表达式)语句块1else语句块2说明:该语句的作用是:如果括号中布尔表达式的值为true,则执行后面的语句块1,否则执行语句2。也就是说,不管布尔表达式的值为true还是为false,语句块1和语句块2必有其中之一被执行。3.2if语句——二分支选择语句3.2.2if…else…语句(续)【例3.3】
编写一个窗体应用程序,使之能够对给定的实数进行四舍五入。创建C#窗体应用程序Rounding,界面如下图:3.2if语句——二分支选择语句3.2.2if…else…语句(续)双击“四舍五入”按钮,在生成的button1_Click函数中添加下列代码:在if语句中利用了int的强制数据转换功能:对浮点数向下取整,如3.14和3.54在进行int强制转换后都得到3。于是根据x-(int)x的差值来决定是“舍”还是“入”。在“舍”和“入”之间的选择正是利用了if…else…语句来实现。3.2if语句——二分支选择语句3.2.3if…elseif…else…语句if…elseif…else…语句的语法格式如下:if(布尔表达式1)语句块1elseif(布尔表达式2)语句块2…elseif(布尔表达式n)语句块nelse语句块n+1说明:该语句的作用是:先计算布尔表达式1,如果其值为true,则执行语句块1;否则计算布尔表达式2,如果布尔表达式2的值为true,则执行语句块2;…;否则计算布尔表达式n,如果布尔表达式n的值为true,则执行语句块n;否则(所有布尔表达式的值均为false)执行语句块n+1。一旦有语句块被执行,执行后程序都跳出整个if语句,而不再去计算其他表达式,更不会再执行其他语句块。默认情况下,else总是与前面最近的if相匹配。最后面的“else”和“语句块n+1”可以省略,要根据实际需要取舍。3.2if语句——二分支选择语句3.2.3if…elseif…else…语句(续)【例3.4】编写一个控制台应用程序,使之能够将学生成绩从百分制转化为等级制。创建控制台应用程序Grade:staticvoidMain(string[]args){
Console.Write("请输入分数:");doublescore=Convert.ToDouble(Console.ReadLine());stringgrade;if(score>100||score<0){
Console.Write("输入的分数不合法,请核查!");
Console.ReadLine();return;}
3.2if语句——二分支选择语句3.2.3if…elseif…else…语句(续)【例3.4】编写一个控制台应用程序,使之能够将学生成绩从百分制转化为等级制。if(score>=90)grade="优秀";elseif(score>=80)grade="良好";elseif(score>=70)grade="中等";elseif(score>=60)grade="及格";elsegrade="不及格";
Console.Write("成绩等级为:{0}!",grade);
Console.ReadLine();}利用了if…elseif…else…语句来实现成绩从百分制到等级制的转化3.3switch语句
——多分支选择语句switch语句的语法格式如下:switch(表达式){case常量表达式1:语句块1;break;case常量表达式2:语句块2;break;…case常量表达式n:语句块n;break;default:语句块n+1;break;}说明:switch语句的工作原理是:先计算“switch”后面的表达式的值,然后从上到下依次判断该值是否等于“case”后面的常量表达式的值,如果等于某个常量表达式的值,如等于常量表达式i的值,则执行对应的语句块i;执行语句块i后,如果碰到break语句,则跳出switch语句。表达式的类型必须是整型、字符型(char)、字符串型(string)或者枚举型以及能够隐士转换为上述类型的任何一种数据类型。表达式不能为浮点型;表达式的类型必须与常量表达式的类型相匹配。switch语句中的default部分可以省略。switch语句中,最后的break语句是不能省略的。3.3switch语句
——多分支选择语句【例3.5】
对于例3.4中关于将学生成绩从百分制转化为等级制的问题,也可以使用switch语句来解决。创建控制台应用程序Grade2:
staticvoidMain(string[]args){
Console.Write("请输入分数:");doublescore=Convert.ToDouble(Console.ReadLine());stringgrade;if(score>100||score<0){
Console.Write("输入的分数不合法,请核查!");
Console.ReadLine();return;}
3.3switch语句
——多分支选择语句switch((int)(score/10)){case10:case9:grade="优秀";break;case8:grade="良好";break;case7:grade="中等";break;case6:grade="及格";break;default:grade="不及格";break;}
Console.Write("成绩等级为:{0}!",grade);
Console.ReadLine();}switch语句
3.4一个简单的循环结构程序
——等差数列求和3.4.1创建C#控制台应用程序【例3.6】
构造一个C#控制台应用程序,使之能够计算下列等差数列的前n项之和,n从键盘输入:1,3,5,7,9,…创建控制台应用程序ArithProg:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceArithProg{classProgram{
3.4一个简单的循环结构程序
——等差数列求和3.4.1创建C#控制台应用程序staticvoidMain(string[]args){
Console.Write("n=");
intn=int.Parse(Console.ReadLine());
inti=1; //循环控制变量
intsum=0; //累加器
while(i<=n){sum=sum+(2*i-1);i++;}Console.Write("1+3+5+...+{0}={1}",2*n-1,sum);
Console.ReadLine();}}}3.4一个简单的循环结构程序
——等差数列求和3.4.2循环结构解析staticvoidMain(string[]args){
Console.Write("n=");
intn=int.Parse(Console.ReadLine());
inti=1;
intsum=0; //累加器
while(i<=n){sum=sum+(2*i-1);i++;}Console.Write("1+3+5+...+{0}={1}",2*n-1,sum);
Console.ReadLine();}}}while语句循环条件表达式
循环控制变量3.5while语句和do…while语句3.5.1while语句while语句属于当型循环语句,其语法格式如下:while(条件表达式)循环体{
语句序列;}说明:条件表达式的返回值必须布尔类型。该语句的功能是:先计算条件表达式的值,值为true时,会执行
循环体中的语句;然后再计算表达式的值,如果仍然为true,则
继续执行循环体中的语句;不断重复这个过程,直到条件表达式
的值为false时才退出while语句,执行while语句后面的语句。如果循环体由多条语句组成,则必须用大括号“{”和“}”将这些语
句括起来;如果仅由一条语句组成,则大括号可以省略。3.5while语句和do…while语句3.5.1while语句(续)【例3.7】
用while语句对下列无穷级数求和:分析:(1)该级数可以写成:,显然各项的分母构成
了一个等差数列,因此可以用循环语句来控制;(2)设定循环终止条件:计算机程序不可能真正求一个无穷级
数的和,而只能求其前面有限项的和。这样,循环的终止
条件可以设为求前面n项的和,或当某一项的值小于给定
的阀值。这里,我们取后者。3.5while语句和do…while语句3.5.1while语句(续)staticvoidMain(string[]args){doublet=2;
inti=1;doublesum=0;while(t>0.000001){t=1.0/i;sum=sum+t;i++;}Console.Write("1+1/2+1/3+...+1/{0}={1}",i-1,sum);
Console.ReadLine();}while语句循环控制变量(各项分母)累加器累加器3.5while语句和do…while语句3.5.2do…while语句do…while语句属于直到型循环语句,其语法格式如下:do循环体{
语句序列;}while(条件表达式)说明:功能:先无条件地执行一次循环体,再计算条件表达式的值,
如果其值为true,则继续执行循环体;然后再次计算条件表达式
的值,如果该值还是为true,则继续执行循环体,直到条件表达
式的值为false时才终止循环,执行do…while语句后面的语句。当条件表达式的值一开始就为false时,do…while语句会执行一
次循环体,而while语句则不会执行循环体。这是它们的区别。3.5while语句和do…while语句3.5.2do…while语句(续)【例3.8】
用do…while语句计算1~100之间所有整数的和。staticvoidMain(string[]args){
intn=100;
inti=1;
intsum=0; do{sum=sum+i;i++;}while(i<=n);Console.Write("1+2+3+...+{0}={1}",n,sum);
Console.ReadLine();}do…while语句3.6for语句和foreach语句3.6.1for语句for语句也使用频率非常高一种循环语句;多用于:在循环次数已经知道,或用于访问数组的情况;实际上,for语句的使用方法十分灵活,其功能也十分强大。可以说,凡是使用while语句的地方都可以使用for语句替代。3.6for语句和foreach语句3.6.1for语句(续)for语句的语法格式如下:for(表达式1;表达式2;表达式3)循环体{
语句序列;}说明:表达式1和表达式3可以是任意一种表达式,表达式2必须是布尔类型表
达式,或能够隐式转换为布尔类型的值。功能:先计算表达式1,然后计算表达式2,如果表达式2的值为false,
则退出该for循环,执行for语句后面的语句;如果表达式2的值为true,
则执行循环体中的语句,接着计算表达式3,然后又计算表达式2,如果
表达式2的值仍然为true,则重复上面执行循环体、计算表达式3的过
程,直到表达式2的值为false时才退出for循环。表达式1和表达式3可以省略,也可以根据需要将它们分别放在for语句之
前和for循环体内;表达式2一般不可省略,否则会导致死循环,除非循
环体中有break语句。3.6for语句和foreach语句3.6.1for语句(续)【例3.9】
从键盘输入由若干字符构成的一个字符串,用for语句统计字符串中大写英文字母、小写英文字母、数字字符和其他字符的个数。分析:大写英文字母和小写英文字母的ASCII码值分别分布在65~90和97~122,数字字符的分布在48~57。于是,结合if,我们就可以用for语句统计各类字符的个数。3.6for语句和foreach语句3.6.1for语句(续)staticvoidMain(string[]args){
int
lowerNum=0; //小写字母个数
int
upperNum=0; //大写字母个数
int
numeralNum=0; //数字个数
int
otherNum=0; //其他字符个数
stringline=Console.ReadLine();char[]chars=line.ToCharArray();
int
lineLen=chars.Length; //获取字符数组chars的长度
for(inti=0;i<lineLen;i++){
int
ascii=(int)chars[i]; //获取字符的ASCII码值
if(ascii>=65&&ascii<=90)upperNum++; //统计大写字母
elseif(ascii>=97&&ascii<=122)lowerNum++; //统计大写字母
elseif(ascii>=48&&ascii<=57)numeralNum++; //统计数字字符
elseotherNum++; //统计其他字符
}
Console.WriteLine("大写字母个数:{0}",upperNum);
Console.WriteLine("小写字母个数:{0}",lowerNum);
Console.WriteLine("数字字符个数:{0}",numeralNum);
Console.WriteLine("其他字符个数:{0}",otherNum);
Console.ReadLine();}do…while语句循环控制变量循环条件表达式3.6for语句和foreach语句3.6.2foreach语句foreach语句多用于:对于集合类型中的元素,有时候不在乎元素的下标,或者根本就没有下标时,foreach语句来处理这些元素就显得更为自然。foreach语句的语法格式如下:foreach(数据类型变量in集合表达式){
语句序列;}说明:作用:取出集合表达式中的每一个元素并保存到变量中,
每保存一次变量后执行一次循环体,集合表达式中有多少
个元素就有多少次变量保存和循环体执行操作。不能更改变量的值,只能引用。集合表达式的类型必须为集合类型3.6for语句和foreach语句3.6.2foreach语句(续)【例3.10】
将学生的记录信息(包括学号和姓名)保存到Hashtable类的实例中,然后用foreach语句筛选学号为奇数的学生。分析:Hashtable是命名空间System.Collections中的一个容器,它类似于数组(属于一种集合类型),但比数组功能强大得多。它支持任何类型的key/value键值对,可以对其进行元素添加和删除、数据清空等操作。3.6for语句和foreach语句3.6.2foreach语句(续)usingSystem.Collections;
//必须引入System.Collections命名空间,才能使用Hashtable类staticvoidMain(string[]args){
Hashtableht=newHashtable();//创建一个Hashtable实例
ht.Add(201001,"张赵刚");//在哈希表实例中添加学生记录
ht.Add(201002,"李斯");ht.Add(201003,"王智高");ht.Add(201004,"蒙恬");ht.Add(201005,"赵高");
Console.WriteLine("学号为奇数的学生:");
Console.WriteLine("------------------------");
Console.WriteLine("学号姓名");
foreach(int
stuidinht.Keys){if((stuid+1)%2==0)
Console.WriteLine(stuid+""+ht[stuid]);}
Console.ReadLine();}foreach语句3.7跳转语句3.7.1break语句和continue语句break语句是跳出循环体,终止循环语句continue语句结束本次循环而提前进入下一轮循环,整个循环语句仍在执行break语句和continue语句一般都是带条件的3.7跳转语句3.7.1break语句和continue语句【例3.11】break语句的应用举例:判断一个正整数是否为素数。分析:在数学上我们已经知道,如果正整数n不被区间(1,n)中的任何整数整除,则n是素数。因此,用循环结构依次检查(1,n)中的整数,一旦出现其中的整数整除n,则跳出循环结构,表明n不是素数;如果所有这样的整数都不整除n,则表明n是素数。3.7跳转语句3.7.1break语句和continue语句staticvoidMain(string[]args){strings;
Console.Write("n=");
intn=int.Parse(Console.ReadLine());
inti;
if(i==1)s="整数"+n.ToString()+"是素数!";elses="整数"+n.ToString()+"不是素数!";
Console.Write(s);
Console.ReadLine();}for(i=(int)System.Math.Sqrt(n);i>1;i--)if(n%i==0)break;
break语句for(i=n-1;i>1;i--)
if(n%i==0)break;数学上可以证明,如果
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗技术与医疗道德
- 2024至2030年中国平开纱窗行业投资前景及策略咨询研究报告
- 2024至2030年中国铝管编藤椅行业投资前景及策略咨询研究报告
- 2024至2030年中国自粘防水胶带数据监测研究报告
- 2024至2030年中国电半平坑扒炉数据监测研究报告
- 2024至2030年中国焦亚硫酸钠数据监测研究报告
- 2024至2030年中国导电滑车数据监测研究报告
- 2024至2030年中国吊挂式变频调速定量给料称行业投资前景及策略咨询研究报告
- 镇村干部培训课件
- 酒店餐饮服务员招聘协议书
- 2024-2030年中国洁具行业发展趋势及竞争力策略分析报告
- 2024年时政热点知识竞赛试卷及答案(共三套)
- 2024北京初三一模语文汇编:基础知识综合
- 通信业务协议
- 2024年中国反病毒邮件网关市场调查研究报告
- 部编版道德与法治三年级上册第8课《安全记心上》精美课件
- 2024安徽省劳动合同书
- 2025年高考物理复习策略
- 哮喘中医分型
- 《数字媒体技术导论》全套教学课件
- 海南乐东黎族自治县事业单位定向公开招聘驻县部队随军家属工作人员5人(第1号)(高频重点复习提升训练)共500题附带答案详解
评论
0/150
提交评论