循环结构
要么痛苦的坚持游戏结束 可能会升级
要么结束游戏继续的痛苦 可能有遗憾
知识点
(1) . while
(2) . break语句
(3) . do-while
(4) . for
(5) . foreach
(6) . 程序调试
一、 问题
l 实际生活中的循环:打印100份试卷
l 李四这次考试又粗心了,爸爸让他写1000遍“下次考试一定要细心”.(复印纸加三根笔)
如何编程实现上面的问题?
Console.WriteLine("下次考试一定要细心");
Console.WriteLine("下次考试一定要细心");
Console.WriteLine("下次考试一定要细心");
……
二、 While循环
(一) 语法
while(循环条件)
{
循环体;
}
(二) 执行过程
程序运行到while处,首先判断while所带的循环条件是否成立,如果成立,也就是为true,则执行大括号中的循环体,
当循环体执行完成一遍后,继续回到循环条件进行判断,如果成立,则执行,如果不成立,则跳出while循环。
每个循环都有那么一行代码,能够改变循环条件,使之终有一天不再成立,如果程序中没有那么一行代码能够改变循环条件,那么我称之为这种循环叫做死循环。
特点:****先判断,再执行,有可能一次都不执行。
(三) 流程图
[图片上传失败...(image-276557-1542156274025)]
(四) 注意事项
在写while循环的时候,一定要分析出循环体和循环条件。
(五) 解决实际问题
int i=0;
while(i<1000)
{
Console.WriteLine(“我下次一定要超越他”);
i++;
}
(六) while循环的练习
(1) . 打印10次"欢迎您来到宁波教育学院学习"
(2) . 求1-100之间的所有整数和,求1-100之间所有偶数和
int i = 1;
int sum = 0;
while (i <= 100)
{
if (i % 2 == 0)
{
sum += i;//sum=sum+i;
}
i++;
}
Console.WriteLine(sum);
Console.ReadKey();
(3) . 作业1:输入班级人数,然后依次输入学员成绩,计算班级学员的平均成绩和总成绩
Console.WriteLine("请输入班级人数");
int count = Convert.ToInt32(Console.ReadLine());
int i = 0;//声明一个循环变量,记录循环的次数
int sum = 0;//定义总成绩
while (i < count)
{
Console.WriteLine("请输入第{0}个学员的成绩", i + 1);
try
{
int score = Convert.ToInt32(Console.ReadLine());
//将每一个学员的成绩累加到总成绩中
sum += score;
i++;
}
catch
{
Console.WriteLine("输入有误,请重新输入");
}
}
Console.WriteLine("{0}个人的班总成绩是{1}平均成绩是{2}", count, sum, sum / count);
Console.ReadKey();
(4) . 2006年培养学员80000人,每年增长25%,请问按此增长速度,到哪一年培训学员人数将达到20万人?
int year = 2006;
double people = 80000;
while (people <= 200000)
{
//每年增长25%
people *= 1.25;
year++;
}
Console.WriteLine("到{0}年的时候,人数将达到20万",year);
Console.ReadKey();
(5) . 作业2:编写程序,估计一个职员在65岁退休之前能赚到多少钱。用年龄和超始薪水作为输入,并假设职员每年工资增长5%。
/**
估计一个职员在65岁退休之前能赚到多少钱。
用年龄和超始薪水作为输入,并假设职员每年工资增长5%
循环条件:小于等65
循环体:工资之和
每年增加5%
*/
Console.WriteLine("请输入你现在的工资");
string str_salar = Console.ReadLine();
Console.WriteLine("请输入你的年龄");
string str_age = Console.ReadLine();
double salar=0;
int age = 0;
double sum = salar;
bool flag = true;
try
{
salar = Convert.ToDouble(str_salar);
age = Convert.ToInt32(str_age);
flag = true;
}
catch
{
Console.WriteLine("你输入的格式错误");
flag = false;
}
if (flag)
{
while (age <= 65)
{
salar *= 1.05;
sum += salar;
age++;
}
Console.WriteLine("你到65岁退休之前的工资和是:{0}", sum);
}
Console.WriteLine("程序执行完毕");
Console.ReadKey();
三、 break 关键
(一) 作用
1)、跳出switch-case语句。
2)、跳出循环
break单独放到循环中没意义,一般跟if配合着使用,表示当满足某个条件的时候,跳出循环。
(二) 演示:
int i = 0;
while (i < 10)
{
Console.WriteLine("欢迎来到宁波教育学院学习");
i++;
break;//跳出循环
}
Console.ReadKey();
(三) 练习:提示用户输入用户名和密码 admin 888888 最多让用户输入3次 如果3次都不会 则退出登录程序
/**
提示用户输入用户名和密码 admin 888888
最多让用户输入3次 如果3次都不会 则退出登录程序
循环条件:用户名和密码都不正确
循环体:用户输入用户名和密码
*/
Console.WriteLine("请输入用户名");
string userName = Console.ReadLine();
Console.WriteLine("请输入密码");
string password = Console.ReadLine();
int num = 1; //用户记录用户输入的次数
while (("admin"!=userName) & ("88888"!=password))
{
Console.WriteLine("请再输入用户名");
userName = Console.ReadLine();
Console.WriteLine("请再输入密码");
password = Console.ReadLine();
if (num == 2)
{
break;
}
num++;
}
if(num == 2){
Console.WriteLine("你已经输入错误三次,请等100年后再来");
}
else
{
Console.WriteLine("登录成功");
}
Console.ReadKey();
四、 do-while循环
(一) 实际场景
明天小兰就要登台演出了,老师说再把明天的演出的歌曲唱一遍,如果满意,小兰就可以回家了.否则就需要再练习一遍,直到老师满意为止.(y/n)
(二) while or do-while ?
1. while循环的特点
特点:先判断,再执行,有可能一次都不执行。
2. do-while循环的特点
特点:先执行,再判断,最少执行一遍循环体。
(三) do-while循环的语法
do
{
循环体;
}while(循环条件);
(四) 执行过程
首先执行do中的循环体,执行完成后,去判断循环条件是否成立,
如果成立,则继续回到do中执行循环体,
如果不成立,则跳出do-while循环。
(五) 流程图
[图片上传失败...(image-173e8d-1542156274021)]
(六) 解决问题
1. while解决
//循环体:小兰唱一遍,问老师,老师回答
//循环条件:老师不满意
Console.WriteLine("老师,我唱的你满意么?");
string answer = Console.ReadLine();
while (answer == "no")
{
Console.WriteLine("老师,我再唱一遍,你满意么?");
answer = Console.ReadLine();
}
Console.WriteLine("OK,放学回家");
Console.ReadKey();
2. do-while解决
string answer = "";
do
{
Console.WriteLine("老师,我唱的这一遍你满意么?");
answer = Console.ReadLine();
} while (answer == "no");
Console.WriteLine("Ok,放学回家");
Console.ReadKey();
(七) 练习
1. 要求用户输入用户名和密码,只要不是admin、888888就一直提示用户名或密码错误,请重新输入
string name = "";
string pwd = "";
//循环体:输入用户名和密码 判断
//循环条件:输入错误
do
{
Console.WriteLine("请输入用户名");
name = Console.ReadLine();
Console.WriteLine("请输入密码");
pwd = Console.ReadLine();
if (name != "admin" || pwd != "888888")
{
Console.WriteLine("用户名或密码错误");
}
} while (name != "admin" || name != "888888");
Console.ReadKey();
2. 不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退出
循环体:提示用户输入数字 转换 打印这个数字的2倍
循环条件:输入的不能是q
string strNumber = "";//存储的用户的输入
do
{
Console.WriteLine("请输入数字");
strNumber = Console.ReadLine();//数字 q 乱七八糟
if (strNumber != "q")//数字 乱七八糟
{
try
{
int number = Convert.ToInt32(strNumber);
Console.WriteLine("这个数字的2倍是{0}", number * 2);
}
catch//输入的是乱七八糟
{
Console.WriteLine("输入有误,请重新输入");
}
}
else//==q
{
Console.WriteLine("你输入的是q,程序退出!!!");
}
} while (strNumber != "q");
Console.ReadKey();
3. 不断要求用户输入一个数字(假定用户输入的都是正整数),当用户输入end的时候显示刚才输入的数字中的最大值
//循环体:提示用户输入一个数字 接收 转换 比较的过程
//循环条件:输入的不能是end
string strNumber = "";
int max = 0;//用来存储最大值
while (strNumber != "end")
{
Console.WriteLine("请输入一个数字,输入end,我们将显示你输入的数字中的最大值");
strNumber = Console.ReadLine();//数字 end 乱七八糟
if (strNumber != "end")
{
try
{
int number = Convert.ToInt32(strNumber);
if (number > max)
{
max = number;
}
}
catch
{
Console.WriteLine("输入有误,请重新输入");
}
}
else//输入的是end
{
Console.WriteLine("您刚才输入的数字中最大值是{0}",max);
}
}
Console.ReadKey();
tusr53I��D