本篇复习两个循环结构,while和do-while
while循环
while(循环条件)
{
循环体;
}
执行过程:程序运行到while处,首先判断while所带的小括号内的循环条件是否成立,如果成立的话,也就是返回一个true,则执行循环体,执行完一遍循环体后,再次回到循环条件进行判断,如果依然成立,则继续执行循环体,如果不成立,则跳出while循环。在while循环当中,一般总会有一行代码,能够改变循环条件,使之终有一天不再成立,如果没有这么一行代码,能够改变循环条件,也就是循环条件永远成立,我们称之为死循环。
最简单的死循环:
while(true){
}
特点:先判断,再执行,有可能一遍循环都不执行。
这里穿插一个小的点——break关键字。之前,我们在switch-case里面见到过,它的作用是跳出switch-case结构,在while循环中,它的作用是跳出当前的while循环。
break一般不单独使用,而是跟着if判断一起使用,表示当满足某些条件的时候,就不再循环了
int i = 1;
int j = 1;
while (i <= 10)
{
while (j <= 10)
{
Console.WriteLine("里面循环");
j++;
//break;
}
Console.WriteLine("外面循环");
i++;
}
Console.ReadKey();
while练习
//要求用户输入账号密码,只要不是admin,88888,再次输入
循环体:输入账号密码
循环条件:账号不是admin,密码不是88888
//string userName = "";
//string userPwd = "";
//while (userName != "admin" || userPwd != "888888")
//{
// Console.WriteLine("请输入用户名");
// userName = Console.ReadLine();
// Console.WriteLine("请输入密码");
// userPwd = Console.ReadLine();
//}
//Console.WriteLine("登陆成功");
//Console.ReadKey();
//输入班级人数,然后一次输入学员成绩,计算班级学员的平均成绩和总成绩
//循环体:提示输入成绩,接收,然后成绩相加
//循环条件:循环次数<=班级人数
//int i = 1;
//int sum = 0;//存放总成绩
//Console.WriteLine("输入班级人数");
//try//不能确定用户一定输入的是数字
//{
// int number = Convert.ToInt32(Console.ReadLine());
// while (i <= number)//当班级人数大于n的时候循环输入成绩
// {
// Console.WriteLine("输入成绩\t第{0}个", i);
// try//不能确定用户输入的是数字
// {
// int score = Convert.ToInt32(Console.ReadLine());
// sum += score;
// i++;
// }
// catch
// {
// Console.WriteLine("输入成绩格式有误,请重新输入");
// }
// }
// Console.WriteLine("总成绩是{0},平均成绩是{1}", sum, sum / number);
//}
//catch
//{
// Console.WriteLine("输入格式有误,退出程序");
//}
//Console.ReadKey();
//老师问学生,这题会做了吗,如果学生回答"会"(yes)则可以放学,
//如果学生不会(no),则老师再讲一遍,再问学生是否会了
//直到学生会为止,才可以放学
//直到学生会或老师讲了10遍还不会,都要放学
//循环体:老师讲题,老师问学生,学生回答。循环最多十次
//循环条件:学生回答no,老师讲题次数不多于10
这题遇到了一些困难,因为回答用的是string类型,所以一直在纠结怎么用try,后来发现不用。。
//string respons = "";
//int c = 1;
//while (respons != "no" && c <= 10)
//{
// Console.WriteLine("老师讲题\t第{0}次", c);
// Console.WriteLine("这题会做了吗,回答yes/no");
// respons = Console.ReadLine();
// if (respons == "yes")//如果学生回答yes,放学
// {
// Console.WriteLine("放学");
// break;
// }
// c++;
//}
//Console.WriteLine("放学");
//Console.ReadKey();
这里就用到了break,当回答是yes的时候,会跳出循环。
do-while循环
do
{
循环体
}while(循环条件);
执行过程:程序首先会执行do中的循环体,执行完成后,去判断do——while循环的循环条件,如果成立,则继续执行do中的循环体,如果不成立,跳出循环。
特点:先循环,再判断,最少执行一次循环体。
do-while练习
//明天小兰就要登台演出了,老师说再把明天
//演出歌曲唱一遍,如果满意,小兰就可以回家
//否则再练习一次,直到老师满意。
//循环体:唱一遍歌,老师不满意,再唱一遍
//循环条件:老师不满意
//遇见这种首先执行一遍循环体,拿着循环后的结果再去判断是否执行循环的循环
//我们推荐用do——while循环。
//string answer = "";
//do
//{
// Console.WriteLine("满意吗");
// answer = Console.ReadLine();
//} while (answer=="no");
//Console.WriteLine("回家吧");
//Console.ReadKey();
//不断要求用户输入一个数字,然后打印这个数字的2倍,输入q结束
//循环体:输入数字,打印这个数字的2倍
//循环条件:输入的不是q
//string input = "";
//while (input != "q")
//{
// Console.WriteLine("请输入一个数字,打印出2倍");
//不能直接转换int类型,有可能输入q
// input = Console.ReadLine();//有三种情况,数字,q,乱七八糟的
// if (input != "q")//进行判断
// {
// try
// {
// int number = Convert.ToInt32(input);
// Console.WriteLine("您输入的数字的2倍是{0}", number * 2);
// }
// catch
// {
// Console.WriteLine("输入格式无效,重新输入");
// }
// }
// else//=q
// {
// Console.WriteLine("输入的是q,退出");
// }
//}
//Console.ReadKey();
//不断要求用户输入一个数字,假定输入的都是正整数,
//当用户输入end的时候显示刚才输入的数字中的最大值
//循环体:输入正整数
//循环条件:输入的不是end
int max = 0;//定义一个变量存储最大值
string input = "";
do
{
Console.WriteLine("请输入一个数字");
input = Console.ReadLine();
if (input != "end")//当输入不为end的时候
{
try//输入不一定为数字
{
int number = Convert.ToInt32(input);
if (max < number)//把输入的值和max比较,赋值给max
{
max = number;
}
}
catch
{
Console.WriteLine("输入格式有误,重新输入");
}
}
else
{
Console.WriteLine("退出程序");
}
} while (input != "end");
Console.WriteLine("输入的最大值是{0}", max);
Console.ReadKey();
这部分知识有点绕,需要仔细琢磨几遍才能明白,我尤其在如何防止运行程序报错的地方发懵。