第3章 结构化程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.3.5 循环的嵌套
一个循环的循环体内包含另外一个循环语句,这样 的编程方式称之为“循环的嵌套”。循环嵌套时 ,外层循环执行一次,内层循环从头到尾执行一 遍。
【例3-12】如图3-7所示,打印九九乘法表。
static void Main(string[] args) { int k,i; for(k=1;k<=9;k++) { for(i=1;i<=9;i++) Console.Write("{0,6:d}",k*i); Console .WriteLine (); } }
【例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.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。
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); }
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 循环语句
3.3.1 while语句 语法形式:
while(<表达式>) { <循环体语句> }
如果表达式为真(true), 则执行循环体语句。然 后重新计算表达式的值, 并再次判断;如果表达 式的值为假(false), 则退出循环结构。
【例3-5】 利用while语句求,计算 1+2+…+100的值,并打印计算结果。
(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); }
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 ຫໍສະໝຸດ Baiduf语句嵌套的执行过程
(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); }
语法形式:
先执行循环体语句,再 判定表达式。若表达式 的值为非0,则再次执 行循环体语句,如此反 复,直到表达式的值为 0结束循环,并转到下 一 条 语 句 执 行
do { <循环体语句> }while(<表达式>);
【例3-6】用do-while语句计算1+2+…+100。
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 – 6 for语句的执行过程
3.3.4 foreach 语句
语法形式:
C#中新增的循环语句,它对于处理数组及集合等数据类型特 别简便 。 foreach(类型 标识符 { <循环体语句> } in 表达式)
【例3-11】使用foreach语句输出数组中的所 有数 static void Main(string[] args) { int[] list={ 10,22,34,56,87,11}; foreach(int i in list) Console.Write("{0,-5}",i); } 程序运行结果为: 10 22 34 56 87 11
3.3.3 for 语句
语法形式:
初始表达式是设置循环 C#的for循环是循环语句中最具特色的。它功能较强、灵活 控制变量的初值;条件 多变和使用广泛。 是bool类型,作为循环 控制条件;变量增值表 达式是设置循环控制变 量的增值(正负均可)。
for(<初始表达式>;<条件>;<变量增值表达式>) { <循环体语句> }
static void Main(string[] args) { int Sum,i; Sum = 0; i = 1; while (i <= 100) { Sum += i; i++; } Console.WriteLine("Sum is " + Sum); }
3.3.2 do-while语句
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)); }
程序运行结果:
3.4 跳转语句
3.4.1 continue语句
continue语句只能用于循环语句之中,它的作用是结束本轮循环,不再 执行余下的循环体语句 。 语法形式: continue; 【例3-13】将1~100之间能被7整除的数输出。 static void Main(string[] args) { for(int i=1;i<=100;i++) { if(i%7 != 0)continue;//如果I不能被7整除,则直接进入下一轮循环 Console.WriteLine(i);//只有能被7整除的数,才会执行到此 } }
• 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(“三角形的三边数据有 错!”);
3种循环语句的执行流程图
Sum=0, i=1
Sum=0,i=1
假 i<=100 假 表达式 真 真 循环体语句 输出Sum 表 达 式 假 真 Sum+=i; i++ 循环体语句 真
初始表达式
Sum+=i, i++
假 条件 真
i<=100 假 输出Sum
循环语句体
变量增值表达式
(a)
(a)
(b)
(b)
方法 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); }
第3章 结构化程序设计
本章要点
理解三种基本结构的概念 明确选择结构和循环结构的条件构成 掌握跳转语句的执行流程和使用方法 较熟练地使用C#的三种基本结构,进行程 序设计
3.1 赋值语句
3.1.1 简单赋值语句
<变量名> = <表达式>;
3.1.2 复合赋值语句
<变量> <双目运算符> = <表达式>; 等价于 <变量> = <变量> <双目运算符> <表达式>;
【例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)可以在for循环内部声明循环控制变量 【例3-10】用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(); }