函数调用,枚举和递归
一:函数调用的时候有这几种形式,一种参数是数组的,可以这样定义,这种参数是数组:
static void paixu(params int[] a)//可以输入数组元素,只能在数组前面加
{
for(int i=1;i<=a.Length-1;i++)
}
用的时候
paixu(3,8,6,4,1);
一种参数是地址的,在变量前面加ref:
static void add(ref int n)//加上REF是传地址
{
}
//主函数里面调用
int a=5;
add(ref a);
一种是函数除了返回目标值之外,加out可以返回其它值,下面这个例子中函数除了返回一个n之外,还可以返回一个p值。
static int add(int n,out int p) //p是输出的一个参数,用out标识,Cshap特有的
{
int m = n * 10;
p = m;
//Console.WriteLine("add函数1:{0}", n);
n = n + 10;
Console.WriteLine("add函数2:{0}", n);
return n;
}
static void Main(string[] sgar)
{
int x = 5;
int b;
x=add(x,out b);
Console.WriteLine("Main函数1:{0}", x);
Console.WriteLine("Main函数2:{0}", b);
}
二:函数前面加注释,为了在以后用到此函数的时候不会忘记此函数的功能,需要加一些注释,这样在使用的时候鼠标放到上面就会显示写好的注释,使用的时候是在函数上面输入///,也就是三个斜杠,输完之后出现这个:
///// <summary>
/// 输入一个数字,返回它的阶乘,这里写函数的功能
/// </summary>
/// <param name="n">这里写n是做什么的:需要求阶乘的值</param>
/// <returns>这里写返回的是什么东西:返回n的阶乘</returns>
static int jiecheng(int n)
{
int jc = 1; int i;
for(i=1;i<=n;i++)
{
jc = jc * i;
}
return jc;
}
三:函数一个是传值另一个是传址;
1.传值就是将实参的值传到所调用的函数里面,实参的值并没有发生变化,默认传值的有int型,浮点型,bool型,char字符型,结构体等等。
2.传址就是将地址传到所调用的函数里面操作,实参的值也会跟着变化,传址的有数组和字符串string,字符串类型比较特殊后面说。
3.上面说的就牵扯到数据的分类,分为值类型和引用类型,值类型的就是传值的那种,引用类型包括字符串类型,数组和对象,上面说字符串类型特殊,主要是因为字符串实际上是一个字符char[]数组,它在修改的时候并不是直接修改,而是新开辟了一个存储空间也就是建立了一个新的字符串,所以它在调用、赋值的时候相当于传值,但它是引用类型的!
四:枚举
枚举enum,用比较好记忆的拼音或者英文来标记数字,下面这个例子里weiruzhi是0,zhengshi 定义它是5,所以往下依次是6,7,tuixiu又定义了9:
//枚举,
enum YuanGongLeiXing
{
WeiRuZhi,
ShiYongQi,
ZhengShi=5,
NeiTui,
JieDiao,
TuiXiu=9
}
struct YuanGong
{
public string name;
public YuanGongLeiXing type;
}
class Program
{
static void Main(string[] args)
{
YuanGong zhangsan=new YuanGong();
zhangsan.name = "张三";
zhangsan.type = YuanGongLeiXing.NeiTui;
Console.WriteLine(zhangsan.name+(int)zhangsan.type);
}
五:递归,递归的特点就是自己调用自己;return 是将数值返回上一级;
刚开始没满足day=7的时候,只循环调用Taozi函数,其它求值之类的都未执行,可以看做是Taozi_1,Taozi_2,。。。Taozi_6,Taozi_7;
在day=7的时候返回了一个值1到Taozi_7中,Taozi_7开始执行求值,求出第六天的桃子N,返回到Taozi_6中,这样继续下去求出了day=1时的桃子数返回
class Program
{
static int Taozi(int day)
{
if (day == 7)
{
return 1;
}
int n = (Taozi(day + 1) + 1) * 2;
return n;
}
static void Main(string[] args)
{
int n = Taozi(1);//求第一天有几个桃子
Console.WriteLine("公园里有{0}个桃子",n);
}