基本控制结构
顺序结构
分支结构
循环结构
break和continue语句
1 顺序结构
程序从Main函数进入,按照语句在程序中的先后次序一条一条的顺序执行
2 分支结构
(1)if 语句
(2)if···else语句
(3)if···else if 语句
(4)switch···case语句
总结:
if···else if 语句和switch···case语句的比较
相同点:都可以实现多分支结构
不同点:if···else if 语句处理范围,switch···case语句一般只能用于等值比较。
if 有条件的执行一条语句
if···else 有条件的执行一条或另一条语句
switch···case 有条件的执行一组语句中的一条语句
(1)if语句
语法:
f (表达式)
{
语句1;
···
}
表达式:一般为关系表达式或者bool类型的值
执行过程:程序运行到if处,首先判断if所带的小括号中的表达式,如果为True,则执行语句1,如果为false。则跳过if结构,继续向下执行。
特点:先判断,再执行,有可能一行代码都不执行,用于一种情况的判断。
//编程实现:如果跪键盘的时间大于60分钟,那么媳妇奖励我不用做晚饭了
Console.WriteLine("请输入你跪键盘的时间:");
int mins=Convert.ToInt32(Console.ReadLine());
bool b = mins > 60;
//如果你想要表达的含义是当b的值为true时去执行if中的代码,那么语法上==true可以省略
//如果你想要表示的是当b的值为false时去执行if中的代码,那么语法上==false不能省略
if (b)
{
Console.WriteLine("媳妇奖励我不用做晚饭了");
}
Console.ReadKey();
(2)if···else语句
语法:
if(表达式1)
{
语句1;
···
}
else
{
语句2;
···
}
执行过程:程序执行到if处,首先判断if所带的小括号中的表达式如果为true,则执行语句1,执行完成后,跳出if-else结构;如果表达式为false,则跳过if语句,执行else所带的大括号中的语句2,执行完成后,跳出if-else结构。
特点:先判断,再执行,最少都要执行一条代码。用于两种情况的判断。
注意:else永远跟他距离最近的if匹配。
//练习:如果小赵的考试成绩大于90(含)分,那么爸爸奖励他100元钱,
//否则的话,爸爸就让小赵跪方便面.
Console.WriteLine("请输入小赵的成绩:");
int score = Convert.ToInt32(Console.ReadLine());
if (score >= 90)
{
Console.WriteLine("奖励你100块");
}
else
{
Console.WriteLine("跪泡面");
}
Console.ReadKey();
(3)if···else if语句
语法:
if(表达式1)
{
语句1;
···
}
else if(表达式2)
{
语句2;
···
}
else if(表达式3)
{
语句3;
···
}
…
else
{
语句n+1;
}
执行过程:程序首先判断第一个if所带的小括号中的表达式1,如果位true,则执行语句1,执行完成后,立即跳出if else-if结构。如果表达式1位false,则继续向下进行判断,依次的判断每一个if所带的表达式,如果为true,就执行相应的语句,如果为false,则继续向下判断,如果每个表达式都为false,就看当前这个if else-if结构中是否存在else。如果有else的话,则执行else中语句,如果没有else,则整个 if-else if什么都不做。else可以省略。
//练习:提示用户输入用户名,然后再提示输入密码,如果用户名是“admin”并且密码是“88888”,
//则提示正确,否则,如果用户名不是admin还提示用户用户名不存在,
Console.WriteLine("请输入用户名:");
string name = Console.ReadLine();
Console.WriteLine("请输入密码:");
string pwd = Console.ReadLine();
if (name == "admin" && pwd == "888888")
{
Console.WriteLine("登录成功");
}
//第二种情况:密码错误
else if (name == "admin")
{
Console.WriteLine("密码错误");
}
//第三种情况:用户名错误
else if (pwd == "888888")
{
Console.WriteLine("用户名错误");
}
//第四种情况:用户名和密码全都错误
else
{
Console.WriteLine("用户名和密码全都错误,程序退出");
}
Console.ReadKey();
(4) switch···case语句
用来处理多条件的定值判断。
语法:
switch(变量或者表达式的值)
{
case 常量1:语句1;
break;
case 常量2:语句2;
break;
case 常量3:语句3;
break;
…
default:语句n+1;
break;
}
执行过程:程序执行到switch处,首先将括号中变量或者表达式的值计算出来,然后拿着这个值依次跟每个case后面所带的常量值进行匹配,一旦匹配成功,则执行该case所带的语句,执行完成后,遇到break。跳出switch-case结构。如果,跟每个case所带的值都不匹配。就看当前这个switch-case结构中是否存在
default,如果有default,则执行default中的语句,如果没有default,则该switch-case结构什么都不做。
// 成绩>=90 :A
//90>成绩>=80 :B
//80>成绩>=70 :C
//70>成绩>=60 :D
// 成绩<60 :E
Console.WriteLine("请输入一个考试成绩");
int score = Convert.ToInt32(Console.ReadLine()); //0-100
switch (score / 10)//你要把范围 变成一个定值
{
case 10: //case 10要执行的代码跟case 9是一样的
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;
}
Console.ReadKey();
3 循环结构
(1)while 循环
(2)do···while循环
(3)for循环
(4)死循环
while和do···while的区别
(1)语法不同
(2)当初始值不满足循环条件时,while循环一次都不执行循环体,do···while循环会执行一次循环体
(1)while循环
语法:
while(循环条件)
{
循环体;
}
执行过程:程序运行到while处,首先判断while所带的小括号内的循环条件是否成立,如果为true,则执行循环体,执行完一遍循环体后,再次回到循环条件进行判断,如果依然为true,则继续执行循环体,如果为false,则跳出while循环。
特点:先判断,再执行,有可能一遍循环都不执行。
//不断要求用户输入学生姓名,输入q结束.
string name = "";
while (name != "q")
{
Console.WriteLine("请输入学员姓名,输入q结束");
name = Console.ReadLine();
}
Console.ReadKey();
(2)do···while循环
语法:
do
{
循环体;
}while(循环条件);
执行过程:程序首先会执行do中的循环体,执行完成后,去判断do-while循环的循环条件,如果为true,则继续执行do中的循环体,如果为false,则跳出do-while循环。
特点:先循环,再判断,最少执行一遍循环体。
//不断要求用户输入学生姓名,输入q结束.
string name="";
do
{
Console.WriteLine("请输入学员姓名,输入q结束");
name = Console.ReadLine();
} while (name != "q");
Console.ReadKey();
(3) for循环
语法:
for(表达式1;表达式2;表达式3)
{
循环体;
}
表达式1:一般为声明循环变量,记录循环的次数(int i=0;)
表达式2:一般为循环条件(i<10)
表达式3:一般为改变循环条件的代码,使循环条件终有一天不再成立(i++)。
执行过程:程序首先执行表达式1,声明了一个循环变量用来记录循环的次数,然后执行表达式2,判断循环条件是否成立,如果表达式2返回的结果为true,则执行循环体。当执行完循环体后,执行表达式3,然后执行表达式2继续判断循环条件是否成立,如果成立则继续执行循环体,如果不成立,则跳出for循环。
//向控制台打印10遍 你好啊
for (int i = 0; i < 10; i++)
{
Console.WriteLine("你好啊");
}
Console.ReadKey();
for循环的嵌套
一个for循环里面又有一个或者多个for循环
//打印舅舅乘法表
for (int i = 1; i < 10; i++)
{
for (int j = 1; j <= i; j++)
{
Console.Write("{0}*{1}={2}", i, j, i * j);
}
Console.WriteLine();
}
Console.ReadKey();
(4) 死循环
如果没有能改变循环变量的条件,也就是循环条件永远都成立,我们称之为死循环。
//最简单的死循环
while(1)
{
Console.WriteLine("你好");
}
Console.ReadKey();
break和continue语句
break是直接结束循环,而continue是跳过本次循环,继续执行下一次循环。
break语句
作用:可以跳出switch语句,也可以跳出当前循环(如果使嵌套循环,则只可以跳出一层循环)
break语句一般不能单独使用,常用在switch···case语句和循环结构中,表示当满足某些条件的时候,循环结束。
//找出100内所有的素数
for (int i = 2; i <= 100; i++)
{
bool b = true;
for (int j = 2; j < i; j++)
{
//除尽了说明不是质数,也就没有在继续下去取余的必要了
if (i % j == 0)
{
b = false;
break;
}
}
if (b)
{
Console.WriteLine(i);
}
}
Console.ReadKey();
continue语句
立即结束本次循环,再判断循环条件,如果成立,则进入下一次循环,否则退出循环。
//练习1:用 while continue实现计算1到100(含)之间的除了能被7整除之外所有整数的和。
int sum = 0;
int i = 0;
while (i <= 100)
{
if (i % 7 == 0)
{
i++;
continue;
}
else
{
sum += i;
}
i++;
}
Console.WriteLine(sum);
Console.ReadKey();