21.循环语句-while
21.1 知识点
作用
while
循环是一种用于让代码可以被重复执行的循环语句。通过设置一个条件,当条件满足时,循环中的代码会被执行,之后再回到循环开始,继续进行条件判断。while
循环通常用于处理需要多次迭代的情况。
while循环的执行顺序图
┌─────────────┐
│ 条件判断 │
└─────────────┘
│
▼
┌─────────────┐
│ 循环代码块 │
└─────────────┘
│
▼
┌─────────────┐
│ 回到条件判断 │
└─────────────┘
语法相关
语法结构
// bool类型变量 条件运算符 逻辑运算符
//while(bool类型的值)
//{
// //当满足条件时 就会执行while语句块中的内容
// //......
// //......
// //......
// //......
// //当代码逻辑执行完 会回到while循环开头
// //再次进行条件判断
//}
//Console.WriteLine("主代码逻辑");
死循环
死循环就是不停的执行循环中的逻辑 “直到死为止”。死循环通常在学习控制台程序时会频繁使用,在其他场景可能会因为内存问题导致程序崩溃、卡死。
while (true)
{
//如果没有语句卡住死循环会崩溃
Console.WriteLine("**************");
Console.WriteLine("请玩家输入用户名密码");
//当前学习阶段可以用死循环构建无限输入的需求
Console.ReadLine();
}
例题
计算一个为0的整形变量,让它只能累加1,不停的加到10为止。
int i = 0;
while (i < 10)
{
++i;
}
Console.WriteLine(i); // 输出结果为 10
嵌套使用
while
循环不仅可以嵌套if
、switch
,还可以嵌套while
循环。
// 示例一
int a = 0;
int b = 0;
while (a < 10)
{
++a;
while (b < 10)
{
++b;
}
}
// 示例二
a = 0;
b = 0;
while (a < 10)
{
++a;
if (b < 10)
{
++b;
}
}
// 示例三
int a2 = 0;
while (a2 < 10)
{
++a2;
//每次从外层循环进来时
//b2和上一次的b2有没有关系 不是一个变量
//因为上一个代码块结束时上一个b2的生命周期已经结束
//切忌 没有关系
int b2 = 0;
++b2;
}
流程控制关键词
流程控制关键词主要用于控制循环逻辑。
break
break
关键词用于跳出循环,中断循环的执行。
// 示例一
while (true)
{
Console.WriteLine("break之前的代码");
break; // 跳出循环
Console.WriteLine("break之后的代码"); // 不会打印出来
}
Console.WriteLine("循环外的代码");
// 示例二
int i = 0;
while(true)
{
++i;
Console.WriteLine(i);
if (i == 10)
{
break;
}
}
Console.WriteLine(i); // 输出结果为 10
continue
continue
关键词用于回到循环开始,继续执行。
// 示例一
// 会无限打印“continue前的代码”,不会打印“continue后的代码”
while (true)
{
Console.WriteLine("continue前的代码");
continue;
Console.WriteLine("continue后的代码");
}
Console.WriteLine("循环外的代码");
// 示例二
// 打印1到20之间的奇数
int index = 0;
while(index < 20)
{
++index;
//什么样的数是奇数
//不能被2整除的数 ——> %
if (index % 2 == 0)
{
continue;
}
Console.WriteLine(index);
}
break在switch中的作用
break
在switch
中的作用和在while
循环中的作用有异曲同工之妙。
while (true)
{
int a1 = 1;
switch (a1)
{
default:
//如果有continue 会和while循环配对 则不会输出下面打印的"11111"
continue;
//这个break是和switch配对的 和while循环无关
break;
}
Console.WriteLine("11111");
}
注意:break
和continue
主要是和循环配合使用,和if
语句没关系。
21.2 知识点代码
using System;
namespace Lesson18_循环语句_while
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("while语句");
#region 知识点一 作用
// 让顺序执行的代码 可以不停的循环执行某一代码块的内容
// 条件分支语句 是 让代码产生分支
// 循环语句 是 让代码可以被重复执行
#endregion
#region 知识点二 语法相关
// bool类型变量 条件运算符 逻辑运算符
//while(bool类型的值)
//{
// //当满足条件时 就会执行while语句块中的内容
// //......
// //......
// //......
// //......
// //当代码逻辑执行完 会回到while循环开头
// //再次进行条件判断
//}
//Console.WriteLine("主代码逻辑");
//死循环
//就不停的执行循环中的逻辑 "直到死为止"
//死循环只有在目前我们学习 控制台程序时 会频繁使用
//之后进入 Unity过后 基本不会使用死循环
//进入Unity过后不使用死循环的原因
//1.可能因为内存问题 造成程序崩溃 闪退
//2.造成程序卡死
//死循环示例
while (true)
{
//如果没有语句卡住死循环 会崩溃
Console.WriteLine("**************");
Console.WriteLine("请玩家输入用户名密码");
//当前学习阶段可以用死循环构建无限输入的需求
Console.ReadLine();
}
//计算一个为0的整形变量 让他只能累加1 不停的加到10为止
int i = 0;
//bool类型的值 还可以用逻辑运算符 && || ! 条件运算符 算术运算结合运算
while (i < 10)
{
++i;
}
Console.WriteLine(i);//55
#endregion
#region 知识点三 嵌套使用
// 不仅可以嵌套 if switch 还可以嵌套 while
int a = 0;
int b = 0;
while (a < 10)
{
++a;
while (b < 10)
{
++b;
}
}
a = 0;
b = 0;
while (a < 10)
{
++a;
if (b < 10)
{
++b;
}
}
int a2 = 0;
while (a2 < 10)
{
++a2;
//每次从外层循环进来时
//b2和上一次的b2有没有关系 不是一个变量
//因为上一个代码块结束时上一个b2的生命周期已经结束
//切忌 没有关系
int b2 = 0;
++b2;
}
#endregion
#region 知识点四 流程控制关键词
//作用 : 控制循环逻辑的关键词
// break:跳出循环
while (true)
{
Console.WriteLine("break之前的代码");
break;//跳出循环
Console.WriteLine("break之后的代码");//不会打印出来
}
Console.WriteLine("循环外的代码");
i = 0;
while(true)
{
++i;
Console.WriteLine(i);
if ( i == 10 )
{
break;
}
}
Console.WriteLine(i);//10
// continue:回到循环开始 继续执行
// 会无限打印“continue前的代码”,不会打印“continue后的代码”
while (true)
{
Console.WriteLine("continue前的代码");
continue;
Console.WriteLine("continue后的代码");
}
Console.WriteLine("循环外的代码");
//打印1到20之间的 奇数
int index = 0;
while(index < 20)
{
++index;
//什么样的数是奇数
//不能被2整除的数 ——> %
if (index % 2 == 0)
{
continue;
}
Console.WriteLine(index);
}
//注意:break和continue主要是和循环配合使用的 和if语句没关
// break在switch中的作用 和 while循环中的作用有异曲同工之妙
while (true)
{
int a1 = 1;
switch (a1)
{
default:
//如果有continue 会和while循环配对 则不会输出下面打印的"11111"
continue;
//这个break是和switch配对的 和while循环无关
break;
}
Console.WriteLine("11111");
}
#endregion
}
}
}
21.3 练习题
在控制台输出1到100
int i = 0;
while (i < 100)
{
++i;
Console.WriteLine(i);
}
在控制台输出1到100之间所有整数的和
i = 0;
int sum = 0;
while (i < 100)
{
++i;
sum += i;
}
Console.WriteLine(sum); // 5050
用while和continue实现计算1到100(包含)之间的除了能被7整除之外所有整数的和
i = 0;
sum = 0;
while (i < 100)
{
++i;
if (i % 7 == 0)
{
continue;
}
sum += i;
}
Console.WriteLine(sum); // 4315
提示用户输入一个数,判断该数是否是素数并打印。
while (true)
{
try
{
Console.WriteLine("请输入一个数字");
int num1 = int.Parse(Console.ReadLine());
int index1 = 2;
while (index1 < num1)
{
if (num1 % index1 == 0)
{
break;
}
++index1;
}
if (index1 != num1)
{
Console.WriteLine("不是一个质数");
}
else
{
Console.WriteLine("是质数");
}
}
catch
{
Console.WriteLine("请正确输入");
}
}
要求输入用户名和密码(admin/8888)
while (true)
{
Console.WriteLine("请输入用户名");
string userName = Console.ReadLine();
Console.WriteLine("请输入密码");
string passWord = Console.ReadLine();
if (userName == "admin" && passWord == "8888")
{
Console.WriteLine("登录成功");
break;
}
else
{
Console.WriteLine("用户名或密码错误");
}
}
输入班级人数,然后依次输入学员成绩,计算班级学员的平均成绩和总成绩。
try
{
Console.WriteLine("请输入班级人数");
int num = int.Parse(Console.ReadLine());
int index2 = 0;
int sum1 = 0;
while (index2 < num)
{
++index2;
Console.WriteLine("请输入第{0}个学员的成绩", index2);
int cj = int.Parse(Console.ReadLine());
sum1 += cj;
}
Console.WriteLine("平均成绩是{0},总分是{1}", sum1 / num, sum1);
}
catch
{
Console.WriteLine("请输入数字");
}
定义一个整形变量sum,然后分别把1~100之间的数字依次累加到sum中,当sum的值大于500的时候,中断操作,并在控制台输出累加到第几个数字就可以使sum大于500
int sum2 = 0;
int index3 = 0;
while (index3 < 100)
{
++index3;
sum2 += index3;
if (sum2 > 500)
{
break;
}
}
Console.WriteLine("sum大于500时是第{0}个数", index3); // sum大于500时是第32个数
假设看韬老狮视频的同学有100人,每个月增长20%,请问按此速度增长,经历多少个月看韬老狮视频的同学能达到1000人?
// 100
// 1 100 * 20% + 100 = 120
// 2 120 * 20% + 120 = 144
// 3 144 * 20% + 144 = 结果
// 上一次结果 * 20% + 上一次的结果 = 本月结果
int persons = 100;
int month = 0;
while (true)
{
//本月结果 = 上一次结果 * 20% + 上一次的结果
//persons = persons + (int)(persons * 0.2f);
persons += (int)(persons * 0.2f);
++month;
//当前人数大于1000时跳出循环
if (persons >= 1000)
{
break;
}
}
Console.WriteLine("经历了{0}个月,观看视频的人数能达到1000", month);
//经历13个月,观看视频的人数能达到1000
求数列 1,1,2,3,5,8,13….的第20位数字是多少?
int n1 = 1;
int n2 = 1;
int index = 0;
int result = 0;
while (index < 20)
{
++index;
if (index == 1)
{
result = n1;
}
else if (index == 2)
{
result = n2;
}
else
{
result = n1 + n2;
n1 = n2;
n2 = result;
}
}
Console.WriteLine(result); // 6765
找出100内所有素数并打印。
int num2 = 2;
while (num2 < 100)
{
int i1 = 2;
while (i1 < num2)
{
if (num2 % i1 == 0)
{
break;
}
++i1;
}
if (i1 == num2)
{
Console.WriteLine(num2);
}
++num2;
}
21.4 练习题代码
using System;
namespace Lesson18_练习题
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("while循环练习题");
#region 练习题一
//在控制台输出1到100
int i = 0;
while (i < 100)
{
++i;
Console.WriteLine(i);
}
#endregion
#region 练习题二
//在控制台输出1到100之间所有整数的和
i = 0;
////用于表示最终结果的 变量 一定在外面声明
int sum = 0;
while (i < 100)
{
++i;
//每次加完这个i 就得把它加起来
//sum = sum + i;
sum += i;
}
Console.WriteLine(sum);//5050
#endregion
#region 练习题三
//用while和continue实现计算1到100(包含)之间的除了能被7整除之外所有整数的和
i = 0;
sum = 0;
while (i < 100)
{
++i;
//只要能被 7 整除 就不执行后面的累加
if (i % 7 == 0)
{
Console.WriteLine(i);
continue;
}
sum += i;
}
Console.WriteLine(sum);//4315
#endregion
#region 练习题四
//提示用户输入一个数,判断该数是否是素数并打印。
//(素数 / 质数:只能被1和这个数字本身整除的数字,1不是质数,最小的质数是2)
//死循环 无限输入数判断是不是质数
while (true)
{
try
{
//让用户先输入
Console.WriteLine("请输入一个数字");
int num1 = int.Parse(Console.ReadLine());
// 脑海中的输入举例 把他翻译成程序语言
// 5
// 5 % 2 能不能整除 不能
// 5 % 3 能不能整除 不能
// 5 % 4 能不能整除 不能
// 5 % 5 能 质数
// 6
// 6 % 2 能 不是质数
// 获得从2开始与输入的数比较的数
// 每次比较完一轮就+1 直到这个数不小于输入的数为止
int index1 = 2;
while (index1 < num1)
{
//有了这个数 做一些操作判断
//判断是否能整除
if (num1 % index1 == 0)
{
// 能整除的话退出循环
break;
}
// 每次比较完一轮就+1
++index1;
}
if (index1 != num1)
{
//整除且不等于本身的话不是质数
Console.WriteLine("不是一个质数");
}
else
{
//否则是质数
Console.WriteLine("是质数");
}
}
catch
{
Console.WriteLine("请正确输入");
}
}
#endregion
#region 练习题五
//要求输入用户名和密码(admin/8888),用户名或者密码错误,
//则提示“用户名或密码错误”,直到输入正确为止
//死循环无线输入用户名和密码
while (true)
{
Console.WriteLine("请输入用户名");
string userName = Console.ReadLine();
Console.WriteLine("请输入密码");
string passWord = Console.ReadLine();
if (userName == "admin" && passWord == "8888")
{
Console.WriteLine("登录成功");
break;
}
else
{
Console.WriteLine("用户名或密码错误");
}
}
#endregion
#region 练习题六
//输入班级人数,然后依次输入学员成绩(需提示当前是第几个学员),
//计算班级学员的平均成绩和总成绩。
try
{
Console.WriteLine("请输入班级人数");
int num = int.Parse(Console.ReadLine());
//index表示输入到第几次 第几个人
int index2 = 0;
//sum1表示全班总成绩
int sum1 = 0;
while (index2 < num)
{
++index2;
Console.WriteLine("请输入第{0}个学员的成绩", index2);
//得到输入的成绩
int cj = int.Parse(Console.ReadLine());
//计算总成绩 每次 加上输入的分数
sum1 += cj;
}
//计算平均成绩 打印他们
Console.WriteLine("平均成绩是{0},总分是{1}", sum1 / num, sum1);
}
catch
{
Console.WriteLine("请输入数字");
}
#endregion
#region 练习题七
//定义一个整形变量sum,然后分别把1~100之间的数字依次累加到sum中,
//当sum的值大于500的时候,中断操作,并在控制台输出累加到第几个数字就可以使sum大于500
int sum2 = 0;
int index3 = 0;
while (index3 < 100)
{
++index3;
sum2 += index3;
if (sum2 > 500)
{
break;
}
}
Console.WriteLine("sum大于500时是第{0}个数", index3);//sum大于500时是第32个数
#endregion
#region 练习题八
//假设看韬老狮视频的同学有100人,每个月增长20 %,
//请问按此速度增长,经历多少个月看韬老狮视频的同学能达到1000人?
// 100
// 1 100 * 20% + 100 = 120
// 2 120 * 20% + 120 = 144
// 3 144 * 20% + 144 = 结果
// 上一次结果 * 20% + 上一次的结果 = 本月结果
int persons = 100;
int month = 0;
while (true)
{
//本月结果 = 上一次结果 * 20% + 上一次的结果
//persons = persons + (int)(persons * 0.2f);
persons += (int)(persons * 0.2f);
++month;
//当前人数大于1000时跳出循环
if (persons >= 1000)
{
break;
}
}
Console.WriteLine("经历了{0}个月,观看视频的人数能达到1000", month);
//经历13个月,观看视频的人数能达到1000
#endregion
#region 练习题九
//求数列 1,1,2,3,5,8,13....的第20位数字是多少?
//斐波那契数列 从第三个数开始 每个数的值等于前两个数相加
// 2 = 1 + 1
// 3 = 2 + 1;
// 5 = 3 + 2;
// 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
int n1 = 1;
int n2 = 1;
// 构造一个 可以数20次数的一个流程
// 斐波那契数列索引
int index = 0;
// 斐波那契数列计算结果
int result = 0;
while (index < 20)
{
++index;
//前两个数特殊处理
if (index == 1)
{
result = n1;
}
else if (index == 2)
{
result = n2;
}
else
{
//从第三个数以后 都是用前两个数相加得到结果
// 2 = 1 + 1;
//目前算的第三个数
result = n1 + n2;
//接下来要算第四个数
n1 = n2;
n2 = result;
}
}
Console.WriteLine(result);//6765
#endregion
#region 练习题十
//找出100内所有素数并打印。
int num2 = 2;
while( num2 < 100 )
{
// 用想要判断是素数的数 从2开始 去取余 如果 中途就整除了 证明不是素数
// 如果 累加到和自己一样的数了 证明是素数
//用来遍历的数
int i1 = 2;
//小于当前被判断是不是素数的数时进循环
while ( i1 < num2 )
{
//判断是否整除
if( num2 % i1 == 0 )
{
//整除跳出素数判断循环
break;
}
++i1;
}
//如果等于自己就是素数
if ( i1 == num2 )
{
Console.WriteLine(num2);
}
//判断下一个数
++num2;
}
#endregion
}
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com