第3章 结构化程序设计.docx
- 文档编号:12305829
- 上传时间:2023-04-18
- 格式:DOCX
- 页数:27
- 大小:81.12KB
第3章 结构化程序设计.docx
《第3章 结构化程序设计.docx》由会员分享,可在线阅读,更多相关《第3章 结构化程序设计.docx(27页珍藏版)》请在冰豆网上搜索。
第3章结构化程序设计
第3章结构化程序设计
3.1条件语句
一、格式1:
if(表达式)
语句1
else
语句2
功能:
if语句首先判断表达式的值是真还是假。
若为真,则执行语句1,然后跳出if语句(选择结构),继续执行if语句下面的语句;若为假,则执行else后面的语句2,然后跳出if语句(选择结构),继续执行if语句下面的语句。
流程图:
例:
if(studentGrade>=60)
Console.WriteLine(“PASSED”);
else
Console.WriteLine(“FAILED”);
二、格式2:
if(表达式)
语句1
功能:
if语句首先判断表达式的值是真还是假。
若为真,则执行语句1,然后跳出if语句(选择结构),继续执行if语句下面的语句;若为假,则跳出if语句(选择结构),继续执行if语句下面的语句。
流程图:
例:
if(studentGrade>=60)
Console.WriteLine(“PASSED”);
例题1:
实现数据的四舍五入(P42)
usingSystem;
publicclasstest
{
publicstaticvoidMain()
{
Console.WriteLine(“PleaseinputX:
”);
floatX=Convert.ToSingle(Console.ReadLine());
if(X-(int)X>=0.5)
{
X=(int)X+1;
}
else
{
X=(int)X;
}//选择结构结束
Console.Write(“X={0}”,X);//if的后继语句
}
}
课堂练习题
任意输入两个数,判断它们的大小并显示判断的结果。
三、格式3:
if(表达式1)
语句1
elseif(表达式2)
语句2
elseif(表达式3)
语句3
……
else
语句n
功能:
if语句首先判断表达式1的值是真还是假。
若为真,则执行语句1,然后跳出if语句(选择结构),继续执行if语句下面的语句;若为假,则判断表达式2的值是真还是假。
若为真,则执行语句2,然后跳出if语句(选择结构),继续执行if语句下面的语句;若为假,则判断表达式3的值是真还是假。
以此类推。
若所有表达式的值都为假,则执行else后面的语句n,然后跳出if语句(选择结构),继续执行if语句下面的语句。
例题:
实现求如下函数值的程序。
(P43)
-1,x<0
f(x)0,x=0
1,x>0
usingSystem;
publicclassTest
{
publicstaticvoidMain()
{
Console.WriteLine(“PleaseinputX:
”);
floatx=Convert.ToSingle(Console.ReadLine());
inty;
if(x>0)
y=1;
elseif(x=0)
y=0;
else
y=-1;
Console.WriteLine(“Y={0}”,y);
}
}
3.2分支语句
一.格式:
switch(表达式1)
{
case常量表达式1:
语句1
case常量表达式2:
语句2
……
[default:
语句n]
}
二.功能
表达式1中的值与每个常量表达式进行比较,如果有一个匹配,就执行为该匹配提供的语句;如果没有匹配,就执行default部分中的代码。
一.注意
1.在default关键字及后面的语句n缺省的情况下,如果所有的常量表达式的值和表达式1的值都不相等,程序会跳出switch语句,转向执行switch语句下面的语句。
2.每个case后使用break语句中断switch语句的执行或使用跳转语句goto跳转到另一个case。
3.所有常量表达式的值不同,如果有两个或两个以上的case中常量表达式的值相同,编译时也会出错。
4.一个case语句处理完后,不能自由进入下一个case语句,但这个规则有一个例外。
如果把多个case放在一起(堆叠它们),其后加一行代码,实际上是一次检查多个条件。
如果满足这些条件中的任何一个,就会执行该行代码。
switch(表达式1)
{
case常量表达式1:
case常量表达式2:
语句
break;
……….
}
例题1:
usingSystem;
classSwitchTest
{
staticvoidMain()
{
chargrade;
intaCount=0,
bCount=0,
cCount=0,
dCount=0,
fCount=0;
for(inti=1;i<=10;i++)
{
Console.Write("Enteralettergrade:
");
grade=char.Parse(Console.ReadLine());
switch(grade)
{
case'A':
case'a':
++aCount;
break;
case'B':
case'b':
++bCount;
break;
case'C':
case'c':
++cCount;
break;
case'D':
case'd':
++dCount;
break;
case'F':
case'f':
++fCount;
break;
default:
Console.WriteLine("Incorrectlettergradeentered."+"\nGradenotaddedtototals.");
break;
}
}
Console.WriteLine("\nTotalsforeachlettergradeare:
\nA:
{0}"+"\nB:
{1}\nC:
{2}\nD:
{3}\nF:
{4}",aCount,bCount,cCount,dCount,fCount);
}
}
5.每个常量表达式的值必须是个常量,一种方法是提供字面值;另一种方法是使用常量。
可以使用关键字const声明常量,同时必须给他们赋值。
例如:
constintintTwo=2;是合法的。
constintintTwo;
intTwo=2;
编译时产生编译错。
例题2
staticvoidMain()
{
conststringmyName="karli";
conststringsexyName="angelina";
conststringsillyName="ploppy";
stringname;
Console.WriteLine("Whatisyourname?
");
name=Console.ReadLine();
switch(name.ToLower())//把输入的姓名转换为小写
{
casemyName:
Console.WriteLine("Youhavethesameasme!
");
break;
casesexyName:
Console.WriteLine("Oh,whatasexynameyouhave!
");
break;
casesillyName:
Console.WriteLine("That'saverysillyname.");
break;
}
Console.WriteLine("Hello{0}!
",name);
}
例题3:
usingSystem;
classtest
{
publicstaticvoidMain()
{
Console.Write("Enteracharacter:
");
charch=(char)Console.Read();
switch(ch)
{
case'Y':
Console.WriteLine("Welcome!
");
break;
case'y':
Console.WriteLine("Howareyou!
");
break;
default:
Console.WriteLine("Invalidinput!
");
break;
}
}
}
作业:
上机完成上述各例题、练习题,分析运行结果。
3.3循环语句
3.3.1while语句
一.语法格式:
while(表达式)
循环体
二.语句功能:
先判断表达式的值。
若为真,则执行循环体,然后再判断表达式的值。
只要表达式一直为真,那么循环体就不断进行,直到表达式的值变成假,程序的流程转去执行循环的后继语句。
三.
流程图:
四.注意:
1.循环体可以是一条语句,也可以是语句块。
如果是块,那么块必须用大括号扩起来。
2.循环体中应该有使循环趋于结束的操作。
五.例题
1.用while语句实现100以内的偶数累加。
(练习)
usingSystem;
namespace偶数累加
{
classClass1
{
publicstaticinteven()
{
intresult=0;
inti=0;
while(i<=100)
{
result+=i;//result=result+i
i+=2;
}
Console.WriteLine("result:
{0}",result);
return0;
}
staticvoidMain()
{
even();
}
}
}
(书P43)
运行结果为result:
2550
3.3.2do-while语句
一.语法格式:
do
循环体
while(表达式);
二.语句功能:
先执行循环体,然后再判断表达式的值。
只要表达式一直为真,那么循环体就不断进行,直到表达式的值变成假,程序的流程转去执行循环的后继语句。
三.流程图:
四.注意:
1.循环体可以是一条语句,也可以是语句块。
如果是块,那么块必须用大括号扩起来。
2.while语句后必须写分号(;)。
3.循环体中应该有使循环趋于结束的操作。
五.例题
1.用do-while语句计算10的阶乘。
usingSystem;
namespace_10_
{
classClass1
{
staticvoidMain()
{
longy=1;
intx=10;
do
{
y*=x;
x--;
}while(x>0);
Console.WriteLine("Y:
{0}",y);
}
}
}
(书P44)运行结果为:
Y:
3628800
3.3.3for语句
一.语法格式:
for([表达式1];[表达式2];[表达式3])
循环体
二.语句功能:
1.首先求解表达式1;
2.判断表达式2的值是真是假,若为真,则执行循环体,然后再执行下面的第3步。
如果表达式2的值为假,则结束循环,程序的流程转去执行循环的后继语句;
3.求解表达式3;
4.转回第2步继续执行。
三.流程图:
四.注意:
1.表达式1和表达式3可以是一个简单的表达式,也可以是用逗号分隔的若干个表达式。
2.表达式2一般是关系表达式或逻辑表达式,也可以是算术表达式或字符表达式等。
二.例题
1.For语句用法
usingSystem;
publicclassTest
{
publicstaticvoidMain()
{
for(inti=0;i<=10;i++)
{
Console.Write(i);
}
}
}
运行结果:
2.用for语句实现100以内的偶数累加。
(练习)
usingSystem;
namespace偶数累加
{
classClass1
{
publicstaticinteven()
{
intresult=0;
for(inti=0;i<=100;i+=2)
{
result+=i;//result=result+i
}
Console.WriteLine("result:
{0}",result);
return0;
}
staticvoidMain(string[]args)
{
even();
}
}
}//P45例题
3.用for语句计算10的阶乘。
usingSystem;
namespace_10_
{
classClass1
{
staticvoidMain(string[]args)
{
for(longy=1,intx=10;x>0;x--)
{
y*=x;
}
Console.WriteLine("Y:
{0}",y);
}
}
}//(书P46)
六、for结构应用举例
(1)以步长1进行从1~100的递增控制变量
for(inti=1;i<=100;i++)
(2)以步长-1进行从100~1的递增控制变量(或者以步长1递减)
for(inti=100;i>=1;i--)
(3)以步长7进行从7~77的递增控制变量
for(inti=7;i<=77;i+=7)
(4)以步长-2进行从20~2的递增控制变量
for(inti=20;i>=2;i-=2)
(5)控制变量按照下列数值的序列:
2,5,8,11,14,17,20变化
for(inti=2;i<=20;i+=3)
(6)控制变量按照下列数值的序列:
99,88,77,66,55,44,33,22,11,0变化
for(inti=99;i>=0;i-=11)
3.3.4foreach语句
一、语法格式:
foreach(数据类型变量in集合表达式)循环体
二、功能:
列举集合中的每个元素,并且通过执行循环体对每一个元素进行操作。
三、注意:
foreach语句只能对集合中的元素进行循环操作。
四、例题:
计算数组中偶数与奇数的个数。
(p46)
usingSystem;
namespaceforeach1
{
classClass1
{
staticvoidMain(string[]args)
{
intevenNum=0,oddNum=0;
int[]arr=newint[]{30,12,11,52,79,83};//定义并初始化一个一维数组
foreach(intiinarr)
{
if(i%2==0)
evenNum++;
else
oddNum++;
}
Console.WriteLine("evenNum:
{0},oddNum:
{1}",evenNum,oddNum);
}
}
}
运行结果:
evenNum:
3,oddNum:
3
3.4跳转语句
3.4.1break语句和continue语句
一、break语句:
主要用在switch、while、dowhile、for、foreach等语句中,用在中断当前的选择或循环,并跳出当前的选择或循环结构,执行其后继语句。
二、continue语句:
主要用在while、dowhile、for、foreach等循环语句中,用于结束本次循环,接着进行下一次循环是否执行的判定。
三、例题:
1.(p48)
usingSystem;
namespacecontinue1
{
classClass1
{
staticvoidMain(string[]args)
{
for(inti=1;i<=10;i++)
{
if(i==6)continue;
Console.WriteLine(i);
}
}
}
}
运行结果:
显示除6以外的10以内的正整数
2.(p49)
usingSystem;
namespacecontinue1
{
classClass1
{
staticvoidMain(string[]args)
{
for(inti=1;i<=10;i++)
{
if(i==6)break;
Console.WriteLine(i);
}
}
}
}
运行结果:
显示从1到5的正整数
3.4.2标签语句和goto语句
一、goto语句的语法格式:
goto<标签>;
标签用下述方式定义:
<标签>:
二、例如:
intmyInteger=5;
gotomyLabel;
myInteger+=10;//该行代码没有执行
myLabel:
Console.WrtieLine(“myInteger={0}”,myInteger);
3.5综合举例
一、一个班有10个学生进行了测验,已知测验的得分(0到100之间的整数)情况,求班级平均分。
usingSystem;
namespaceaverage1
{
classClass1
{
staticvoidMain(string[]args)
{
inttotal,gradeCounter,gradeValue,average;
total=0;
gradeCounter=1;
while(gradeCounter<=10)
{
Console.Write("Enteraintegergrade:
");
gradeValue=Int32.Parse(Console.ReadLine());
total=total+gradeValue;
gradeCounter=gradeCounter+1;
}
average=total/10;
Console.WriteLine("\nClassaverageis{0}",average);
}
}
}
二、设计一个求班级平均分的程序,使得它在程序执行时,可以求任意个分数的平均分。
usingSystem;
namespaceaverage2
{
classClass1
{
staticvoidMain(string[]args)
{
inttotal,gradeCounter,gradeValue;
doubleaverage;
total=0;
gradeCounter=0;
Console.Write("EnteraIntegergrade,-1toquit:
");
gradeValue=Int32.Parse(Console.ReadLine());
while(gradeValue!
=-1)
{
total=total+gradeValue;
gradeCounter=gradeCounter+1;
Console.Write("EnteraIntegergrade,-1toquit:
");
gradeValue=Int32.Parse(Console.ReadLine());
}
if(gradeCounter!
=0)
{
average=(double)total/gradeCounter;
Console.WriteLine("\nClassaverageis{0}",average);
}
else
{
Console.WriteLine("Nogradeswereentered.");
}
}
}
}
三、有10个学生进行了一门课程的测验。
编写一段程序,统计该课程的通过与未通过的人数,如果通过人数大于8人,则显示提高学费。
usingSystem;
namespacestatics
{
classClass1
{
staticvoidMain(string[]args)
{
intpasses=0,
failures=0,
student=1,
result;
while(student<=10)
{
Console.Write("Enterresult(1=pass,2=fail):
");
result=Int32.Parse(Console.ReadLine());
if(result==1)
passes=passes+1;
else
failures=failures+1;
student=student+1;
}
Console.WriteLine();
Console.WriteLine("Passed:
"+passes);
Console.WriteLine("Failed:
"+failures);
if(passes>8)
Console.WriteLine("raisetuition\n");
}
}
}
补充内容:
数学函数
数学函数包含在Math类中,它是System命名空
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第3章 结构化程序设计 结构 程序设计