.net技术第四章----程序流程和异常处理

时间:2022-11-05 16:53:27

前言

  • 顺序结构

  • 选择结构
    if语句、switch语句

  • 循环结构
    for语句、while语句、do…while语句和foreach语句

  • 跳转语句
    goto、break、continue、return、throw

  • C#异常处理

顺序结构

  • C#程序中语句执行的基本顺序按各语句出现位置的先后次序执行
    .net技术第四章----程序流程和异常处理

选择结构

  • 两种控制分支的条件语句:if语句和switch语句

.net技术第四章----程序流程和异常处理

  • 单分支结构
    if (条件表达式)
    语句/语句块statement(s);

  • 双分支结构
    if (条件表达式)
    语句/语句块1;
    else
    语句/语句块2;

  • 多分支结构

if (条件表达式1)
语句/语句块1;
else if (条件表达式2)
语句/语句块2;

else if (条件表达式n)
语句/语句块n;
[else
语句/语句块n+1;]

循环结构

  • C#提供4种不同的循环机制:for、while、do…while、foreach

for循环语句

计数型循环语句,一般用于已知循环次数的情况,所以也称为定次循环

for (initializer; condition; iterator)
{
   循环体语句序列;
}

sumOdd =0; sumEven = 0for (int i=1; i<=100;i+=2) sumOdd +=i;
for (int i=2; i<=100;i+=2) sumEven +=i;

while循环

while(条件表达式)
{
循环体语句序列;
}

do…while循环

该循环的测试条件在执行完循环体之后执行,而while循环的测试条件在执行循环体之前执行

do
{
循环体语句序列;
} while(条件表达式);

int i = 1; int sum = 0;
do
{
     sum += i; i++; //1~100中所有数的和
} while (i <= 100);

foreach循环

用于循环访问数组或集合以获取所需信息

foreach( 类型名称 变量名称 in 数组或集合名称)
{
   循环体语句序列;
}
int[] myArray = new int[3] { 10, 20, 30 };  //3个整数的整数数组
foreach (int item in myArray) Console.Write(item+" "); //输出整数数组各元素

循环的嵌套

在一个循环体内又包含另一个完整的循环结构,称为多重循环结构

          String s;
            for (int i = 1; i <= 9; i++)
            {
                s = "";
                for (int j = 1; j <= 9; j++)
                {   //字符串左对齐,在右边用空格填充以达到指定的总长度8
                    s += (String.Format("{0}*{1}={2}", i, j, i * j)).PadRight(8);
                }
                Console.WriteLine(s);
            }

跳转结构

使用跳转语句执行分支,该语句导致立即传递程序控制
goto
break
continue
return
throw

goto语句

将程序控制直接转到由标签标记的语句
goto identifier;
goto case 常量表达式;
goto default;

        int i = 1, sum = 0;
        loop:
            if (i <= 100)
            {
                sum += i; i++; goto loop;
            }

break语句

  • 在多分支选择switch结构中的作用是跳出switch结构,继续执行switch语句的后继语句

  • break语句还可以用于退出for、foreach、while或do…while循环,即提前结束循环,接着执行循环语句的后继语句

continue语句

  • 类似于break,也必须在for、foreach、while或do…while循环中使用

  • continue语句仅结束本次循环,并返回到循环的起始处,循环条件满足的话就开始执行下一次循环

  • break语句则是结束循环,跳转到循环的后继语句执行

  • continue语句只应用于最里层的语句。若要穿越多个嵌套层转移控制,必须使用goto语句

return语句

终止它出现在其中的方法的执行,并将控制返回给调用方法

int j = 0;
for (int i =100; i<= 200; i++)
{
    if(i%3==0) continue;
    Console.Write({0}, i);
    j++;
    if(j%10==0) Console.WriteLine();
}
static double CalculateArea(int r)   // 计算面积
        {
            double area = r * r * Math.PI;
            return area; //方法CalculateArea以double值的形式返回变量Area
        }

C#异常处理

三种错误:编译错误,运行时错误,逻辑错误

C#采用异常来处理系统级和应用程序级的错误状态,如:零除异常、下标越界、I/O错误等
try
{
// 可能引发异常的语句
}
catch (异常类型 异常变量)
{
// 在异常发生时执行的代码
}
finally
{
// 最终必须执行的代码(即使发生异常),如释放资源等
}

        int i1 = 1, i2 = 0, i3, i4;
        try
        {
            i3 = i1 / i2;                     //自动抛出异常DivideByZeroException
        }
        catch (DivideByZeroException e)
        {
            Console.WriteLine("零除错误!");
        }
        try
        {
            i4 = Int32.Parse("abc");       //自动抛出异常System.FormatException
        }
        catch (FormatException e)
        {
            Console.WriteLine("数值字符串格式错误!");
            throw e;                     // 重新抛出异常
        }
  • try-catch语句:一个try块后接一个或多个catch块

  • try-finally语句:一个try块后接一个finally块

  • try-catch-finally语句:一个try块后接一个或多个catch块,后面再跟一个finally块

  • 内置异常类:System.Exception

【例4.23】自定义异常示例(InvalidNumberException.cs)。创建自定义异常,处理应用程序中出现负数参数的异常(例如,学生成绩处理类,不容许成绩为负数)

【例4.24】CLR自动抛出异常示例(ExceptionThrowByCLR.cs)

【例4.25】程序代码抛出异常示例(TryCopyObject.cs):调用方法,如果传入参数为null,则抛出异常

【例4.26】捕获处理异常示例(TryCatchTest.cs)