4. 流程控制语句
一、分支语句
分支语句:对于要先做判断再做选择的使用分支结构。
1. if 语句
if语句:适合判断一些连续的值。
使用1:
1 if (true) 2 { 3 //条件为真时执行 4 } 5 else 6 { 7 //条件为假时执行 8 }
使用2:
1 //判断多个条件 2 if (true) 3 { 4 //条件为真时执行 5 } 6 else if(true) 7 { 8 //条件为假时执行 9 }
2. switch语句
switch语句:适合判断一些离散的值。
1 //例: 2 static void Main(string[] args) 3 { 4 //2015年31天的月份有1,3,5,8,7,10,12 5 //30天有4,6,9,11 6 //28天有2 7 8 Console.WriteLine("请输入月份数"); 9 int month = int.Parse(Console.ReadLine()); //int.Parse的作用是把string类型转换为int 类型 10 switch (month) 11 { 12 //格式: case 常量表达式:条件语句;break; 13 case 2: 14 Console.WriteLine("本月有28天"); break; //break 结束当前控制语句或循环语句 15 case 4: 16 case 6: 17 case 9: 18 case 11: 19 Console.WriteLine("本月有30天"); break; 20 default: Console.WriteLine("本月有31天"); break; 21 } 22 Console.ReadKey(); 23 }
3. 三位运算符
三位运算符:只适合判断具有两个结果的情况。
1 //格式:条件判断表达式?成立时执行的语句:不成立时执行的语句 2 //例: 3 static void Main(string[] args) 4 { 5 Console.WriteLine("请输入您要比较的数据"); 6 int a = int.Parse(Console.ReadLine()); 7 Console.WriteLine(a < 10 ? "您输入的数值小于10" : "您输入的数值大于等于10"); 8 Console.ReadKey(); 9 }
二、迭代语句
迭代语句:是在程序中重复执行的,直到满足指定条件才停止的一段代码。
1. while语句
格式1:
1 //先判断后执行 2 while (true) 3 { 4 //条件为真时执行 5 }
格式2:
1 //先执行后判断,循环体至少被执行一次 2 do 3 { 4 5 } while (true);
例:
1 static void Main(string[] args) 2 { 3 //在屏幕输出1-50的数值 4 int a = 1; 5 while (a < 51) 6 { 7 Console.WriteLine(a); 8 a++; 9 } 10 Console.ReadKey(); 11 }
2. for 语句
可以记录循环的次数,有效控制循环的方式。
格式:
1 //for(初始条件1;判断条件2;循环条件4) 2 for (int i = 0; i < length; i++) 3 { 4 // 循环语句3 5 }
例1:
1 //例1:求输入数的阶乘 2 static void Main(string[] args) 3 { 4 Console.WriteLine("请输入需要求阶乘的数"); 5 for (;;) //作用是不断循环大括号里面的语句 6 { 7 int a = int.Parse(Console.ReadLine()); 8 int jc = 1; 9 for (int i = 1; i <= a; i++) 10 { 11 jc *= i; 12 } 13 Console.WriteLine("阶乘的结果是" + jc); 14 } 15 }
例2:
1 //例2:输出九九乘法表 2 static void Main(string[] args) 3 { 4 Console.WriteLine("================九九乘法表================"); 5 //外循环控制行,内循环控制列 6 for (int i = 1; i < 10; i++) 7 { 8 for (int j = 1; j <= i; j++) 9 { 10 Console.Write("{0}×{1}={2} ", j, i, j * i); 11 if (i * j < 10) Console.Write(" "); 12 } 13 Console.WriteLine(); 14 } 15 Console.ReadKey(); 16 }
3. foreach语句
foreach语句:遍历集合。foreach循环用于列举出集合中的所有元素。
格式:
1 //var:任意的数据类型。如果数据类型确定,则应该给他具体指定; 2 //collection:需要遍历的集合;item:存储遍历的元素 3 foreach (var item in collection) 4 { 5 6 }
例:
1 //将一个英文句子的单词逐个输出 2 static void Main(string[] args) 3 { 4 Console.WriteLine("请您输入一个英文句子"); 5 string str = Console.ReadLine(); 6 7 //声明一个集合str用于接收用户输入的数据 8 //每一次循环时,从集合中取出一个新的元素值。放到只读变量word中去, 9 //如果括号中的整个表达式返回值为true,foreach块中的语句就能够执行, 10 //一旦集合中的元素都已经被访问到,整个表达式的值则为false,控制流程就转入到foreach块后面的执行语句 11 foreach (char word in str) 12 if (char.IsWhiteSpace(word)) 13 { 14 Console.WriteLine(); 15 } 16 else 17 { 18 Console.Write(word); 19 } 20 Console.ReadKey(); 21 }
三、跳转语句
跳转语句:是程序运行到某一位置时,可以跳转到程序中另一行代码的语句。
1. break语句:
跳出循环体,执行后面的代码。
1)在switch语句中用于从case语句中跳出,结束switch分支语句
2)只能在环循环体内和switch语句体内使用 break 语句。可使程序终止循环而执行循体后面的语句
3)用于跳出迭代语句,结束循环
4)在多层循环中,一个break语句只向外跳一层
例:
1 //通过for迭代语句,输出1-500的数使每10个数为一行,并且当输出数为(2,3,4,5,6,7)这几个数的倍数时跳出循环 2 static void Main(string[] args) 3 { 4 Console.WriteLine("在屏幕上输出1-500的数"); 5 for (int i = 1; i < 501; i++) 6 { 7 if (i % 2 == 0 && i % 3 == 0 && i % 4 == 0 && i % 5 == 0 && i % 6 == 0 && i % 7 == 0) 8 { 9 Console.WriteLine(); 10 Console.WriteLine("为2,3,4,5,6,7的倍数的数为"); 11 Console.WriteLine(i); 12 continue; //这里不能使用Break,使用break将使当前循环停止 13 } 14 if (i % 10 == 0) Console.WriteLine(i); 15 else 16 { 17 Console.Write(i + " "); 18 if (i < 10) Console.Write(" "); 19 if (i < 100) Console.Write(" "); 20 } 21 } 22 Console.ReadKey(); 23 }
2. continue语句
continue语句:结束本次循环,进入下次循环 即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判定。而break语句则是结束整个循环停止运行。
例:
1 //求50以内的奇数 2 static void Main(string[] args) 3 { 4 Console.WriteLine("50以内的奇数为:"); 5 for (int i = 1; i < 51; i++) 6 { 7 if (i % 2 == 0) continue; //停止当前的迭代语句,进入下次循环 8 9 else Console.Write(i + " "); 10 } 11 Console.ReadKey(); 12 }
3. return语句
return语句:只能出现在方法当中
1)从当前方法中退出,返回到该调用方法的语句处继续执行
2)返回一个值给该调用方法的语句,返回值的数据类型必须与方法中的声明的返回值的类型一致,可使用强制类型转换
3)当方法说明中用 void 声明返回类型为空时,应使用格式(2)不返还任何值
格式:
(1)return 表达式;
(2)return ;
1 //例:格式1 2 static void Main(string[] args) 3 { 4 while (true) 5 { 6 Console.WriteLine("请输入三个数,每输入一个数按下回车键"); 7 double a = double.Parse(Console.ReadLine()); 8 double b = double.Parse(Console.ReadLine()); 9 double c = double.Parse(Console.ReadLine()); 10 double avg = average(a, b, c); 11 Console.WriteLine("这三个数的平均数为:{0}", avg); 12 } 13 } 14 static double average(double a, double b, double c) 15 { 16 return (a + b + c) / 3; 17 }
1 //格式2 2 static void Main(string[] args) 3 { 4 5 while (true) 6 { 7 Console.WriteLine("请输入三个数,每输入一个数按下回车键"); 8 double a = double.Parse(Console.ReadLine()); 9 double b = double.Parse(Console.ReadLine()); 10 double c = double.Parse(Console.ReadLine()); 11 average(a, b, c); 12 } 13 } 14 static void average(double a, double b, double c) 15 { 16 Console.WriteLine("这三个数的平均数为:{0}", (a + b + c) / 3); 17 return; 18 }
4. goto语句
goto语句:是跳转语句,他既可以跳转到goto之后的语句也可以跳转到goto之前的语句。
格式:goto 标识符;
//标识符的定义:即为标签名,再加上冒号 ":"
例1:
1 //方法1: 2 static void Main(string[] args) 3 { 4 Console.WriteLine("5阶乘等于几?根据以下选项选择正确的答案:"); 5 Console.WriteLine("1、 5!=5\n2、 5!=10\n3、 5!=20\n4、 5!=60"); 6 7 import: int option = int.Parse(Console.ReadLine()); 8 switch (option) 9 { 10 case 1: 11 case 2: 12 case 3: goto error; 13 case 4: goto right; 14 default: 15 Console.WriteLine("您的选项不存在,请重新输入"); 16 goto import; 17 } 18 error: 19 { 20 Console.WriteLine("很遗憾,您错了!请重新输入:"); 21 goto import; 22 } 23 right: 24 Console.WriteLine("恭喜您,答对了!"); 25 Console.ReadKey(); 26 }
例2:
1 //理论上程序从上往下执行,如果要跳过一段代码可以像下面处理 2 static void Main(string[] args) 3 { 4 int a = 0; 5 Console.WriteLine("5阶乘等于几?根据以下选项选择正确的答案:"); 6 Console.WriteLine("1、 5!=5\n2、 5!=10\n3、 5!=20\n4、 5!=60"); 7 error: 8 { 9 a++; 10 if (a > 1) Console.WriteLine("很遗憾,您错了!请重新输入:"); //声明变量a及if语句只是为了输出Console.WriteLine("")语句,可用其他方法实现 11 } 12 import: int option = int.Parse(Console.ReadLine()); 13 switch (option) 14 { 15 case 1: 16 case 2: 17 case 3: goto error; 18 case 4: goto right; 19 default: 20 Console.WriteLine("您的选项不存在,请重新输入"); 21 goto import; 22 23 } 24 right: 25 Console.WriteLine("恭喜您,答对了!"); 26 27 Console.ReadKey(); 28 }