程序设计基础
登录
< 返回教程列表

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

练习题

  1. 写一个方法 GetMax(int a, int b, int c) 返回三个数的最大值,再写一个 GetMin 返回最小值。

  2. 写一个方法 IsLeapYear(int year),判断是否为闰年,返回 bool。

  3. 写一个方法 ReverseString(string s),返回反转后的字符串(如:"abc" → "cba",禁止调用 Array.Reverse)。

  4. 写一个方法,输入一个整数数组,返回数组中第二大的数。

  5. 用递归方法计算斐波那契数列第 n 项:F(1)=1, F(2)=1, F(n)=F(n-1)+F(n-2),并输出前20项。

  6. 使用 out 参数写一个方法 GetMinMax(int[] arr, out int min, out int max),同时返回数组的最大和最小值。