循环控制
1. 循环:
反复不停的做同1件事情.
a.
现实生活中的循环在反复不停的做什么事情?
b.
现实生活中的循环一定会有停止的那1刻.
2. 在代码中.我们会有这样的需求:
同1段代码反复不停的执行指定的次数.
a.
实现的方式
1)
简单粗暴的方式: 那就是复制粘贴
缺点:
代码冗余. 修改维护极度不方便.
2) 循环结构:
将1段代码进行反复不停的执行指定的次数.
代码简洁
并且 修改维护方便.
3. 循环结构
while循环结构 do-while循环结构
for循环结构
他们都是来将1段代码进行反复不停的执行指定的次数,唯一的区别仅仅是语法上的区别.
4.
while循环结构.
a. 语法.
while(bool表达式)
{
需要被反复不停的执行的代码;
循环体;
}
int i = 0; //循环增量 用来记录循环的次数.
while (i<5)
{
Console.WriteLine("我爱北京天安门");
i++;
}
bool表达式: 比较表达式 逻辑表达式
bool类型的变量 bool类型的常量
b.
执行步骤.
第1步:
计算bool表达式的结果.
1.1
如果结果为true。就执行循环体.循环体执行完毕之后.跳回第1步继续执行.
1.2
如果结果为false。级结束while循环结构 继续往下执行.
简单的说下:
判断条件 如果为true 就执行循环体 执行完毕之后 再判断
直道条件为false的时候结束循环.
5.
我们在写循环的时候,一定要避免死循环.
如果1个循环是死循环
那么循环后面的代码永远不会被执行到.
6.
要写循环的话 你必须确定如下两点:
a.
那1段代码是需要被反复不停的执行的. 循环体.
b.
循环结束的条件. 没有特殊的理由千万不要写1个死循环.
------------------------------------------------------循环的常用算法---------------------------------------------------------------
1. 循环的应用之一: 循环体确定. 循环的次数也确定
实现的步骤:
a. 定义1个int类型的循环增量i 并赋默认值为0
该变量用来记录循环的次数.
b. while循环的条件写上
i<次数
c.
在循环体中一定要记得 将循环增量i的值自增.
eg:
int i = 0;
while(i<次数)
{
循环体;
i++;
}
为什么这么写我们的循环就可以执行指定的次数.
因为循环的条件表达式中 有循环增量i参与. 而i变量的值
每循环1次都会发生变化.
前面几次的变化循环条件的结果都是true 当最后1次变化的时候
循环条件的值就变为false了.
写循环的技巧:
如何确定循环体: 那你就试着写代码.要实现功能
不用循环该如何实现.
你在复制的代码 就是要被反复不停的执行的代码
就是你要找的循环体嘛.
一定要注意: 循环增量的值不要忘记更改. 如果不改循环增量的值 只要第1次循环可以进入
那么这个循环就是1个死循环.
2.
循环应用之二: 循环体确定 循环的次数不确定. 但是我清楚循环结束的条件.
实现的步骤.
a.
先写1次循环体.
b. 在写1个while循环 循环中放入我们的循环体. 循环的条件:
写上要再来1次的条件.
c. 在循环体中一定要改 参与 循环条件表达式的变量的值 否则如果第1次可以进入循环
那么这个循环就会是1个死循环.
eg:
循环体;
while(再次进入循环的条件)
{
循环体;
一定要记得更改参与循环条件表达式的变量的值.
}
//请写1个程序 要求输入用户名. 只要不是admin 要求用户重新输入.
//接收用户输入用户名 的操作. 需要反复不停的执行,Console.WriteLine("请输入用户名:");
string userName = Console.ReadLine();
//需不需要继续输入? 当userName的值不为"admin"的时候 重新输入.
while(userName!="admin")//== !=
{
Console.WriteLine("请输入用户名:");
userName = Console.ReadLine();
}Console.WriteLine("OVER");
注意:对于这种循环.
我们清楚的是循环结束的条件. 但是我们在while后面写的是循环继续的条件.
写的是循环结束的反面的条件.
要么循环条件直接就写上反向的条件.
要么就把结束的条件写上
然后再反1下.
补充:
我们的建议是在循环之前
先写1次循环体 。
为什么我们要先写1次循环体呢?
是因为我们要保证我们的循环无论如何至少要执行1次.
那如果是这个目的的话
我们就可以简单1点.
在写条件的时候 保证这个条件第一次是成立的
可以进去执行循环体.
3. 循环应用之三: 遍历指定范围的数.
循环结构的作用:将同1段代码进行反复不停的执行指定的次数.
实现步骤.
要将n-m之间的每1个整数打印出来.
a. 定义1个循环增量i
并赋默认值为n;
b. while循环的条件是 i<=m
c. 在循环体中
循环增量i 就是我们想要遍历的数据.
切记:
要在循环体后面更改循环增量的值 i++;
int
i = n;
while(i<=m)
{
循环增量i就是我们要遍历的数据;
i++;
}
//将100-200之间的整数打印出来.
int i = 100;
while (i < 201)
{
Console.WriteLine(i);
i++;
}
4. 循环应用之四:
找出指定范围中符合特定条件的数.
实现步骤.
a.
遍历这个范围中的每1个整数.
b.
判断遍历出来的这个数是不是符合特定条件的.
//请用户输入两个整数 1 20 那你就将两个数之间的整数打印出来.
//如果第1个数比第2个数大 就提示错误.
Console.WriteLine("请输入第1个数:");
int min = int.Parse(Console.ReadLine());
Console.WriteLine("请输入第2个数:");
int max = int.Parse(Console.ReadLine());
if (min > max)
{
Console.WriteLine("输入错误,第1个数不能比第2个数大.");
}
else
{
//我们将min-max中的每1个整数打印出来.
int i = min;
while (i <= max)
{
Console.WriteLine(i);
i++;
}
}
eg:
请n-m之间的符合特定条件的数:
int i = n;
while(i<=m)
{
判断i是不是符合特定条件
如果符合打印出来.
i++;
}
5. 循环应用之五: 求累加和
平均值.
求1堆数的累加和.
先准备1个桶变量
用来存储累加和.
然后遍历这1堆数中的每1个数. 将遍历出来的数 往
桶中累加.
遍历完毕后 桶 变量中的数据
就是这堆数的累加和.
eg.
求n-m之间的所有的整数的累加和.
int
sum = 0;
int i = n;
while(i<=m)
{
sum+=i;
i++:
}
循环完毕以后
sum中的值 就是n-m之间的整数的累加和.
?
1 2 3 4 5 6 7 8 9 10 |
|
6.循环应用之六:求最大值和最小值.
找1堆数中的最大值:
a.
声明1个擂台变量.
b. 遍历这堆数中的每1个数. 将遍历出来的数和擂台变量中的数进行比较
如果比的过就上去.
c.
遍历完成以后,这个擂台变量中存储的就是这堆数中的最值.
//从控制台输入10个数 要把最大的那个数找出来.
int i = 0;
int max = int.MinValue;
while (i < 10)
{
Console.WriteLine("请输入第{0}个数:",i+1);
int num = int.Parse(Console.ReadLine());
if (num > max)
{
max = num;
}
i++;
}Console.WriteLine(max);
7.循环应用之七:
穷举
1个1个的试.
//有1个数 这个数至少是2. 这个数除以2余数为1 除以3余数也为1 除以4余数1.int num = 2;
while (num % 2 != 1 || num % 3 != 1 || num % 4 != 1)
{
num++;
}
Console.WriteLine(num);
8.
循环应用之八:计数
//请统计1-100之内有多个数 可以被8整除.
int i = 1;
int j = 0;
while (i <= 100)
{
if (i % 8 == 0)
{
j++;
}
i++;
}
Console.WriteLine(j);
9.
break关键字.
a. break可以用在switch-case中.
代表立即结束整个switch结构.
b.
break还可以用在循环体中. 代表立即结束当前所在的循环. 如果循环体的后面还有代码的话
不会执行.
break的作用可以结束循环.
break的应用场合.
对于循环体确定,循环次数不确定,但是循环结束的条件确定的循环.
我们十分清楚的是 循环结束的条件. 但是在写条件的时候
要写循环继续的条件.
推荐的方式.
a.
先来1个"死"循环.
b. 在循环体中 判断循环是否应该结束.
int i = 0;
while (i < 5)
{
Console.WriteLine(i);
if (i == 2)
{
break;
}
Console.WriteLine("A");
i++;
}
10. continue
是1个关键字. 用在循环体中.
在循环体中如果遇到continue
表示立即结束本次循环,准备进入下次循环,
如果后面还有循环体的代码
不会执行.
int i = 0;
while (i < 5)
{i++;
if (i == 2)
{
continue;
}
Console.WriteLine(i);}
Console.WriteLine("OVER");
---------------------------------------------------经典题目----------------------------------------------------
//请将1000-5000之间的符合条件的数打出来.
//各位数之和等于5的整数. 1004 1+0+0+4 1013
// 1987/1000 1987%1000 /100int i = 1000;
while (i <= 5000)
{
//要判断i 的各位数之和是否等于5
int qian = i / 1000;
int bai = i % 1000 / 100;
int shi = i % 1000 % 100 / 10;
int ge = i % 10;
if (qian + bai + shi + ge == 5)
{
Console.WriteLine(i);
}
i++;
}
//请用户从控制台输入用户名和密码 只要不是admin 888888 就重新输入.
//当输入3次都没有输入正确的话 那么就不给输入了.
//循环体: 接收用户的用户名和密码. 循环的次数:最多3次 结束的条件: 输入用户名和密码正确
string userName = "";
string pwd = "";
int i = 0;
//用户名或密码不正确 并且 循环的次数小于3次
while ((userName != "admin" || pwd != "888888") && i<3)
{
Console.WriteLine("请输入用户名:");
userName = Console.ReadLine();
Console.WriteLine("请输入密码:");
pwd = Console.ReadLine();
i++;
}