< 返回教程列表
1.6 方法(函数)
知识介绍
方法的语法结构:
[访问修饰符] 返回类型 方法名(参数列表)
{
// 方法体
return 返回值;
}
示例1:无参无返回值
void SayHello()
{
Console.WriteLine("Hello World!");
}
示例2:有参有返回值
int Add(int a, int b)
{
return a + b;
}
// 调用
int r = Add(3, 5); // 8
参数传递方式:
// 值传递(默认,副本)
void ChangeVal(int x)
{
x = 999; // 外部不变
}
// ref 引用传递(传入变量必须先赋值)
void ChangeByRef(ref int x)
{
x = 999; // 外部同步变化
}
// out 输出参数(方法内必须赋值)
bool TryDivide(int a, int b, out int result)
{
result = 0;
if (b == 0) return false;
result = a / b;
return true;
}
方法重载:
方法名相同,参数列表(类型/个数/顺序)不同,与返回值无关。
int Max(int a, int b) { return a > b ? a : b; }
double Max(double a, double b){ return a > b ? a : b; }
int Max(int a, int b, int c) { return Max(Max(a, b), c); }
递归:方法调用自身
// 阶乘:n! = n × (n-1)! ,0! = 1
int Factorial(int n)
{
if (n <= 1) return 1; // 递归出口
return n * Factorial(n - 1);
}
例题
例题1: 写一个判断素数的方法,返回 bool。
bool IsPrime(int n)
{
if (n < 2) return false;
for (int i = 2; i * i <= n; i++)
{
if (n % i == 0) return false;
}
return true;
}
// 调用:找出 1~100 中所有素数
for (int i = 2; i <= 100; i++)
if (IsPrime(i)) Console.Write(i + " ");
例题2: 用方法重载实现不同类型数组的求和。
int SumArray(int[] arr)
{
int sum = 0;
foreach (int n in arr) sum += n;
return sum;
}
double SumArray(double[] arr)
{
double sum = 0;
foreach (double n in arr) sum += n;
return sum;
}
int[] nums1 = { 1, 2, 3 };
double[] nums2 = { 1.1, 2.2, 3.3 };
Console.WriteLine(SumArray(nums1)); // 6
Console.WriteLine(SumArray(nums2)); // 6.6
练习题
写一个方法
GetMax(int a, int b, int c)返回三个数的最大值,再写一个GetMin返回最小值。写一个方法
IsLeapYear(int year),判断是否为闰年,返回 bool。写一个方法
ReverseString(string s),返回反转后的字符串(如:"abc"→"cba",禁止调用Array.Reverse)。写一个方法,输入一个整数数组,返回数组中第二大的数。
用递归方法计算斐波那契数列第 n 项:F(1)=1, F(2)=1, F(n)=F(n-1)+F(n-2),并输出前20项。
使用
out参数写一个方法GetMinMax(int[] arr, out int min, out int max),同时返回数组的最大和最小值。