C#的语法----程序结构(1)
接下来的内容是整个C#学习的脉络,它将各个知识点串联了起来,是整个C#的重点,所以篇幅较长。
首先,我们类比一下PLC和C#执行代码的方式,其实不难发现都是顺序扫描,以Main为程序入口,从上到下一行一行执行。这属于顺序结构。下面我们看看已下几种结构
(1)分支结构:if if-else
(2)选择结构:if-else-if switch-case
(3)循环结构:while do-while for foreach
首先先分享分支结构的用法
if语句
语法:
if(判断条件)
{
要执行的代码;
}
判断条件:一般为关系表达式或者bool类型的值。
执行过程:程序运行到if处,首先判断判断条件,若为true则执行{}中的程序,如果返回false,则继续向下执行。
即先判断在执行。
if else语句
语法:
if(判断条件)
{
执行代码1;
}
else
{
执行代码2;
}
执行过程:程序执行到if处,首先判断判断条件是否诚意,返回true,则执行代码1,否则执行代码2。用于两种情况的判断。
注意:else永远和离他最近的那个if配对。
这里我们还要去提到一个if-else的一个简化版用法,若语法条件不是很复杂可以这样使用:
(表达式)?(result1):(result2)
if else-if语句
作用:用来处理多条件的区间的判断。
语法:
if(判断条件1)
{
要执行的语句1;
}
else if(判断条件2)
{
要执行的语句2;
}
else if(判断条件3)
{
要执行的语句3;
}
else
{
要执行的语句4;
}
.....
执行过程:程序首先判断判断条件1,条件成立,执行语句1,否则执行判断条件2,成立跳出,否则继续执行语句3.如果都不成立则执行最后else语句。(else语句可以省略)
所以总结一下:if处理一种情况,if-else处理两种情况,if else-if处理多种情况。
try-catch异常捕获
问题引出:语法上没有错误,在程序运行过程当中,由于某些原因程序出现了错误,不能在正常的运行。
下面我们看一段代码:
1 Console.WriteLine("请输入一个数字"); 2 int number = Convert.ToInt32(Console.ReadLine()); 3 4 Console.WriteLine(number*2); 5 Console.ReadKey();
我们正常输入int类型数字时,是没有问题的,但是我们呢要是输入类似“123ab”这样的数字,系统就会抛异常,程序停止运行。这时,
若想你的程序变得坚强,就会用到try-catch进行异常捕获。
就是哪里可能会出问题就将他try起来。
语法:
try
{
可能会出现异常的代码;
}
catch
{
出现异常后要执行的代码;
}
执行过程:如果try中的代码没有出现异常,那么catch中的代码就不会执行。
更改后的代码如下:
1 int number = 0; 2 Console.WriteLine("请输入一个数字"); 3 try 4 { 5 int number = Convert.ToInt32(Console.ReadLine()); 6 Console.WriteLine(number*2); 7 } 8 catch 9 { 10 Console.WriteLine("输入的内容不能转换成数字"); 11 } 12 Console.ReadKey();
这里要注意变量的作用域,变量的作用域就是你能使用到这个变量的范围,一般是从声明他的那个括号开始到那个括号对应的括号结束。
注意:try-catch之间不允许有代码,要紧密相连。
下面看这样一个练习:
李四的年终工作评定,若为A,工资涨500,为B,工资涨200,为C工资不变,若为D工资降200,若为E,工资降500.原工资为5000
要求输入李四评级,然后显示李四来年的工资。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 草稿 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 double salary = 5000; 14 Console.WriteLine("请输入对李四的年终评定"); 15 string level = Console.ReadLine(); 16 if (level=="A") 17 { 18 salary += 500; 19 } 20 else if (level=="B") 21 { 22 salary += 200; 23 } 24 else if (level == "C") 25 { 26 salary += 0; 27 } 28 else if (level == "D") 29 { 30 salary -= 200; 31 } 32 else if (level == "E") 33 { 34 salary -= 500; 35 } 36 else 37 { 38 Console.WriteLine("输入有误程序退出"); 39 } 40 Console.WriteLine("李四来年的工资是{0}",salary); 41 Console.ReadKey(); 42 } 43 } 44 }
但是以上代码会有问题,就是当你输入的为ABCDE以外的字母时,会发生一下问题:
也就是在执行完else代码后 最后的Console.WriteLine("李四来年的工资是{0}",salary);不应该输出为了解决这个问题,我们可以用以下方法解决。也就是用一个标志位。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 草稿 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 bool b = true; 14 double salary = 5000; 15 Console.WriteLine("请输入对李四的年终评定"); 16 string level = Console.ReadLine(); 17 if (level=="A") 18 { 19 salary += 500; 20 } 21 else if (level=="B") 22 { 23 salary += 200; 24 } 25 else if (level == "C") 26 { 27 salary += 0; 28 } 29 else if (level == "D") 30 { 31 salary -= 200; 32 } 33 else if (level == "E") 34 { 35 salary -= 500; 36 } 37 else 38 { 39 Console.WriteLine("输入有误程序退出"); 40 b = false; 41 } 42 if (b) 43 { 44 Console.WriteLine("李四来年的工资是{0}", salary); 45 } 46 47 Console.ReadKey(); 48 } 49 } 50 }