第3章_结构化程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3. 嵌套的if语句
语法形式: if ( <条件1> ) <语句1> else if ( <条件2> )< 语句2> else if ( <条件3> )< 语句3> ┇ else <语句n>
真 条件1 假 真 条件2 假 语句2 语句1
真
条件n-1
语句n-1
假 语句n
ห้องสมุดไป่ตู้
图3-3 if语句嵌套的执行过程
3.2.2 switch语句
语法形式: switch (<表达式>) { case <常量表达式1>:<语句序列1> case <常量表达式2>:<语句序列2> …… case <常量表达式n>:<语句序列n> default:<语句序列n+1> }
【例3-4】 用switch语句编写程序,根据输入的成绩输出 相应的A、B、C、D和E等级,其中A:90100;B:80-89;C:70-79;D:60-69;E :0-59。
switch…case 的其他特性
• 各个 case 标签不必连续,也不必按特定顺 序排列 • default 标签可位于 switch…case 结构中的任 意位置 • default 标签不是必选的,但使用 default 标 签是一个良好的编程习惯
• 每两个 case 标签之间的语句数不限
switch…case 的其他特性
{ Console.WriteLine(“{0}”,digit++); }
(3) 在while循环中,如果第一次测试时的循环条件为False, 则while循环体将不执行。
【例3-5】 利用while语句求,计算 1+2+…+100的值,并打印计算结果。
static void Main(string[] args) { int Sum,i; Sum = 0; i = 1; while (i <= 100) { Sum += i; i++; } Console.WriteLine("Sum is " + Sum); }
课堂作业
• 指出下列程序中的错误: using System; class Test { static void main { int k; Console.Write("请输入整数k的值:"); k=int.Parse(Console.ReadLine( )); if (k<=10 ) k=k+1; else if (10<k<=20) k-=10; else if(k>30) k=k*2-20; Console.WriteLine("k={0} ", k) } }
课后作业
1. 使用switch语句完成一个自动售货机程序,判断 所选3种(mocca, latte, cappuccino)咖啡的种类,并 根据不同咖啡显示需要投入的金额(这3中分别 需要投入金额为10元,8元,12元)。 2. 现有三种规格的饮料:大杯,5元;中杯,4元, 小杯,3元。请编写一程序,根据你所选择的规 格饮料,显示相应的费用。
注意: (1) 循环体可以由任何一种合法的C# 语句组成,如果循环 体中又包含循环体语句,则构成嵌套循环体。 (2) 在循环体中必须包括能改变循环条件表达式值的语句, 以使循环结束。当然,也可以把这个语句的作用放在条件表达 式中实现。 例如:显示0~9数字的程序段。
//在循环体中改变循环控制变量之值 int digit=0; while(digit<=9) { Console.WriteLine(“{0}”,digit); ++digit; }
方法 2: 嵌套在if子句中。 static void Main(string[] args) { int x, y; Console.WriteLine(“please input x:”); string s = Console.ReadLine(); x = int.Parse(s); if(x !=0 ) 内 嵌 if (x<0) y = -1; if…else else y = 1; else y=0; Console.WriteLine(“x={0}, y={1}”,x,y); }
(2) for循环的三个表达式可以任意缺省,如果“条件”缺省就约定它 的值是true。但不管哪个表达式缺省,其相应的分号“;”不能缺省 。 static void Main(string[] args)
{
int Sum,i; for(Sum=0,i=1;i<=100;i++) Sum += i; Console.WriteLine("Sum is " + Sum); for(Sum=0,i=1;i<=100;Sum+=i,i++) ; //循环体是一个空语句 Console.WriteLine("Sum is " + Sum); }
static void Main(string[] args) { int score,temp=-1; Console.Writeline("请输入一个学生成绩:"); string str=Console.Readline(); score = int.Parse(str); if(score<0 || score>100) { Console.Writeline ("成绩输入有误");return;} temp=score/10; switch(temp) { case 10: case 9: Console.Writeline ("A");break; case 8: Console.Writeline ("B");break; case 7: Console.Writeline ("C");break; case 6: Console.Writeline ("D");break; default: Console.Writeline ("E");break; } }
【例3-3】已知符号函数: -1 (x<0) y= 0 (x=0) 1 (x>0) 要求编一程序,输入一个x值,输出y 值。
方法 1: 嵌套在else子句中 static void Main(string[] args) { int x, y; Console.WriteLine(“please input x:”); string s = Console.ReadLine(); x = int.Parse(s); if(x<0) y= -1; else if(x= =0) y=0; 内 嵌 else y=1; if…else Console.WriteLine(“x={0}, y={1}”,x,y); }
3.3 循环语句
3.3.1 while语句 语法形式:
while(<表达式>) { <循环体语句> }
如果表达式为真(true), 则执行循环体语句。然 后重新计算表达式的值, 并再次判断;如果表达 式的值为假(false), 则退出循环结构。
while 循环
• while 循环反复执行指定的语句,直到指定 的条件为真 • break 语句可用于退出循环 • continue 语句可用于跳过当前循环并开始 下一循环
3.3.3 for 语句
语法形式:
初始表达式是设置循环 C#的for循环是循环语句中最具特色的。它功能较强、灵活 控制变量的初值;条件 多变和使用广泛。 是bool类型,作为循环 控制条件;变量增值表 达式是设置循环控制变 量的增值(正负均可)。
for(<初始表达式>;<条件>;<变量增值表达式>) { <循环体语句> }
for循环的一些变化特点:
(1)for循环语句的“初始表达式”和“变量增值表达式”可 引入逗号运算符“,”,这样可以对若干个变量赋初值或 增值。 static void Main(string[] args) { int Sum,i; for(Sum=0,i=1;i<=100;i++) Sum += i; Console.WriteLine("Sum is " + Sum); for(Sum=0,i=1;i<=100;Sum+=i,i++) ; //循环体是一个空语句 Console.WriteLine("Sum is " + Sum); }
第3章 结构化程序设计
本章要点
理解三种基本结构的概念 明确选择结构和循环结构的条件构成 掌握跳转语句的执行流程和使用方法 较熟练地使用C#的三种基本结构,进行程 序设计
3.1 赋值语句
3.1.1 简单赋值语句
<变量名> = <表达式>;
3.1.2 复合赋值语句
<变量> <双目运算符> = <表达式>; 等价于 <变量> = <变量> <双目运算符> <表达式>;
static void Main(string[] args) { int Sum,i; Sum = 0; i = 1; do { Sum += i; i++; }while(i<=100); Console.WriteLine("Sum is " + Sum); Console.Read(); }
3.2 选择语句
3.2.1 if语句
1.if语句 语法形式: 如果“条件” 为“真”,则 执行“语句”
if (<条件> ) <语句>
假(0) 条件 真(非0) 语句
其执行过程如图3-1所示
图3-1 if语句的执行过程
例如: if(x<0) x = -x;
//判定合法性
//取x的绝对值
if(a+b>c && b+c >a && a+c>b) { //求三角形面积 p = (a+b+c)/2; s = Math.sqrt(p*(p-a)*(p-b)*(p-c)); }
(2) for循环的三个表达式可以任意缺省,如果“条件”缺省就约定它 的值是true。但不管哪个表达式缺省,其相应的分号“;”不能缺省 。 static void Main(string[] args) { int Sum,i; for(Sum=0,i=1;i<=100; ) //变量增值表达式缺省 Sum += i++; Console.WriteLine("Sum is " + Sum); for(Sum=0,i=1; ;Sum+=i,i++) //条件缺省, 约定为true if(i>100)break; //但条件满足时,break语句跳出循环 Console.WriteLine("Sum is " + Sum); Sum=0;i=1; for( ; ; ) //三个表达式都缺省 { Sum+=i++; if(i>100)break; //这种情况一般都会用if语句来设置跳出循环 } Console.WriteLine("Sum is " + Sum); }
• switch表达式必须是sbyte、byte、ushort、uint、 long、ulong、char和sting(或基于这些类型之一的 一个enum)类型(或隐式地转移到这些类型) • 必须对每个case语句提供一个跳转语句(break语句) ,包括最后的case语句 • 对每个switch语句来说,只能有一个default语句。 而当所有的case语句都不执行,且又没有default语 句时,则控制转移到switch语句的闭花括号之后的 第一行代码,即switch整个语句都不执行
for 循环
• for 循环要求只有在对特定条件进行判断后 才允许执行循环,这种循环用于将某个语 句或语句块重复执行预定次数的情形。
【例3-7】用for语句计算1+2+…+100。
static void Main(string[] args) { int Sum,i; Sum = 0; for(i=1;i<=100;i++) Sum += i; Console.WriteLine("Sum is " + Sum); Console.Read(); }
3.3.2 do-while语句
语法形式:
do { <循环体语句> }while(<表达式>); 先执行循环体语句,再 判定表达式。若表达式 的值为非0,则再次执 行循环体语句,如此反 复,直到表达式的值为 0结束循环,并转到下 一 条 语 句 执 行
【例3-6】用do-while语句计算1+2+…+100。
• 2. if-else语句
• 语法形式:
if (<条件>) <语句1> else <语句2>
如果“条件”为 “真”,则执行 “语句1”;否则 执行“语句2”
条件
假(0)
真(非0)
语句1 语句2
如图3-2所示
图3-2 if-else语句的执行过程
例如:
if(a+b>c && b+c >a && a+c>b)//判定合法性 { //求三角形面积 p = (a+b+c)/2; s = Math.sqrt(p*(p-a)*(p-b)*(p-c)); } else Console.WriteLine(“三角形的三边数据有 错!”);
//在条件表达式中实现改变循环控制变量之值
int digit=0;
while(digit++<=9) { Console.WriteLine(“{0}”,digit); } //在Console.WriteLine()语句中实现改变循环控制变量之值 int digit=0;
while(digit<=9)