Chap 6 学习笔记-控制结构和过程式编程

本文深入探讨了程序设计中的控制结构,包括分支结构、循环结构及其应用实例,并详细讲解了函数的设计与调用机制。

Chap 6 Notes

---------------------------

 

控制结构名称

详细内容

分支结构

(条件语句)

分支结构首先执行某种类型的测试(判断),根据测试(判断)的结果,执行一段代码,同时跳过其他代码集。

比较运算符

等于 == (双等号!); 不等于 != ;小于 < 大于 > 小于等于 <= 大于等于 >=

If条件语句

If(intAge>=18)

{

   Response.Write(“You are allowed in the club”);

}

--------------------------------------------------------------------

If(strAuto==”Porsche”)

{

   Response.write(“U R driving a Porsche”);

}

else if(strAuto==”Lotus”)

{

   Response.write(“U R driving a Lotus”);

}

else if(strAuto==”Lamborghini”)

{

   Response.write(“U R driving a Lamborghini”);

}

else

{

   Response.write(“Please enter which car U R driving”);

}

逻辑运算符(使用括号可改变逻辑运算符的执行顺序)

逻辑AND(与) &&

(中等优先级)

用于连接两个布尔条件,如果这两个条件都等于true,则该条件就等于true

If(intAge>=18 && intAge<=30)

{

   Response.write(“U R allowed”);

}

逻辑OR(或)   ||

(最低优先级)

只要两个条件中有一个为true,该条件就为true

If(intAge>=18 || name==”liudong”)

{

   Response.write(“U R allowed”);

}

逻辑NOT(非)  !

(最高优先级)

使true条件变为false,使false条件变为true

If(!(intAge<18))

{

   Response.write(“U R allowed”);

}

条件或三元运算符

If(条件语句)

{

   //执行1

}

else

{

   //执行2

}

等价于

(条件语句 ? “执行1” : ”执行2”)

例如

Response.write(“U ordered”+intBooks+”book”+(intBooks!=1?“s”:“”)+”from web”);

比较字符串

可以使用与比较数值相同的方法比较字符串,但只能进行“等于==”和“不等于!=”的比较

switch…case条件语句

1switch语句用一个变量作为其参数;

2、必须显式地退出casedefault代码块,break关键字一般用于标记casedefault块的结尾,这样就把控制权传送给switch语句后面的一行;

3casedefault标签是不缩进的

4switch语句在为一个组值确定执行什么操作时,不能使用比较运算符(如<>等)

switch(Confirmation)

{

case “fax”:

   Message.Text=”Fax”;

   break;

case “Telephone”:

   Message.Text=”Telephone”;

   break;

case “email”:

   Message.Text=”email”;

   break;

default:

   Message.Text=”No Confirmation”;

   break;

}

---------------------------------------------------------------

为多个值执行相同的代码:

switch(Confirmation)

{

case “yes”:

case “Yes”:

case “YES”:

case “Y”:

case “y”:

   Message.Text=”Details will be sent”;

   break;

}

等价于:使用.NET FrameworkToLower()方法把所有变量值改为小写

switch(Confirmation.ToLower())

{

case “yes”:

case “y”:

   Message.Text=”Details will be sent”;

   break;

}

---------------------------------------------------------------

从一个case块显式地跳转到另一个case块:

switch(statement)

{

case option1:

   //Do Sth

   If (Sth condition is met)

   {

      goto case option2;

}

break;

case option2:

   //Do Sth else

   break;

default:

   //Do Sth

   break;

}

循环结构

1、循环结构可以让同一个代码块运行多次

2循环语句可用breakcontinue来中断,对于非嵌套的循环,break语句退出循环,执行循环体下面的语句;对于嵌套循环,break语句只退出内层循环,而外层循环则继续进行。Continue语句可中断本次循环,但不退出循环体,而是继续执行下一次循环

for循环

1、              在知道循环次数的情况下使用for循环

2、              计数器、布尔条件、步长之间必须用分号隔开

3、              整个语句放在括号中

4、              循环体放在花括号中

for(int intCounter=0;intCounter<5;intCounter++)

{

   Response.Write(“GOOD LUCK!!!”);

}

while循环

1、              在不知道迭代次数的情况下,用while循环

2、              在每个循环开始时进行判断,若条件为true,则继续循环

while(a != 100)

{

   a=a+1;

}

do…while循环

这个语法要注意的是while后面的分号和书写格式!

do

{

   a=a+1;

}while(a!=100);

foreach…in循环

1、              该循环用于迭代集合中的项,依次对每个项执行一些操作

2、              循环执行的次数由集合本身的大小决定

foreach(object obj in collection)

{

   //Operate on each obj object

}

函数

函数允许暂缓当前代码的执行,而去运行另一个指定代码块(函数体)中的指令集,再返回到原来的代码

函数概述

1、              当应用程序庞大的时候,在多个地方用到相同程序的机会就很多。ASP.NET允许编写一次(一段)代码,再运行需要的次数,以支持代码主题。这些小段代码称为函数。

2、              函数的执行方式:从ASP.NET代码主题中跳出,运行函数中的命令,再返回来(有或无返回值)执行代码主体

3、              C#中,“函数”又称为“方法”!

定义函数

函数的简单语法

Page_Load()

ToString()

Convert.ToInt32()

等都是函数

返回值类型 函数名(参数类型1 参数名1,参数类型2,参数名2

{

   //函数代码;

}

返回类型和参数

1、函数在内部执行完计算后,就要把结果(返回值)报告给调用代码(代码的主体)。

2、函数主体部分还包括return关键字,后面跟对应返回类型(返回类型在函数定义过程中进行定义!)的值或者变量

string MyFunc(string name,int age)

{

   return “GOOD LUCK!!!”;

}

3、有一种特殊的返回类型,即void,在没有(不需要)返回值的时候使用,若把函数指定为返回void,则不需要return关键字!

void Page_Load()

调用函数

1、调用返回void的函数时:

MyVoidFunction(“Hello”);

2、调用有返回值的函数时,可以(但不必须)提供一个变量来包含(接收)这个值:

string ReturnValue;

ReturnValue=MyFunction();

还可以按如下方式使用(调用)函数:

double payment=15*GetInterestRate()/100;

decimal payment=15*(decimal)GetInterestRate()/100;

3、按值传送参数

1)数值型按值传送参数时,在函数内部处理的是原数据的一个拷贝,并没有对调用代码中原变量的值进行改变

2)在函数开始执行的时候就有了该拷贝,当函数执行结束的时候,该拷贝就消失了

3)相当于有两个变量(函数中和主体调用程序中),每个变量有一个值,并没有在这两个变量间建立联系

void Increment(int Num)

{

   Num=Num+1;

}

void Page_Load()

{

   int A=1;

   Increment(A);

   Message.Text=A.ToString();

}

4、按引用传递参数

1)如果要使函数中进行的计算影响到调用代码中变量的内容,应该按引用传送参数

2)按引用定义函数的时候需要修改函数定义的开头,默认的行为是按引用传送参数,而不是按值传送

void Increment(ref int Num)

{

   Num++;

}

void Page_Load()

{

   int A=1;

   Increment(ref A);

   Message.Text=A.ToString();

}

3)使用上面的方法,等于在函数Increment的变量Num中创建了变量A的引用,所以在函数Increment中对Num变量做的任何改变,都会改变变量A的数据

4)按引用传送参数的行为是对象类型(数据)的默认行为(如Label),也称为引用类型。即只要是对象类型,就默认是按照引用传送参数,而按引用传送参数的实质就是主体代码在调用函数时传递的(包含的)参数的值会随函数的计算结果发生变化

void AddLineToLabel(Label Target,string Line)

{

   Target.Text=Line+”<br>”;

}

void Page_Load()

{

   AddLineToLabel(Message,”Hello World”);

}

HTML中:

<body>

<asp:label id=Message runat=server />

</body>

5、输出参数

1)输出参数的初始化工作是由被调用的函数来完成的,而一般情况下,参数的初始化是由调用函数的代码主体来完成的(参考(3)的书面解释)

2)在C#中一个函数可以给调用代码(代码主体)返回多个值,每个函数调用只能返回一个返回值,函数提供的其他值必须赋予特定的函数参数。

3)参数的第三种类型(除按值传送和按引用传送以外)是其值在函数调用之前并没有设置,而是在函数代码运行时设置,并可以使用。对被调用的函数来说,在函数接收到该参数时,该参数就是只写的。也可以在代码主体中初始化参数的值,但函数会改写这个值

4)学习本节的重点就是注意区分开调用参数(代码主体的参数)的值函数经过内部处理返回的值(函数的返回值)

string SetNum(out int Num)

{

   Num=10;

   Return “OK”;

}

void Page_Load()

{

   int A;   //在主体部分并没有对变量A进行赋值(初始化)

   string ReturnValue=SetNum(out A);

   //注意,上边的行定义了一个字符串变量来接收函数的返回值

   Message1.Text=A.ToString();

   Message2.Text=”<br>”+ReturnValue;

}

5)使用.NET框架基类函数TimeSpan.FromDays()执行日期算法

DateTime FindDueDate(DateTime CheckOutDate)

{

   return CheckOutDate+TimeSpan.FromDays(16);

}

6)允许把TimeSpan类型的数据加到DateTime类型的数据上,以计算天数

7)使用DateTime DT=DateTime.Now;语句可以得到系统目前的时间

变量的作用域

概述

1、变量可以在函数内有一个值,在函数外有另一个值。即如果第一个(代码主体)调用修改了函数内部的变量的值,当以后第二个(代码主体)调用访问该函数的时候,第一个调用对函数中变量的值做的任何修改都不会反映出来,变量原来的值没有变化

2、变量是有作用域的,作用域是指有效的代码区域。有局部作用域的变量只存在于一个函数中,不能在函数的外部使用;有全局作用域的变量的值不仅可以在调用的代码中使用,还可以在页面的任何一部分使用

3、局部变量只在部分页面上有效,对页面上的其他部分没有影响,这对提高性能有一定的作用。因为.NET运行的时候只需要跟踪它很短的时间,不需要在页面的整个生命周期内跟踪它,所以耗费的资源比较少。当函数使用完(局部)变量后,内存就被释放

局部变量

1、在每次外部调用该函数的时候,函数中的变量的值根据传入的参数的值进行计算(处理),计算(处理)结束后,函数将返回值传回调用代码(主体)。此时已执行到函数外部,函数内的变量已经被释放。当下一次调用到来的时候,函数又会根据新的参数的值,计算出新的返回值并返回给调用代码,然后再次释放函数中变量的值

2、不能在同一个作用域中两次创建同一个变量,即不能在同一个作用域中有两个同名的变量

3、块级局部变量:具有块级作用域,表示在一个代码块中定义的变量只在界定该代码块范围的{}中有效。这样的代码块如:ifelse ifelse块、switch块、任何循环结构块、trycatch块等

4、过程级局部变量:指的是在函数内定义和初始化的局部变量

全局变量

1、全局变量需要在所有函数的外部进行声明和初始化

2、全局变量的生命周期从ASP.NET页面的启动开始,一直到该页面结束为止,跨越了脚本中创建的所有函数

       

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值