1.函数的定义和使用
数学中函数的定义
编程:函数是一段已经封装好的,能够实现某种功能的代码。
过程和函数
作用:
可以使代码清晰;实现代码的复用
1)定义
格式1:
static void 函数名(参数列表){
函数体;
}
格式2:
static 函数返回值类型 函数名(参数列表){
函数体;
return (返回值); // 或者写成return 返回值;
}
2)使用
3)参数和返回值
形参和实参
返回值:return
思考:
return语句可不可以放在函数体的中间位置
允许出现多个return吗
参数列表格式:
参数类型1 参数名称1, 参数类型2 参数名称2……
4)案例
使用数组作为参数,返回数组中的最大值
值参数:
使用参数时,把值传递给函数;在函数体对该变量进行改变,不会影响函数的参数
引用参数格式:
ref 参数类型 参数名称
说明:
1)在函数调用时要再次指定它为引用参数(输出参数也是如此,调用时必须声明为输出参数)
2)函数可能会改变引用参数变量的值,所以它不可以是“常量”,并且该变量必须初始化过(out参数不需要)。
3) ref 或 out可以构成函数的重载
案例:
int []a={1,2,3,4,5};
int []b=a;
b[2]=100;
使用函数,交换两个变量的值(普通参数为什么不能交换?)
输出参数格式:
out 参数类型 参数名称
out 型参数只能用来从函数返回结果,而不能用来向函数传递数据。在函数结束前,必须为 out 型参数赋值。
可选参数(默认参数),是指给方法的特定参数指定默认值,在调用方法时可以省略掉这些参数
注意:
1)可选参数必须位于所有的必选参数之后
2)可选参数必须指定一个默认值,且默认值必须是一个常量表达式,不能为变量
3)所有可选参数以后的参数都必须是可选参数
通过命名参数调用,实参顺序可以和形参不同。
例如:
int s=sum(a:5,b:6);
命名参数必须出现在已指定的所有固定参数之后。一旦某个参数命名,它后面的均需命名。
格式:
params 参数类型[ ]参数名称
说明:
1)只允许存在一个参数数组
2)这个参数必须是参数列表的最后一个参数
案例:
使用参数数组求一组数的和
Main()函数是c#程序的入口,执行这个函数就是执行应用程序
格式:
static void Main()
static int Main()
static void Main(string[ ]args)
static int Main(string[ ]args)
结构类型不仅可以存储多个不同类型的数据元素,还可以包含函数
说明:
结构函数一般不使用static修饰符
允许创建多个同名函数,每个函数使用不同的参数类型
说明:
1)参数的个数不同或者参数的类型不同(形参名字不同不构成函数重载)
2)只是返回值类型不同不构成函数的重载
思考:
一个函数可以调用其他函数,可不可以调用自身?
一个函数直接或间接调用自己本身,这种函数叫递归函数。
递归能使程序变得简洁和清晰。
注意:每次递归调用都必须有结束条件判断-也就是说是有条件的,无条件递归调用将会成为死循环而不能正常结束。
案例:
1)阶乘
f(n)=n*f(n-1)
结束条件:n=0时返回1
2)斐波那契数列-Fibonacci
1,1,2,3,5,8,13,21……
数列的第一、二项为1
从第三项开始,数列的每一项是前两项的和
f(n)=f(n-1) f(n-2)
结束条件:n=1或n=2时返回1