目录
顺序结构
一、顺序执行
1.定义:程序中的语句按照其书写顺序执行,上一条语句执行完后自动的开始下一条语句的执行,称为顺序执行。
2.注意:顺序执行的程序中的语句次序非常的重要,不能随意调整顺序执行的语句顺序,这将会导致程序的结果出错。
3.如果在顺序执行的程序中出现了方法或函数的调用,当执行到方法或函数调用的语句时,会暂停当前程序的执行流程转而进入到被调用方法或函数内部开始执行,当从被调方法或函数返回后继续被暂停的流程。
4.举例:输入圆的半径,计算圆面积并输出。
代码展示:
const double PI = 3.1415926;
double r, s;
Console.WriteLine("请输入您要计算的圆的半径:");
r = Convert.ToDouble(Console.ReadLine());
s = PI * r * r;
Console.WriteLine("圆的面积为:\n{0:F2}", s);
Console.ReadKey();
二、跳转执行
1.由于顺序执行虽然能满足很多的简单问题求解需求,但是又很多的问题的解决仅仅依靠顺序执行是不能满足需求的,跳转执行也是求解问题必需的执行机制。
2.跳转执行的控制语句有:
(1)选择语句:if语句、switch语句
(2)循环语句:while语句、do语句、for语句
(3)跳转语句:goto语句、break语句、continue语句、return语句、throw语句
选择结构
一、if语句
1.if语句可以根据给定表达式的结果选择执行不同的语句。
if(表达式)......语句
if(表达式)......语句1......else......语句2
2.if语句的代码示例:
3.if语句中的子语句既可以是简单的语句,也可以是任何种类的其他语句,使用复合语句时必须使用花括号括起来。
4.举例:
(1)输入实数的绝对值
代码展示:
Console.WriteLine("请输入一个数:");
double R = Convert.ToDouble(Console.ReadLine());
if (R > 0)
Console.WriteLine("该实数的绝对值为:\n{0}", R);
else
Console.WriteLine("该实数的绝对值为:\n{0}", -1 * R);
Console.ReadKey();
(2)判断输入年份是闰年还是平年,闰年的年份满足下面两个条件之一:
A.年份值能被4整除,但是不能被100整除;
B.份值能被400整除。
代码展示:
Console.WriteLine("请输入需要判断的年份:");
int Year = Convert.ToInt32(Console.ReadLine());
if (Year % 4 == 0 && Year % 100 != 0 || Year % 400 == 0)
Console.WriteLine("该年是闰年!");
else
Console.WriteLine("该年是平年!");
Console.ReadKey();
二、if语句的嵌套
1.if语句和switch语句中,分支的子语句或语句序列中可以是任意的语句。当在if语句的子语句或switch语句的分支语句序列中出现了又一个if语句或switch语句时,就形成了嵌套的选择结构。
2.if语句的嵌套形式:
(1)第一种:在else分支上嵌套if语句
if(表达式1)语句1
else if (表达式2)语句2
else if (表达式3)语句3
......
else if (表达式n)语句n
else 语句m
举例:编程输出成绩分类,90以上为A,80——89为B,......,60分以下为E。
代码展示:
Console.WriteLine("请输入你的成绩:");
int Grade = Convert.ToInt32(Console.ReadLine());
if (Grade > 100)
{
Console.WriteLine("您的输入有误,请重新输入:");
}
else if (Grade >= 90)
{
Console.WriteLine("A");
}
else if (Grade >= 80)
{
Console.WriteLine("B");
}
else if (Grade >= 70)
{
Console.WriteLine("C");
}
else if (Grade >= 60)
{
Console.WriteLine("D");
}
else if (Grade >= 0)
{
Console.WriteLine("E");
}
else
{
Console.WriteLine("您的输入有误,请重新输入:");
}
Console.ReadKey();
3.第二种:在if和else分支上嵌套if语句
if(表达式1)
if(表达式2)语句1
else 语句2
else
if(表达式3)语句3
else 语句4
4.if语句嵌套的层数
没有限制,可以形成多重嵌套,多重嵌套的使用,扩展了程序选择的分支数目,适应了程序多分支选择流程的需要。尽可能使用if语句的嵌套层数最少。
举例:找幸运数
如果一个整数逆序后得到的数值和原来数值相同,则称之为幸运数,输入一个整数N(N<100000)判断是否为幸运数,是的话输出“Yes”,否则输出“No”。
思路:
一位整数:回文数
两位整数:个位和十位相等是回文数
三位整数:个位和百位相等时回文数
四位整数:个位和千位,十位和百位相等是回文数
五位整数:个位和万位,十位和千位相等时回文数
代码展示:
Console.WriteLine("请输入一个整数:");
int Num = Convert.ToInt32(Console.ReadLine());
Num = Num >= 0 ? Num : -Num;//取num的绝对值进行判定
if (Num < 10)
{
Console.WriteLine("Yes");
}
else
{
if (Num < 100)
{
if (Num / 10 == Num % 10)
{
Console.WriteLine("Yes");
}
else
{
Console.WriteLine("No");
}
}
else
{
if (Num < 10000)
{
if (Num / 1000 == Num % 10 && Num % 1000 / 100 == Num % 100 / 10)
{
Console.WriteLine("Yes");
}
else
{
Console.WriteLine("No");
}
}
else
{
if (Num < 100000)
{
if (Num / 10000 == Num % 10 && Num % 10000 / 1000 == Num % 100 / 10)
{
Console.WriteLine("Yes");
}
else
{
Console.WriteLine("No");
}
}
}
}
}
Console.ReadKey();
三、switch语句
1.switch语句实现多路分支,它计算给定测试表达式的值,根据其结果选择从多个分支中的一个分支入口执行。
2.switch语句的形式
switch(测试表达式)
{
case常量表达式1:语句序列1
break;
case常量表达式2:语句序列2
break;
......
case常量表达式n:语句序列n
break;
default:
默认语句序列
break;
}
3.switch语句包含零个、一个或多个分支,但是任意两个分支的常量表达式值都不能相同。
4.每个分支以一个或多个分支标签开始,每个分支必须以break语句或其他的跳转语句结束,除非这个分支没有相应的语句序列,最常用来结束每个分支的是break语句。
5.default分支是可以选的,表示当表达式的值与所有常量表达式的值不相等时,将会执行默认语句序列知道遇到break等跳转语句
6.一般情况下,switch语句中都应该包含default分支,因为它的存在可以捕获程序中潜在的错误。
7.举例:将用户输入的百分制成绩转换为对应的五分制成绩。
90——100 A
80——89 B
70——70 C
60——69 D
0——59 E
代码展示:
Console.WriteLine("请输入您的成绩:");
int score = Convert.ToInt32(Console.ReadLine());
switch (score / 10)
{
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;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0: Console.WriteLine("E");
break;
default: Console.WriteLine("Error!");
break;
}
Console.ReadKey();
四、switch语句的嵌套
1.当switch语句某个case分支中的语句序列里出现了switch语句时,就实现了switch语句的嵌套,当连续使用多个switch语句时,就实现了switch语句的序列。
2.使用选择结构嵌套时,应注意不要使得嵌套的层次太深或嵌套的结构太复杂,这会使得代码的编写难度增大,代码的可读性降低。
五、if语句与switch语句相互嵌套
1.在实际编程中,可将if语句和switch语句结合起来形成更加灵活的选择结构。
2.判定对象有少数几个确定值是考虑使用switch语句比较方便,判定对象有区间特征时使用if语句方便。
3.使用一个switch语句只能判定一个判定对象,而使用一个if语句可借助复杂的判定条件实现同时判定多个对象。
4.switch语句可以使用if语句取代,但是if语句不一定能使用switch语句取代。
循环结构
一、while语句
1.while循环是一个简单的循环:
while(表达式)
语句
2.举例:
计算从1累加到N的和,其中N为大于1的自然数。
代码展示:
int N, i = 1, sum = 0;
Console.WriteLine("请输入您要计算的N值:");
N = Convert.ToInt32(Console.ReadLine());
while (i <= N)
{
sum = sum + i;
i = i + 1;
}
Console.WriteLine("sum:\n{0}", sum);
Console.ReadKey();
3.循环三要素:循环初始、循环条件和循环控制。
(1)循环初始:发生在循环之前,使得循环“就绪”;
(2)循环条件:是循环得以继续或终止的判定;
(3)循环控制:是在循环内部实现循环条件的关键过程。
4.while语句的循环必须是“一个语句”的语法形式,while语句所形成的循环结构可以抽象为顺序结构的一步。提示我们在编程时可以先抽象设计顺序结构的一步,再使用循环结构细化。在循环中应该有使while表达式趋向假的操作,否则表达式恒为真,循环永不结束,成为死循环。
二、do语句
1.do语句先执行循环体的语句,然后再计算给定的表达式值,根据结果判定是否循环执行
do
语句
while(表达式);
2.举例:计算从1累加到N的和,其中N为大于1的自然数。
代码展示:
int N, i = 1, sum = 0;
Console.WriteLine("请输入您要计算的N值:");
N = Convert.ToInt32(Console.ReadLine());
do
{
sum = sum + i;
i = i + 1;
} while (i <= N);
Console.WriteLine("sum:\n{0}", sum);
Console.ReadKey();
三、for语句
1.for语句是实现循环功能的又一个语句:
for(初始化表达式;测试表达式;迭代表达式)
2.举例:计算从1累加到N的和,其中N为大于1的自然数。
代码展示:
int N, i, sum;
Console.WriteLine("请输入您要计算的数:");
N = Convert.ToInt32(Console.ReadLine());
for ( i = 1,sum =0; i <= N; i++)
{
sum = sum + i ;
}
Console.WriteLine("sum:\n{0}",sum );
Console.ReadKey();
3.对于循环问题的求解使用三个循环语句中的任何一个理论上来说都是可行的,重点是要正确的分析循环三要素:循环初始、循环控制、循环条件以及循环体。
4.循环语句的比较:
(1)共同点:
A.while、do、for循环在逻辑上是相同的,一般情况下可以相互转换。
B.作为循环结构,while、do—while、for循环一般的都需要设置循环的初始值、循环结束条件的判定、循环增量(或减量)的计算。
(2)不同点:
如图: