基本控制结构
顺序结构
分支结构
循环结构
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 :EConsole.WriteLine(\"请输入一个考试成绩\");int score = Convert.ToInt32(Console.ReadLine()); //0-100switch (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();