C#基础之函数基础

发布于:2024-04-30 ⋅ 阅读:(20) ⋅ 点赞:(0)

函数

在这里插入图片描述

1、函数基础

1、概念
函数(方法)
本质是一块具有名称的代码块
可以使用函数(方法)的名称来执行该代码块
函数(方法)是封装代码进行重复使用的一种机制

函数(方法)的主要作用
1、封装代码
2、提升代码复用率
3、抽象行为
2、函数位置
写在 class 或 struct
3、基本语法
static 返回类型 函数名(参数类型 参数名1,参数类型 参数名2){
    函数的代码逻辑
    return 返回值;
}
4、实际运用
1、无参无返回值函数
	static void SayHellow(){
    Console.WriteLine("你好,世界");
	}
	Console.WriteLine(SayHellow);
2、有参无返回值
    static void SayYourName(string name){
    Console.WriteLine("你的名字是:{0}",name);
	}
	string  str = "魔君"
	Console.WriteLine(str);
3、无参有返回值
    static string WhatYourName(string name){
    return "魔君";	
	}
	SayYourName(WhatYourName());
	string str = WhatYourName;
4、有参有返回值
    static int Sum(int a,int b){
    return a+b;
	}
	Console.WriteLine(Sum(3,5););
5、有参有多返回值
    static int[] Cal(int a, int b){
    int sum = a + b;
    int avg = sum /2;
    return new int[]{sum,avg};
	}
	int[] arr = Cal(6,8); 
	Console.WriteLine(arr[0]+" "+arr[1]);
5、return

return 可以提前结束函数逻辑,直接返回到函数外部

static void Speak(string str){
    if (str == "结束"){
        return;
    }
    Console.WriteLine(str);
}

2、ref 和 out

解决在函数内部改变外部传入的内容,里面变了,外面也要变

static void ChangeValue(int value){
    value = 3;
}
int a = 1;
ChangValue(a);
Console.WriteLine(a);
1、ref 和 out 使用
函数参数的修饰符
当出入的值类型参数在内部修改时,或者引用类型参数在内部重新声明时,外部的值会发生变化
    //ref
    static void ChangeValueRef(ref int value){
    	value = 3;
	}
	int a = 1;
	ChangeValueRef(ref a);
	Console.WriteLine(a);
	//out
	static void ChangeValueRef(out int value){
    	value = 3;
	}
	int a = 1;
	ChangeValueRef(out a);
	Console.WriteLine(a);
2、区别

1、ref 传入的变量必须初始化, out不用

ref传入的变量必须初始化,但是在内部,可改可不改

2、out传入的变量必须在内部赋值,ref不用

out传入的变量不用初始化,但是在内部,必须赋值

思考 登录
static bool IsCom(string z, string mi, ref string info)
{
    if (z == "admin")
    {
        if (mi == "000")
        {
            info = "登录成功";
        }
        else
        {
            info = "密码错误";
            return false;
        }
    }
    else
    {
        info = "账户错误";
        return false;
    }
    return true;
}
Console.WriteLine("请输入账户");
string zhang = Console.ReadLine();
Console.WriteLine("请输入密码");
string miMa = Console.ReadLine();
string infos = "";
while (!IsCom(zhang, miMa, ref infos))
{
    Console.WriteLine(infos); 
    Console.WriteLine("请输入账户");
    zhang = Console.ReadLine(); 
    Console.WriteLine("请输入密码");
     miMa = Console.ReadLine();
}
Console.WriteLine(infos);

3、变长参数和参数默认值

1、变长参数
static int Sum(params int[] arr){
    int sum = 0;
    for(int i=0; i < arr.Length; i++){
        sum += arr[i];
    }
    return sum;
}
1、params关键字后面必为数组
2、数组的类型可以是任意的类型
3、函数参数可以有别的参数和params关键字修饰的参数
4、函数参数中只能最多出现一个params关键字,且一定是最后一组参数
2、参数默认值
static void Speak(string str = "无话可说"){
    Console.WriteLine(str);
}
Speak();
如果要混用,可选参数必须写在普通参数后面

4、函数重载

概念:同一语句块中,函数名相同,参数不同,返回值无关

作用:用来处理不同参数同一类型的逻辑处理

1、重载和返回值类型无关,只和参数类型,个数,顺序有关
2、调用时程序会自己根据传入的参数类型判断使用哪个重载
static int Cal(int a, int b){
    return a+b;
}
static int Cal(int a, int b, int c){
    return a+b+C;
}
static float Cal(float a, float b){
    return a+b;
}
static float Cal(int a, float b){
    return a+b;
}
static float Cal(float a, int b){
    return a+b;
}
static float Cal(ref float a, int b){
    return a+b;
}

5、递归函数

让函数自己调用自己

必须有能够结束调用的条件

//递归方式输出0~10
static void Fun(int a){
    if(a > 10){
        return;
    }
    Console.WriteLine(a);
    ++a;
    Fun(a);
}
Fun(0);
思考1 阶乘
//传入一个值,递归求该值的阶乘,并返回
//    5!= 1 * 2 * 3 * 4 * 5
static int JieCheng(int a)
{
    Console.WriteLine(a);
    if (a == 1)
    {
        return 1;
    }
    return a * JieCheng(a-1);
}
Console.WriteLine(JieCheng(5));
思考2 阶乘相加
//使用递归求 1! + 2! +3! + 4! + ... + 10!
static int Fun1(int num)
{
    if (num == 1)
    {
        return 1;
    }
    return num * Fun1(num - 1);
}
static int Fun2(int num)
{
    Console.WriteLine(num);
    if (num == 1)
    {
        return 1;
    }
    return Fun1(num) + Fun2(num - 1);
}
Console.WriteLine(Fun2(10));
思考3 竹竿减半
//一根竹竿长100m,每天砍掉一半,求第十天它的长度是多少(从第0天开始)
static void Fun(float length, int day = 0)
{
    if (day == 10)
    {
        Console.WriteLine("第十天竹竿长{0}米", length);
        return;
    }
    length /= 2;
    ++day;
    Fun(length, day);
}
Fun(100);
思考4 递归循环输出
static bool Fun(int num)
{
    Console.WriteLine(num);
    return num == 10 || Fun(num + 1);
}
Fun(1);

网站公告

今日签到

点亮在社区的每一天
去签到