流程控制:
在c#中一般有三种结构:顺序结构、选择结构、循环结构
顺序结构:程序是从上到下执行,从左到右执行,如果前面的代码没有加载,那么后面的代码是永远不会加载的(dead code/unreach code),对于程序来说,默认的结构就是程序结构。
选择结构:程序执行到某个地方的时候,可以让程序做判断有选择的去执行,某段代码或某行代码。if-else结构,switch-case结构。
循环结构:程序可以有条件的重复执行,某行代码或某段代码。当程序中设定的条件满足时,会让某段代码或某行代码不断的重复执行,直到设定的条件不再满足时,跳出我们设置的循环语句。for循环(简化版->for-each结构),
if语句-----单支语句(支=情形)
if else----双支语句
if else if----多支语句
注意:if--else语句情形之间是互斥的,程序只能选择一种情形加载,不会加载两种或者两种以上情形
C# 中的 if 语句用于条件判断,其中包含一个布尔表达式,后面跟随着若干要执行的代码,当布尔表达式为真时,后面跟随的代码就会执行,if 语句的语法格式如下:
if(布尔表达式){ //如果bool表达式为真时要执行的代码; } //定义考试成绩 double ChengJi=472; if(ChengJi>=471) { //输出可以上本科学校 }
C# 的 if else 语句同样用于条件判断,它比 if 语句中多出了一个 else 语句,当布尔表达式为假时,执行 else 语句块中的代码,语法格式如下所示:
if(布尔表达式){ 表达式为真时要执行的代码; }else{ 表达式为假时要执行的代码; } //你想上厕所 chas xb='男'; if(xb=='男'){ //去男厕所 } else{ //去女厕所 }
C# 的 if else if 语句其实就是一个 if 语句后面跟随着若干个 else if else 语句,语句中可以包含多个条件表达式,程序会依次判断这些条件表达式,当条件表达式为真时则执行后面语句块中的代码,如果没有为真的条件表达式则执行 else 语句块中的代码,其语法格式如下所示:
需要注意的是,当布尔表达式为真,且成功执行它后面语句块中的代码后,会跳出 if else if 语句,语句中的其它部分不会再被执行。
if(布尔表达式 1){ 布尔表达式 1 为真时要执行的代码; }else if(布尔表达式 2){ 布尔表达式 2 为真时要执行的代码; }else if(布尔表达式 3){ 布尔表达式 3 为真时要执行的代码; } ... else{ 当所有布尔表达式都为假时要执行的代码; }
C# 中的 switch 语句有些类似于《if else if 语句》,都可以根据表达式执行某个的语句块,其语法结构如下:
//只能做一个相等判断,没法直接进行范围判断 switch(表达式/变量){ case 常量值1//变量的变化值://可以放整数、小数、字符串、bool //表达式的值为 value1 时,要执行的代码 break; case 常量值2: //表达式的值为 value2 时,要执行的代码 break; case 常量值3: //表达式的值为 value3 时,要执行的代码 break; ... ... default: //没有与表达式相匹配的值时,要执行的代码 break; }
使用 switch 语句时必须遵守以下规则:
在一个 switch 语句中可以有任意数量的 case 语句,每个 case 关键字后面要跟一个与表达式比较的值和一个冒号;
case 关键字后面的值必须与 switch 中表达式的值具有相同的数据类型,并且必须是一个常量(也可以理解为是一个固定的值,不会随程序的运行发生改变);
当表达式的值等于 case 中的值时,就会执行 case 后面的语句,在遇到 break 关键字时停止;
当遇到 break 关键字时,switch 语句会停止运行,并跳转到 switch 语句以外的下一行代码继续运行;
并不是每一个 case 语句后面都需要包含 break 关键字,如果 case 语句为空(case 语句后面没有要执行的代码),则可以不包含 break 关键字,这时程序会继续执行后续的 case 语句,直至遇到 break 关键字为止;
C# 不允许从一个 case 语句连续执行到下一个 case 语句,因此如果 case 语句中包含要执行的语句,就必须包含 break 关键字或其他跳转语句;
一个 switch 语句的末尾可以有一个可选的 default(默认选项),当所有 case 语句都不能与表达式相匹配时则会执行 default 部分中的代码。
C# 不支持从一个 case 语句跳转到另一个 case 语句,如果要从一个 case 语句跳转到另一个 case 语句的话,可以使用 goto 语句,例如goto default
。
c# 中switch-case语句中case情形之间可以并列
case 9:case 10:
循环结构
在什么场景下会用到循环结构?
1.在有限的范围内,重复的执行一些事情或者是某些动作(内容不一定是完全相同的
2.假设这个范围是无限的,那么这个循环是没有意义的。
使用for循环可以重复执行一部分代码,
//语法结构 fo(1.初始化语句;2.判断条件;3.变化语句){ //循环代码 } //先执行初始化语句,然后执行判断条件,接下来执行循环体代码,然后执行变化语句,然后再返回到判断条件
备注:
只有当判断条件为真true时,才会执行for循环结构中的循环代码
//第几年可以达到100000人 double a = 5000; int i = 2; for (;a < 100000; i++) { a= (a * 0.25 )+ a; //增加25% } Console.WriteLine($"到第{i}年达到100000人");
//那一年可以累计100000人 int a=100;//第一年为100人 int nian=1; int number=100; for(;a<100000;nian++){ number = (int)(number * 0.3 + number); a = a + number; } Console.WriteLine("到第{0}年累计到100000,具体{1}人", nian, a);
在 C# 中,循环语句还可以嵌套使用,也就是说我们可以在一个 for 循环内再使用一个或多个 for 循环。
``` * ** *** ☆☆☆☆ ☆☆☆☆☆ ☆☆☆☆☆☆ ☆☆☆☆☆☆☆ */ for(int i = 1;i<=7;i++) { for(int j = 1;j<=i;j++) { Console.Write("*"); } Console.WriteLine();// 换行 }
/* * *** ***** ******* ********* *********** ************* */ for(int i = 1;i<=7;i++) { // 先打印空格 for(int j = 1;j<=7-i;j++) { Console.Write(" "); } // 再次打印☆ for(int k = 1;k<=(2*i-1);k++) { Console.Write("*"); } Console.WriteLine(); }
for 循环中,如果判断条件永远不会为假,那么循环将变成无限循环(也叫死循环),我们在定义循环语句时应尽量避免这种情况的出现。
//语法结构 while(布尔表达式){ //循环体代码 当布尔表达式为真true时,执行循环体代码 } //进阶版 //1.定义初始语句,定义一个变量 while(2.布尔表达式)//表达式中用到了上面定义的变量 { //3.循环体代码 //4.变化语句(迭代语句) }
public static void Main(string[] args) { // 计算1-100之间的(偶数和),使用while循环实现 int i = 1; // 定义一个累加和变量 int sum = 0; while(i <= 100) { // 相加 ---偶数和 if(i % 2 == 0) { sum = sum + i; } i++; } }
//温度转换 double a = 1; double b = 0; Console.WriteLine("摄氏度\t\t华氏度"); while (a <= 10) { double c = b * 9 / 5 + 32; Console.WriteLine("{0}\t\t{1}",b,c); b = b + 20; a++; }
//语法结构 /* do { //循环代码 }while(布尔表达式); */ //进阶版 /* //1.定义一个初始变量---初始化语句 do { //2.循环体代码 //3.变化语句---迭代语句 }while(布尔表达式);//4.判断条件 */
// 计算1000以内有多少个水仙花数,分别是谁? // 水仙花数:它是一个三位数,百位的立方+十位的立方+个位的立方和等于这个数本身 int count = 0; // 取值范围:100,1000 int i = 100;// 1 do { // 先获取三位数的百位十位和个位数字 int bai = i / 100; int shi = i / 10 % 10; int ge = i % 10; int sum = bai*bai*bai + shi*shi*shi+ge*ge*ge; if(sum == i) { Console.WriteLine(i);// 2 count++;// 累加1 } // i往大的方向递增1 i++;// 3 }while(i < 1000);// 4 }
Random类
可以实现让程序随机一个指定范围的任意小数或者是任意整数
//使用步骤:两步 //第一步:Random random = new random(); //第二步:1.如果随机整数值-->int random.Next(a,b);//[a,b) a--->最小值 b---> 最大值 包含a但是不包含b //2.如果是随机小数值-->double ranNumber = random.NextDouble();//[0.0,1.0)包含0但是不包含1 // 比如说:随机一个1-100之间的整数值 // 第一步 Random random = new Random(); // 第二步 int ranNumber = random.Next(1,101); Console.WriteLine("在1-100之间随机的整数值为:{0}",ranNumber); // 假设我想要让程序随机一个小数值 Random random2 = new Random(); double ranNumber2 = random2.NextDouble(); Console.WriteLine("在0-1之间随机的小数值为:{0}",ranNumber2);// 0-1之间的小数值 }