11.变长参数和参数默认值

11.函数-变长参数和参数默认值


11.1 知识点

函数语法复习

函数的基本语法如下:

// 1. 静态关键词,目前对于我们来说必须写
// 2. 返回值,没有返回值填void,可以填写任意类型的变量
// 3. 函数名,帕斯卡命名法
// 4. 参数可以是0~n个,前面可以加 ref 和 out 用来传递想要在函数内部改变内容的变量
// 5. 如果返回值不是 void,则必须有 return 对应类型的内容
static void 函数名(参数类型 参数1, 参数类型 参数2......)
{
    // 函数体
    // 可以包含逻辑、条件语句、循环等
    // 如果有返回值,使用 return 返回
}

变长参数关键字 params

主函数外 class 语句块内

含有变长参数关键字的函数示例:

static int Sum(params int[] arr)
{
    int sum = 0;
    for (int i = 0; i < arr.Length; i++)
    {
        sum += arr[i];
    }
    return sum;
}

// 含有变长参数关键字又含有其他普通参数的函数
static void Eat(string name, string food, params string[] things)
{
    // 函数体
}

主函数内

Sum();                                      // 0
Sum(1, 2, 3, 4, 5, 6, 7, 8, 1, 22, 456, 123, 1); // 639

参数默认值(可选参数)

主函数外 class 语句块内

含有参数默认值的函数示例:

static void Speak(string str = "我没什么话可说")
{
    Console.WriteLine(str);
}

// 含有参数默认值的参数又含有没有参数默认值的函数
static void Speak2(string a, string test, string name = "韬老狮", string str = "我没什么话可说")
{
    // 函数体
}

主函数内

Speak();        // 我没什么话可说
Speak("123123"); // 123123

总结

变长参数关键字 params

  • 作用: 可以传入 n 个同类型参数,n 可以是 0。
  • 注意事项:
    • params 后面必须是数组,意味着只能是同一类型的可变参数。
    • 变长参数只能有一个。
    • 必须在所有参数最后写变长参数。

参数默认值(可选参数)

  • 作用: 可以给参数默认值,使用时可以不传参,不传就用默认的;传了就用传的。
  • 注意事项:
    • 可选参数可以有多个。
    • 正常参数必须写在可选参数前面,可选参数只能写在所有参数的后面。

11.2 知识点代码

using System;

namespace Lesson09_变长参数和参数默认值
{
    class Program
    {
        #region 知识点一 函数语法复习
        //    1    2     3                  4
        //static void 函数名(参数类型 参数1, 参数类型 参数2......)
        //{
        //       5
        //    return 返回值;
        //}
        //1.静态关键词 可选,目前对于我们来说必须写
        //2.返回值,没有返回值填void 可以填写任意类型的变量
        //3.函数名,帕斯卡命名法
        //4.参数可以是0~n个  前面可以加   ref和 out 用来传递想要在函数内部改变内容的变量
        //5.如果返回值不是void 那么必须有return对应类型的内容  return可以打断函数语句块中的逻辑 直接停止后面的逻辑
        #endregion

        #region 知识点二 变长参数的声明与关键词
        //主函数外 class语句块内

        //举例  函数要计算 n个整数的和
        //static int Sum(int a, int b,..........)

        //变长参数关键字 params
        static int Sum(params int[] arr)
        {
            int sum = 0;
            for (int i = 0; i < arr.Length; i++)
            {
                sum += arr[i];
            }
            return sum;
        }

        //params int[] 意味着可以传入n个int参数 n可以等于0  传入的参数会存在arr数组中
        // 注意:
        //1.params关键字后面必为数组
        //2.数组的类型可以是任意的类型
        //3.函数参数可以有 别的参数和 params关键字修饰的参数
        //4.函数参数中只能最多出现一个params关键字 并且一定是在最后一组参数 前面可以有n个其它参数
        //5.如果params关键字后仍有参数 会报错

        //举例
        static void Eat( string name, string food, params string[] things)
        {

        }

        #endregion

        #region 知识点三 参数默认值

        //主函数外 class语句块内

        //有参数默认值的参数 一般称为可选参数
        //作用是 当调用函数时可以不传入参数,不传就会使用默认值作为参数的值
        static void Speak(string str = "我没什么话可说")
        {
            Console.WriteLine(str);
        }


        //注意:
        //1.支持多参数默认值 每个参数都可以有默认值
        //2.如果要混用 可选参数 必须写在 普通参数后面 否则报错

        static void Speak2(string a, string test, string name = "韬老狮", string str = "我没什么话可说")
        {

        }
        #endregion
        

        //总结

        // 1 变长参数关键字 params
        // 作用: 可以传入n个同类型参数   n可以是0
        // 注意:
        // 1. params后面必须是数组 意味着只能是同一类型的可变参数
        // 2. 变长参数只能有一个
        // 3. 必须在所有参数最后写变长参数 

        // 2 参数默认值(可选参数)
        // 作用:可以给参数默认值 使用时可以不传参 不传用默认的 传了用传的
        // 注意:
        // 1. 可选参数可以有多个
        // 2. 正常参数必写在可选参数前面,可选参数只能写在所有参数的后面

        static void Main(string[] args)
        {
            Console.WriteLine("变长参数和参数默认值");


            #region 知识点二 变长参数的声明与关键词
            //主函数内
            Sum();//0
            Sum(1,2,3,4,5,6,7,8,1,22,456,123,1);//639

            #endregion

            #region 知识点三 参数默认值

            //主函数内

            Speak();//我没什么话可说
            Speak("123123");//123123
            #endregion
        }
    }
}

11.3 练习题

使用 param 参数,求多个数字的和以及平均数

主函数外 class 语句块内声明求多个数字的和以及平均数函数

static void CalcSumAvg(params int[] arr)
{
    if (arr.Length == 0)
    {
        Console.WriteLine("没有参数");
        return;
    }

    int sum = 0;
    int avg = 0;
    for (int i = 0; i < arr.Length; i++)
    {
        //求总合
        sum += arr[i];
    }
    avg = sum / arr.Length;

    Console.WriteLine("总合{0} 平均数{1}", sum, avg);
}

主函数内调用求多个数字的和以及平均数函数

CalcSumAvg();                  // 没有参数
CalcSumAvg(1, 2, 3, 4, 5, 6, 7); // 总合28 平均数4

使用 param 参数,求多个数字的偶数和奇数和

主函数外 class 语句块内声明求多个数字的偶数和奇数和函数

static void Calc(params int[] arr)
{
    if (arr.Length == 0)
    {
        Console.WriteLine("没有传参数");
        return;
    }

    // 奇数和
    int sum1 = 0;
    // 偶数和
    int sum2 = 0;
    for (int i = 0; i < arr.Length; i++)
    {
        if (arr[i] % 2 == 0)
        {
            sum2 += arr[i];
        }
        else
        {
            sum1 += arr[i];
        }
    }
    Console.WriteLine("奇数和{0} 偶数和{1}", sum1, sum2);
}

主函数内调用求多个数字的偶数和奇数和函数

Calc();                  // 没有传参数
Calc(1, 2, 3, 4, 5, 6, 7); // 奇数和16 偶数和12

11.4 练习题代码

using System;

namespace Lesson09_练习题
{
    class Program
    {
        #region 练习题一
        //使用param参数,求多个数字的和以及平均数

        //主函数外 class语句块内 声明求多个数字的和以及平均数函数
        static void CalcSumAvg( params int[] arr )
        {
            if( arr.Length == 0 )
            {
                Console.WriteLine("没有参数");
                return;
            }

            int sum = 0;
            int avg = 0;
            for (int i = 0; i < arr.Length; i++)
            {
                //求总合
                sum += arr[i];
            }
            avg = sum / arr.Length;

            Console.WriteLine("总合{0}平均数{1}", sum, avg);
        }
        #endregion

        #region 练习题二
        //使用param参数,求多个数字的偶数和奇数和

        //主函数外 class语句块内 声明求多个数字的偶数和奇数和函数
        static void Calc( params int[] arr)
        {
            if( arr.Length == 0 )
            {
                Console.WriteLine("没有传参数");
                return;
            }
            //奇数和
            int sum1 = 0;
            //偶合和
            int sum2 = 0;
            for (int i = 0; i < arr.Length; i++)
            {
                if( arr[i] % 2 == 0 )
                {
                    sum2 += arr[i];
                }
                else
                {
                    sum1 += arr[i];
                }
            }
            Console.WriteLine("奇数和{0}偶数和{1}", sum1, sum2);
        }
        #endregion

        static void Main(string[] args)
        {
            Console.WriteLine("变长参数和参数默认值练习题");

            #region 练习题一
            //主函数内 调用求多个数字的和以及平均数函数
            CalcSumAvg();//没有参数
            CalcSumAvg(1, 2, 3, 4, 5, 6, 7);//总合28平均数4
            #endregion

            #region 练习题二
            //主函数内 调用求多个数字的偶数和奇数和函数
            Calc();//没有传参数
            Calc(1, 2, 3, 4, 5, 6, 7);//奇数和16偶数和12
            #endregion
        }
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏