*C#流程控制:
流程控制:一般包含三种:顺序结构,选择结构,循环结构
顺序结构:从上到下,从左往右的顺序去执行的,就是说程序自上而下的有序运行
选择结构:程序有条 件的去选择一些代码进行执行
循环结构:程序有条件的重复执行某一段代码
*条件分支语句:
•if条件分支语句:
作用:让顺序执行的代码 产生分支 用于在不同的情况下执行不同的代码
注意:1. if语句的语法部分,不需要写分号
2. if语句可以嵌套使用
◦ 单分支语句的语法格式:
if(布尔值或写一个布尔表达式) //bool类型相关:bool变量 条件运算符表达式 逻辑运算符表达式
{
// if() 里面的布尔值为true 才会执行这里面的代码
}
int a = 1;
if( a >0 && a < 5 )
{ Console.WriteLine("a在0~5之间"); }
string name = "ZN"
string passWord = "666"
if( name == "ZN" && passWord = "666")
{ Console.WriteLine("登陆成功"); }
//嵌套使用
if( name == "ZN")
{ Console.WriteLine("用户名验证成功");
if( passWord = "666")
{ Console.WriteLine("密码验证成功"); }
}
◦ 双分支语句的语法格式:
作用: 产生两条分支 满足条件执行什么 不满足条件执行什么
if(布尔值或写一个布尔表达式)
{ //布尔值为真true的时候才会执行这里面的代码
}else
{ //布尔值为假false的时候才会执行这里面的代码
}
◦ 多分支语句的语法格式:
作用: 产生n条分支 多条道路选择 最先满足其中的一个条件 就执行什么
执行过程:当某个条件表达式成立之后,会执行条件表达式成立 后面的代码 其他的条件表达式里面的代码都不会执行了, 如果所有的条件表达式都不成立 ,则执行else里面的代码
注意:如果有多个同时满足条件的表达式 只会指行最上面那一个 为什么?因为满足条件之后 后面代码就不会执行了
if(条件表达式1)
{ //条件表达式1成立 才会执行 不成立不执行
}else if(条件表达式2)
{ //条件表达式2成立 才会执行 不成立不执行
}else if(条件表达式n)
{ //条件表达式n成立 才会执行 不成立不执行
}else //else 可省略
{ //所有的条件表达式都不成立 才会执行
}
int a3 = 6;
{ if(a3 >=10) { Console.WriteLine("a大于等于10"); }
else if( a3>5 && a3<10 ) { Console.WriteLine("a在6和9之间"); }
else if( a3 >=0 && a3<=5 ) { Console.WriteLine("a在0和5之间"); }
else{ Console.WriteLine("a小于0"); }
•switch条件分支语句:
作用:让顺序执行的代码 产生分支
注意:常量!只能写一个值 不能写 一个范围 条件运算符 逻辑运算符 switch 只判断变量是否等于某一个固定值
贯穿:满足条件时 做的事情是一样的 就可以使用贯穿
switch (变量)
{
//变量 == 常量 执行 case和break之间的代码
case 常量:
//满足条件执行的代码逻辑;
break;
case 常量:
//满足条件执行的代码逻辑;
break;
default://default可省略
//如果上面case的条件都不满足 就会执行 default中的代码
break;
}
int a = 3;
switch (a)
{
case 1:
Console.WriteLine("a等于1");
break;
case 2:
Console.WriteLine("a等于2");
break;
case 3:
Console.WriteLine("a等于3");
break;
default:
Console.WriteLine("什么条件都不满足,执行default中的内容");
break;
}
//贯穿 //不写case后面的break 就叫贯穿
int f = 3;
switch (f)
{ //满足2 4 1 3其中一个条件 就会执行 之后的代码
case 2:
case 4:
case 1:
case 3:
Console.WriteLine("f等于3");
break;
default:
break;
}
*循环语句:
循环四要素:初始值 控制条件 循环体 迭代变量
•while循环:
作用:让顺序执行的代码 可以不停的循环执行某一代码块的内容
与条件分支语句区别: 条件分支语句 是 让代码产生分支 循环语句 是 让代码可以被重复执行
// boo1类型变量 条件运算符 逻辑运算符 逻辑运算符 && || !
while (boo1类型的值)
{
//当满足条件时 就会执行while语句块中的内容
//......
//增量表达式
//n个代码
//......
//当代码逻辑执行完 会回到while循环开头
//再次进行条件判断 如果满足还为true就继续执行da
}
Console.WriteLine("主代码逻辑");
◦ 死循环:
//死循环
//就不停的执行循环中的逻辑“直到死为止”
//死循环只有在目前我们学习 控制台程序时 会频繁使用
//之后进入 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);//10
◦ 嵌套使用:
不仅能嵌套 if switch 还可以嵌套 while
◦ 流程控制关键词:
//作用: 控制循环逻辑的关键词
// break: 跳出循环
while (true)
{
Console.WriteLine("break之前的代码");
break;
Console.WriteLine("break之后的代码");
}
Console.WriteLine("循环外的代码");
int i1 = 0;
while (true)
{
++i1;
Console.WriteLine(i1);
if (i1 == 0)
{ break; }
}
Console.WriteLine(i1);
//continue回到循环开始 继续执行
while (true)
{
Console.WriteLine("continue前的代码");
continue;
Console.WriteLine("continue后的代码");
}
Console.WriteLine("循环外的代码");
// 打印1到20之间的 奇数
一· int d = 0;
while (d <= 20)
{
++d;
if (d % 2 != 0)
{
Console.WriteLine($"{d}是奇数");
}
}
Console.WriteLine($"{d}是20外的数字");
二· int d = 0;
while (d <= 20)
{
++d;
if (d % 2 == 0)
{ continue; }
Console.WriteLine($"{d}是奇数");
}
Console.WriteLine($"{d}是20外的数字");
//注意:break和continue主要是和循环配合使用的 和if语句没关
// break在switch中的作用 和 while循环中的作用有异曲同工之妙
•do while循环:
// while循环 是先判断条件再执行
// do while循环 是先斩后奏 先至少执行一次循环语句块中的逻辑 再判断是否继续
do
{//do while 循环语句块;
}while(bool类型的值);
// 注意 do while 语句 存在一个重要的分号
•for循环:
//for循环 一般用来可以准确得到 一个范围中的所有数
for(初始化语句; 判断条件; 迭代器)
{ 循环代码逻辑; }
//第一个空(初始化语句):一般声明一个临时变量,用来计数用
//第二个空(判断条件):表明进入循环的条件 一个bool类型的结果(bool变量 条件运算符 逻辑运算符)
//第三个空(迭代器):用第一个空中的变量 进行 自增减运算
//每个空位 可以按照规则进行书写
//第一个空位 就是申明变量 所以可以连续申明
//第二个空位 就是进入条件 只要是bool结果的表达式 都可以
//第三个空位 就是执行一次循环逻辑过后要做的事情 做啥都行
//第一次进入循环时 才会调用 第一个空中的代码
//每次进入循环之前 都会判断第二个空中的条件 满足才会进入循环逻辑
//多层循环的变量名不能重复
//内层循环可以访问外层循环的变量,但外层循环不可以访问内层循环的变量
//执行过程:外层循环一次,内层执行全部
for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
//执行完循环语句块中的逻辑后
//最后执行第三个空中的代码
}
输出1到100中的所有偶数
for (int i = 1; i <= 100; i++)
{
if (i % 2 == 0)
{ Console.Write(i + " "); }
}
◦ 嵌套使用:
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
Console.WriteLine(i + " " +j);
}
while (true) { }
if (true) { }
do { }
while (true);
}
◦ 特殊写法:
for循环 这三个空位 可以都空着 可以根据需求去填写
for循环 可以写死循环
◦ for循环 和 while循环 对比
for循环 一般用来确定一个准确得到 一个范围中的所有数
•foreach循环:
foreach 可以遍历数组或者集合对象中的每一个元素
//使用foreach进行遍历
//优点:简单简洁
//缺点:
//1.无法访问当前数据所在的索引
//2.无法修改数组
//3.无法从中间终止
//格式: foreach (数据类型 变量名 in 数组或集合对象) { 语句块; }
double[] points = { 80, 88, 86, 90, 75.5 };
double summ = 0;
double avg = 0;
foreach (double point in points)
{
summ = summ + point;
}
avg = summ / points.Length;
Console.WriteLine("总成绩为:" + summ);
Console.WriteLine("平均成绩为:" + avg);
*循环控制:
continue 跳出本次循环 ,继续下一次循环(作用:终止本次循环)
for (int i = 0; i < 5; i++)
{
if (i == 2)
{ continue; }
Console.WriteLine(i);//0,1,3,4
}
break 表示结束循环 终止当前的循环
for (int i = 0; i < 500; i++)
{
if (i == 2)
{ break; }
Console.WriteLine(i);//0,1
}
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 5; j++)
{
if (j == 2)
{
break;// 作用:跳出当前这一层循环
}
Console.WriteLine(j);//0,1,0,1,0,1
}
if (i == 2)
{ break; }
}
return 跳出整个方法,可以结束多层嵌套循环
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 5; j++)
{
if (j == 2)
{ return; }
Console.WriteLine(j);//0,1
}
}
//求100以内的质数,找到5个质数优化结束循环
int count = 0; // 记录找到的质数个数,达到5则终止循环
for (int i = 2; i < 100; i++)
{
bool isPrime = true; // 标记当前数是否为质数
for (int j = 2; j < i; j++)
{
if (i % j == 0)
{
isPrime = false; // 能被整除,不是质数
break; // 终止内层循环,无需继续判断
}
}
if (isPrime)
{
count++;
Console.WriteLine(i); // 输出质数
if (count == 5)
{
return; // 找到第5个质数,终止外层循环
}
}
}
goto:
作用:第一种可以制造一个循环结构控制代码的执行顺序;第二种可以使用goto语句跳出循环结构(包括循环嵌套结构)
注意: goto一般用于进行内容的校验,并让用户重新输入,但goto会造成代码可读性变差,所以尽量少用
//1.给代码找到一个合适的位置 做一个标记 标记的名字是自己取得,一般标记的地方他的位置比代码少一个缩进
inputsex:
Console.WriteLine("请输入一个性别");
string sex=Console.ReadLine();
if (sex == "男")
{ Console.WriteLine("男人"); }
else if (sex == "女")
{ Console.WriteLine("女人"); }
else { Console.WriteLine("错误");
//2.使用goto到标记的地方 从新代码执行
goto inputsex; }
*九九乘法表(三种)
//while循环
int y = 1;
while (y < 10)
{
int j = 1;
while (j <= y)
{
Console.Write($"{j}*{y}={j * y}\t");
j++;
}
y++;
Console.WriteLine();
}
//do while循环
int y = 1;
do
{
int j = 1;
do
{
Console.Write($"{j}*{y}={j * y}\t");
j++;
} while (j <= y);
y++;
Console.WriteLine();
} while (y < 10);
//for循环
Console.WriteLine("请输入你喜欢的字体颜色");
string color = Console.ReadLine();
for (int x = 1; x < 10; x++)
{
for (int y = 1; y <= x; y++)
{
switch (color)
{
case "绿色":
Console.ForegroundColor = ConsoleColor.Green;
break;
default:
Console.ForegroundColor = ConsoleColor.Red;
break;
}
Console.Write($"{y}*{x}={x * y}\t");
}
Console.WriteLine("\n");
}
*水仙花束:(两种)
//三位数的水仙花数:分别是谁?
//水仙花数:每个各位立方和等于这个数本身就是水仙花数
//1定义初始值
int i = 100;
do
{
//2程序语句
//分别计算出每个各位的数值是多少
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100;
if (ge * ge * ge + shi * shi * shi + bai * bai * bai == i)
{
Console.WriteLine(i);
}
//3迭代语句
i++;
} while (i < 1000);
//for循环
Console.WriteLine("三位数的水仙花数有:");
// 遍历所有三位数(100 到 999)
for (int num = 100; num <= 999; num++)
{
// 1. 拆分个位、十位、百位数字
int unit = num % 10; // 个位:取余10(如 153%10=3)
int ten = (num / 10) % 10; // 十位:先除10去掉个位,再取余10(153/10=15,15%10=5)
int hundred = num / 100; // 百位:除100取整(153/100=1)
// 2. 计算各位数字的立方和
int cubeSum = (int)Math.Pow(unit, 3) + (int)Math.Pow(ten, 3) + (int)Math.Pow(hundred, 3);
// 3. 验证:立方和是否等于原数
if (cubeSum == num)
{
Console.WriteLine(num); // 输出水仙花数
}
}
Console.ReadKey(); // 暂停窗口,方便查看结果
*输出数字对应位置:
//输入一个四位数,求干位、百位、十位、个位数分别为
Console.WriteLine("输入一个四位数");
int number2 = int.Parse(Console.ReadLine());
// 分解各位数字
int thousands = number2 / 1000; // 千位:除以1000取整
int hundreds = (number2 / 100) % 10; // 百位:先除以100,再对10取余
int tens = (number2 / 10) % 10; // 十位:先除以10,再对10取余
int units = number2 % 10; // 个位:直接对10取余
// 输出结果
Console.WriteLine($"千位数字:{thousands}");
Console.WriteLine($"百位数字:{hundreds}");
Console.WriteLine($"十位数字:{tens}");
Console.WriteLine($"个位数字:{units}");
C#流程控制与经典算法实现

被折叠的 条评论
为什么被折叠?



