函数
优势:1、代码可以重用;2、代码相对独立;3、便于分工
编程尽量做到:高内聚,低耦合(程序的各个部分尽量相对独立,减少交叉)
函数的定义及调用。例:
1 //定义一个求最大值函数 2 static int Max(int a, int b) //a,b为形参(形式参数),函数的输入 3 { 4 if (a >= b) 5 { 6 return a; //如果a>=b,那么返回值为a 7 } 8 else 9 return b; //如果a<b,那么返回值为b 10 } 11 12 static void Main(string[] arge) 13 { 14 //调用函数 15 int a = 3, b = 6, c = 1, d = 4; 16 int z = Max(Max(Max(a, b), c), d); //a,b,c,d为实参(实际参数) 17 Console.WriteLine(z); 18 19 }
//static int JieCheng(int n) //定义的函数返回整数值 static void JieCheng(int n) // 定义的函数不返回值 { int jc = 1; for (int i = 1; i <= n; i++) { jc = jc * i; } //return jc; Console.WriteLine(jc); } static void Main(string[] args) { int m = 7; //int jg = JieCheng(m); //返回值的函数的调用 //Console.WriteLine("结果为:"+jc); JieCheng(m); //不返回值的函数的调用 }
运行结果如下
传值与传址
1、传值。实参将数值传给形参,实参不受影响。整型、浮点型、字符型、布尔型、结构体都是用传值。
例:
1 static void Add(int n) 2 { 3 Console.WriteLine("add1," + n); 4 n = n + 10; 5 Console.WriteLine("add2," + n); 6 } 7 static void Main(string[] args) 8 { 9 int x = 3; 10 Console.WriteLine("main1,"+x); 11 Add(x); 12 Console.WriteLine("main2,"+x); 13 }
显示结果如下
2、传址。形参根据所传地址使用实参数值。数组、字符串使用的是传址。如果整型等使用传址,方法是在定义形参前加ref,不推荐整型等使用传址。
例:
static void Add(ref int n) //定义形参前加ref,此方法为传址。 { Console.WriteLine("add1," + n); n = n + 10; Console.WriteLine("add2," + n); } static void Main(string[] args) { int x = 3; Console.WriteLine("main1,"+x); Add(ref x); //调用函数时,也需要在实参前加ref Console.WriteLine("main2,"+x); }
显示结果如下
当定义函数,需要的返回值不止一个的时候,可以用out。
1 static int Add(int a,int b,out int c,out int d) //当需要不止一个返回值时,用out,out可以用多个 2 { 3 c = a + 5; 4 d = b + 3; 5 int sum = a + b; 6 return sum; 7 } 8 static void Main(string[] args) 9 { 10 int i = 12, j = 11; 11 int x = 0; //定义一个整型接收返回值 12 int y = 0, z = 0; //定义两个变量,用来接收out返回值 13 x = Add(i, j, out y,out z); //变量前面也要加out 14 Console.WriteLine(x + " " + y + " " + z);15 }
显示结果如下
简化数组输入(用params)
1 static int[] PaiXu(params int[] a) 2 { 3 for (int i = 0; i < a.Length; i++) //按升序排序 4 { 5 for (int j = 1; j < a.Length; j++) 6 if (a[j] < a[j - 1]) 7 { 8 int c = a[j]; 9 a[j] = a[j - 1]; 10 a[j - 1] = c; 11 } 12 } 13 return a; //返回数组a 14 } 15 16 static void Main(string[] args) 17 { 18 int[] x = new int[5]; //定义一个数组,用来接收返回数组 19 x = PaiXu(4, 7, 1, 8, 3); //函数定义的时候用了params,所以()内可以直接输入数值 20 //输出 21 for (int i = 0; i < 5; i++) 22 { 23 Console.Write(x[i] + " "); 24 } 25 26 }
显示结果如下