C#基础之函数基础

函数

在这里插入图片描述

文章目录

      • 1、函数基础
        • 1、概念
        • 2、函数位置
        • 3、基本语法
        • 4、实际运用
        • 5、return
      • 2、ref 和 out
        • 1、ref 和 out 使用
        • 2、区别
          • 思考 登录
      • 3、变长参数和参数默认值
        • 1、变长参数
        • 2、参数默认值
      • 4、函数重载
      • 5、递归函数
          • 思考1 阶乘
          • 思考2 阶乘相加
          • 思考3 竹竿减半
          • 思考4 递归循环输出

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);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/574453.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多客圈子交友系统 uniapp+thinkphp6适配小程序/H5/app/api全开源,多款插件自选,支持个性定制!

网上交友的优点包括&#xff1a; 1. 方便&#xff1a;网上交友可以随时随地进行&#xff0c;不受时间和空间的限制&#xff0c;方便且高效。 2. 匿名性&#xff1a;网上交友可以实现匿名性&#xff0c;用户可以匿名地搜索、聊天或交换信息&#xff0c;保护个人隐私和安全。 3.…

RE | BUUCTF 刮开有奖1

题目&#xff1a;BUUCTF 刮开有奖1 参考&#xff1a; BUUCTF 刮开有奖&#xff08;特别详细了&#xff0c;尽自己全力理解所写&#xff09;&#xff08;这是主参考&#xff0c;写得很详细 BUUCTF_刮开有奖&#xff08;主参考的参考&#xff0c;思路很清晰 我是大菜鸡…尽力写自…

报错:图片验证码接口对接vue+springboot(下一个笔记会记录整个验证码的代码)

问题&#xff1a;空指针异常ai: 根据错误堆栈信息中提供的方法调用位置&#xff0c;看起来空指针异常是在 AuthCodeServiceImpl 类的 authUserCoded 方法的第 41 行发生的。 为了解决这个问题&#xff0c;你可以检查 AuthCodeServiceImpl 类中 authUserCoded 方法的第 41 行&am…

Qt xml示范

1.数据格式 #ifndef XML_DATA_H #define XML_DATA_H#include<QWidget>struct Student {int s_id;QString s_name;double s_math_score;double s_english_score;}; struct Teacher{int t_id;QString t_name;QVector<Student> t_students_v; };#endif // XML_DATA_H…

【JavaEE网络】TCP/IP协议:细节与应用

目录 TCP/IP协议协议格式传输层重点协议UDP协议UDP协议端格式 UDP的特点TCP协议TCP协议端格式 TCP的特点 TCP/IP协议 协议格式 应用层&#xff08;后端开发必知必会&#xff09;&#xff1a;这一层也有很多现成的协议&#xff08;后面还会重点介绍HTTP协议&#xff0c;这是做…

从0开始用C写贪吃蛇(基于链表)

目录 1. 游戏背景 2. 游戏效果演示​编辑​编辑​编辑 3. 实现目标 4. 技术要点 5. 控制台程序 5.1 设置控制台窗口的长宽和名字 5.2 控制台屏幕上的坐标COORD 6.Win32 API 6.1 GetStdHandle 6.2 GetConsoleCursorInfo 6.3 CONSOLE_CURSOR_INFO 6.4 SetConsole…

CSS 之 transition过渡动画

一、简介 ​ CSS 制作 Web 动画有两种方式&#xff1a; 帧动画&#xff08;Keyframe Animation&#xff09;和过渡动画&#xff08;Transition Animation&#xff09;。针对不同的业务场景中&#xff0c;我们应该选择不同的动画方式&#xff0c;通常来说&#xff1a;对于交互元…

iOS runtime

—参考文章— 暂时没有 一、如何在Xcode中使用runtime Xcode默认是不建议开发者使用runtime的&#xff0c;所以在Xcode直接使用runtime的语法是会报错误的。 如果要在Xcode中使用runtime的语法&#xff0c;是需要配置一下才可以使用&#xff0c;配置方法如下图&#xff1a; 首…

开源向量数据库比较:Chroma, Milvus, Faiss,Weaviate

语义搜索和检索增强生成(RAG)正在彻底改变我们的在线交互方式。实现这些突破性进展的支柱就是向量数据库。选择正确的向量数据库能是一项艰巨的任务。本文为你提供四个重要的开源向量数据库之间的全面比较&#xff0c;希望你能够选择出最符合自己特定需求的数据库。 什么是向量…

Microsoft Edge浏览器:高效、简洁、个性化的网页浏览体验

Microsoft Edge是微软公司推出的一款网络浏览器&#xff0c;它是基于Chromium开源项目开发的&#xff0c;因此与Google Chrome有很多相似之处。以下是一些使用Microsoft Edge的心得体会&#xff1a; 1. 界面简洁&#xff1a;Microsoft Edge的界面设计非常简洁&#xff0c;用户…

Spring Boot集成RabbitMQ快速入门Demo

1.什么是RabbitMQ&#xff1f; RabbitMQ是一款使用Erlang语言开发的&#xff0c;基于AMQP协议的消息中间件&#xff0c;作为一款优秀的消息系统&#xff0c;RabbitMQ有高并发、可扩展等优势&#xff0c;并适用于大型系统中各个模块之间的通信。 RabbitMQ的特点为&#xff1a; 持…

微信小程序按钮点击时的样式hover-class=“hover“

小程序的button组件很好用&#xff0c;按钮点击的时候会显示点击状态&#xff0c;默认的就是颜色加深 但是我们改变了button的背景色之后&#xff0c;就看不出点击效果了&#xff0c;解决起来也很简单 关键代码就是小程序的 hover-class 属性&#xff0c;需要注意的是&#xff…

Mysql(数据库)知识详解【6】~{锁,架构}

数据库锁和架构是两个不同的概念&#xff0c;但它们都与数据库管理系统&#xff08;DBMS&#xff09;的性能和并发控制有关。 数据库锁&#xff1a; 数据库锁是一种同步机制&#xff0c;用于控制多个事务对共享资源的访问。锁可以确保数据的一致性和完整性&#xff0c;防止多个…

AI 重写人类DNA,开源基因编辑器问世;安卓版Gemini新增多项功能

&#x1f989; AI新闻 &#x1f680; AI 重写人类DNA&#xff0c;开源基因编辑器问世 摘要&#xff1a;初创公司 Profluent 最新宣布&#xff0c;开发出世界首个完全由 AI 设计的基因编辑器&#xff0c;并成功应用于人类细胞 DNA&#xff0c;这一技术可谓是分子生物学的一大突…

【stomp 实战】spring websocket源码分析之握手请求的处理

上一节【搭建一套websocket推送平台】我们通过一个项目&#xff0c;实现了一套推送平台。由于spring框架对于websocket的支持和stomp协议的良好封装&#xff0c;我们很容易地就实现了websocket的消息推送功能。虽然搭建这么一套推送系统不难&#xff0c;但是如果不了解其底层原…

Linux中手工创建一个用户

当我们需要新创建一个用户时&#xff0c;有两种方法 1.使用命令添加用户 2.去配置文件里面添加用户 1&#xff0c;使用useradd命令&#xff1a; [rootlocalhost /]# useradd tmg 然后给它设置一个密码 [rootlocalhost etc]# passwd tmg Changing password for user tmg. N…

linux 系统文件目录颜色及特殊权限对应的颜色

什么决定文件目录的颜色和背景&#xff1f; 颜色 说明 栗子 权限白色表示普通文件 蓝色表示目录 绿色表示可执行文件 浅蓝色链接文件 黄色表示设备文件 红色 表示压缩文件 红色闪烁表示链接的文件有问题 灰色 表示其它文件 可以用字符表示文件的类型&am…

新风口下的必应bing国内广告投放该怎么做?

必应Bing作为全球搜索引擎市场的重要参与者&#xff0c;正逐渐显现出其在国内市场的独特价值和潜力。随着互联网生态的多元化发展&#xff0c;必应Bing凭借其高质量用户群和精准投放能力&#xff0c;成为了企业寻求新增长点的新风口。 一、洞察先机&#xff0c;精准定位市场 …

【Flink入门修炼】2-3 Flink Checkpoint 原理机制

如果让你来做一个有状态流式应用的故障恢复&#xff0c;你会如何来做呢&#xff1f; 单机和多机会遇到什么不同的问题&#xff1f; Flink Checkpoint 是做什么用的&#xff1f;原理是什么&#xff1f; 一、什么是 Checkpoint&#xff1f; Checkpoint 是对当前运行状态的完整记…

YOLOv8+PyQt5输电线路缺陷检测(目前最全面的类别检测,可以从图像、视频和摄像头三种路径检测)

1.效果视频&#xff1a;YOLOv8PyQt5输电线路缺陷检测&#xff08;目前最全面的类别检测&#xff0c;可以从图像、视频和摄像头三种路径检测&#xff09;_哔哩哔哩_bilibili 资源包含可视化的输电线路缺陷检测系统&#xff0c;可识别图片和视频当中出现的五类常见的输电线路缺陷…