[C#]基本程序结构Ⅰ主程序与语句
主程序
namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { Console.WriteLine("Hello, World!"); Console.ReadKey(); } } }
判断
①if
using System; namespace ConsoleApp { class TestClass { static void Main(string[] args) { // Display the number of command line arguments. Console.WriteLine(args.Length); DisplayWeatherReport(15.0); // Output: Cold. DisplayWeatherReport(24.0); // Output: Perfect! DisplayMeasurement(45); // Output: The measurement value is 45 DisplayMeasurement(-3); // Output: Warning: not acceptable value! The measurement value is -3 DisplayCharacter('f'); // Output: A lowercase letter: f DisplayCharacter('R'); // Output: An uppercase letter: R DisplayCharacter('8'); // Output: A digit: 8 DisplayCharacter(','); // Output: Not alphanumeric character: , Console.ReadKey(); } //包含 else 部分的 if 语句根据布尔表达式的值选择两个语句中的一个来执行 static void DisplayWeatherReport(double tempInCelsius) { if (tempInCelsius < 20.0) { Console.WriteLine("Cold."); } else { Console.WriteLine("Perfect!"); } } //不包含 else 部分的 if 语句仅在布尔表达式计算结果为 true 时执行其主体 static void DisplayMeasurement(double value) { if (value < 0 || value > 100) { Console.Write("Warning: not acceptable value! "); } Console.WriteLine($"The measurement value is {value}"); } //可嵌套 if 语句来检查多个条件 static void DisplayCharacter(char ch) { if (char.IsUpper(ch)) { Console.WriteLine($"An uppercase letter: {ch}"); } else if (char.IsLower(ch)) { Console.WriteLine($"A lowercase letter: {ch}"); } else if (char.IsDigit(ch)) { Console.WriteLine($"A digit: {ch}"); } else { Console.WriteLine($"Not alphanumeric character: {ch}"); } } } }
②switch
using System; namespace ConsoleApp { class TestClass { static void Main(string[] args) { // Display the number of command line arguments. Console.WriteLine(args.Length); DisplayMeasurement(-4); // Output: Measured value is -4; too low. DisplayMeasurement(5); // Output: Measured value is 5. DisplayMeasurement(30); // Output: Measured value is 30; too high. DisplayMeasurement(double.NaN); // Output: Failed measurement. DisplayMeasurements(3, 4); // Output: First measurement is 3, second measurement is 4. DisplayMeasurements(5, 5); // Output: Both measurements are valid and equal to 5. Console.ReadKey(); } //switch 语句根据与匹配表达式匹配的模式来选择要执行的语句列表 static void DisplayMeasurement(double measurement) { switch (measurement) { case < 0.0: Console.WriteLine($"Measured value is {measurement}; too low."); break; case > 15.0: Console.WriteLine($"Measured value is {measurement}; too high."); break; case double.NaN: Console.WriteLine("Failed measurement."); break; default: Console.WriteLine($"Measured value is {measurement}."); break; } } //Case guard附加条件 static void DisplayMeasurements(int a, int b) { switch ((a, b)) { case ( > 0, > 0) when a == b: Console.WriteLine($"Both measurements are valid and equal to {a}."); break; case ( > 0, > 0): Console.WriteLine($"First measurement is {a}, second measurement is {b}."); break; default: Console.WriteLine("One or both measurements are not valid."); break; } } } }
循环
①for
using System; namespace ConsoleApp3 { class TestClass { static void Main(string[] args) { //在指定的布尔表达式的计算结果为 true 时,for 语句会执行一条语句或一个语句块 for (int i = 0; i < 3; i++) { Console.Write(i); } //for 语句的所有部分都是可选的 for (; ; ) { //... } Console.ReadKey(); } } }
②foreach
using System; using System.Collections.Generic; namespace ConsoleApp3 { class TestClass { static void Main(string[] args) { //foreach 语句为类型实例中实现 System.Collections.IEnumerable 或 System.Collections.Generic.IEnumerable<T> 接口的每个元素执行语句或语句块 var fibNumbers = new List<int> { 0, 1, 1, 2, 3, 5, 8, 13 }; foreach (int element in fibNumbers) { Console.Write($"{element} "); } } } }
③do
using System; namespace ConsoleApp3 { class TestClass { static void Main(string[] args) { //在指定的布尔表达式的计算结果为 true 时,do 语句会执行一条语句或一个语句块。 由于在每次执行循环之后都会计算此表达式,所以 do 循环会执行一次或多次。 //这不同于 while 循环(该循环执行零次或多次)。 int n = 0; do { Console.Write(n); n++; } while (n < 5); } } }
④while
using System; namespace ConsoleApp3 { class TestClass { static void Main(string[] args) { //在指定的布尔表达式的计算结果为 true 时,while 语句会执行一条语句或一个语句块。 由于在每次执行循环之前都会计算此表达式,所以 while 循环会执行零次或多次。 //这不同于 do 循环,该循环执行一次或多次。 int n = 0; while (n < 5) { Console.Write(n); n++; } } } }
中断
①break
using System; namespace ConsoleApp3 { class TestClass { static void Main(string[] args) { //终止最接近的循环或switch,将控制权转交给已终止语句后面的语句(若有) //在嵌套循环中,break 语句仅终止包含它的最内部循环 //在循环内使用 switch 语句时,switch 节末尾的 break 语句仅从 switch 语句中转移控制权,包含 switch 语句的循环不受影响 int[] numbers = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; foreach (int number in numbers) { if (number == 3) { break; } Console.Write($"{number} "); } Console.WriteLine(); Console.WriteLine("End of the example."); for (int outer = 0; outer < 5; outer++) { for (int inner = 0; inner < 5; inner++) { if (inner > outer) { break; } Console.Write($"{inner} "); } Console.WriteLine(); } double[] measurements = { -4, 5, 30, double.NaN }; foreach (double measurement in measurements) { switch (measurement) { case < 0.0: Console.WriteLine($"Measured value is {measurement}; too low."); break; case > 15.0: Console.WriteLine($"Measured value is {measurement}; too high."); break; case double.NaN: Console.WriteLine("Failed measurement."); break; default: Console.WriteLine($"Measured value is {measurement}."); break; } } Console.ReadKey(); } } }
②contiune
using System; namespace ConsoleApp3 { class TestClass { static void Main(string[] args) { //continue 语句启动最接近的封闭迭代语句(即 for、foreach、while 或 do 循环)的新迭代 for (int i = 0; i < 5; i++) { Console.Write($"Iteration {i}: "); if (i < 3) { Console.WriteLine("skip"); continue; } Console.WriteLine("done"); } } } }
③return
using System; namespace ConsoleApp3 { class TestClass { static void Main(string[] args) { //return 语句终止它所在的函数的执行,并将控制权和函数结果(若有)返回给调用方 //如果函数成员不计算值,可使用不带表达式的 return 语句 //通常使用不带表达式的 return 语句提前终止函数成员,如果函数成员不包含 return 语句,则在执行其最后一个语句后终止 //如果函数成员计算值,可使用带表达式的 return 语句 Console.WriteLine("First call:"); DisplayIfNecessary(6); Console.WriteLine("Second call:"); DisplayIfNecessary(5); void DisplayIfNecessary(int number) { if (number % 2 == 0) { return; } Console.WriteLine(number); } double surfaceArea = CalculateCylinderSurfaceArea(1, 1); Console.WriteLine($"{surfaceArea:F2}"); // output: 12.57 double CalculateCylinderSurfaceArea(double baseRadius, double height) { double baseArea = Math.PI * baseRadius * baseRadius; double sideArea = 2 * Math.PI * baseRadius * height; return 2 * baseArea + sideArea; } Console.ReadKey(); } } }
④goto
using System; class Program { static void Main(string[] args) { int count = 1; login: Console.WriteLine("请输入用户名"); string username = Console.ReadLine(); Console.WriteLine("请输入密码"); string userpwd = Console.ReadLine(); if (username == "aaa" && userpwd == "123") { Console.WriteLine("登录成功"); } else { count++; if (count > 3) { Console.WriteLine("用户名或密码错误次数过多!退出!"); } else { Console.WriteLine("用户名或密码错误"); goto login;//返回login标签处重新输入用户名密码 } } } }