C#基础之函数基础

news2024/11/18 21:36:45

函数

在这里插入图片描述

文章目录

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

diskMirror-backEnd-spring-boot | diskMirror 后端服务器 SpringBoot 版本!

diskMirror-backEnd-spring-boot diskMirror 后端服务器的 SpringBoot 版本&#xff0c;此版本中拓展了 DiskMirrorBackEnd&#xff0c;是一个完全的SpringBoot项目&#xff01; 目录 文章目录 diskMirror-backEnd-spring-boot目录我如何部署与配置docker 方式部署 diskMirro…

【树莓派】yolov5 Lite,目标检测,行人检测入侵报警

延续之前的程序&#xff1a; https://qq742971636.blog.csdn.net/article/details/138172400 文章目录 播放声音pygame不出声音怎么办&#xff08;调节音量&#xff09;树莓派上的音乐播放器&#xff08;可选&#xff09;命令行直接放歌&#xff08;尝试放mp3歌曲&#xff09; …

分类算法——模型评估(八)

1混淆矩阵 在分类任务下&#xff0c;预测结果与正确标记之间存在四种不同的组合&#xff0c;构成混淆矩阵&#xff08;适用于多分类&#xff09; TP True Possitive FN False Negative 2精确率&#xff08;Precision&#xff09;与召回率&#xff08;Recall&#xff09; 精…

第11章 Android特色开发——基于位置的服务

第11章 Android特色开发——基于位置的服务 本章中&#xff0c;将要学习一些全新的Android技术&#xff0c;这些技术有别于传统的PC或Web领域的应用技术&#xff0c;是只有在移动设备上才能实现的。 基于位置的服务&#xff08;Location Based Service&#xff09;。由于移动…

智能穿戴终端设备安卓主板方案_MTK平台智能手表PCBA定制开发

新移科技智能手表方案兼容WiFi、BLE、2~5G等多种通信能力。支持多个功能模块&#xff0c;包括&#xff1a;通话、计步、定位、睡眠监测、心率监测、血氧监测等。智能手表通过滑动与功能性按键提供高度直观的体验感受&#xff0c;从腕间即可掌控日常生活。形态支持定制包括&…

数据结构篇其二---单链表(C语言+超万字解析)

目录 前言&#xff1a; 一、顺序表的缺点和链表的引入。 二、链表概述 实现一个简单的链表 空链表的概念 三、链表的功能实现 链表的打印 链表节点的创建 链表的头插&#xff08;自上而下看完分析&#xff0c;相信你会有所收获&#xff09; 头插的前置分析 传值调用和…

【韩国】UE5的MetaHuman确实可以导入Blender进行编辑。

UE5的MetaHuman确实可以导入Blender进行编辑。根据网络上的信息&#xff0c;你可以将MetaHuman模型导出为FBX文件&#xff0c;然后在Blender中进行修改。修改完成后&#xff0c;你可以将其重新导入到Unreal Engine 5中4。请注意&#xff0c;当你在Blender中编辑模型时&#xff…

debian配置四叶草输入法

效果展示 一、前言 在linux下体验比较好的输入法只有两款&#xff1a;搜狗输入法、四叶草输入法。 ubuntu下可以成功配置搜狗输入法&#xff0c;但debian下从来没有成功过。 今天在用fcitx5 四叶草时发现VNC远程输入法会失灵&#xff0c;于是改用了ibus 四叶草&#xff0c…

Java | 冒泡排序算法实现

大家可以关注一下专栏&#xff0c;方便大家需要的时候直接查找&#xff0c;专栏将持续更新~ 题目描述 编写一个Java程序&#xff0c;实现冒泡排序算法。程序需要能够接收一个整型数组作为输入&#xff0c;并输出排序后的数组。 冒泡排序是一种简单的排序算法&#xff0c;它…

详解23种设计模式——工厂模式

工厂模式 | CoderMast编程桅杆工厂模式 设计思想 工厂模式是最常用的设计模式之一&#xff0c;属于创建型模式&#xff0c;将创建对象的权利交给了一个工厂类&#xff0c;从而提供了一种不使用构造方法的情况下创建对象的途径&#xff0c;无需指定要创建的具体类&#xff0c;将…

【可下载】CDA 1级教材《精益业务数据分析》2023最新版

CDA一级认证教材&#xff1a;《精益业务数据分析》 全面、系统地讲述业务描述性分析为企业决策行为创造价值的全流程技能&#xff0c;涵盖描述性数据分析方法、业务分析方法、数据分析结果应用方法等内容。 条理清晰的结构、通俗易懂的语言、完整立体的知识框架为读者铺开一幅…

word添加行号

打开页面设置&#xff0c;找到行号

制造型企业 如何实现便捷的机台文件统一管理?

机台文件统一管理&#xff0c;这是生产制造型企业都需要去做的&#xff0c;机台文件需要统一管理的原因主要包括以下几点&#xff1a; 1、提高效率&#xff1a;统一管理可以简化文件的访问和使用过程&#xff0c;提高工作效率&#xff0c;尤其是在需要频繁访问或更新机台文件的…

数据库MySQL的初级基础操作

文章目录 1. 介绍2. 数据库相关概念3. 启动4. 数据模型5. SQL6. DDL数据库DDL-表操作DDL-表操作-数据类型DDL-表操作-修改DDL-表操作-删除 7. 图形化界面工具DataGrip8. DML(数据操作语言)DML-添加数据DML-修改数据 9. DQL&#xff08;数据查询语言&#xff09;基本查询条件查询…

如何把经验变成可以销售的“知识产品”?

知识付费&#xff0c;很多人想做&#xff0c;但是不知道如何把自己在某方面的“经验”&#xff0c;变成一个“知识产品”&#xff0c;那么这篇文章&#xff0c;我们就来聊聊如何从0打造一个知识产品 非常简单&#xff0c;一共六个步骤&#xff1a; 第一步&#xff1a;取名字&…

【安卓13-Framework】SystemUI定制之屏蔽下拉状态栏部分快捷按钮

1、需求 屏蔽下拉状态栏谷歌录屏、省电模式、二维码扫描器等快捷按钮。 2、修改路径 普及&#xff1a;安卓的SystemUI包提供了状态栏、导航栏、通知中心等重要的用户界面元素。 状态栏小部件UI显示修改路径&#xff1a;frameworks/base/packages/SystemUI/src/com/android/s…

政安晨:【Keras机器学习示例演绎】(十七)—— 用于图像分类的 RandAugment 可提高鲁棒性

目录 导入与设置 加载 CIFAR10 数据集 定义超参数 初始化 RandAugment 对象 创建 TensorFlow 数据集对象 可视化使用 RandAugment 增强的数据集 可视化使用 simple_aug 增强的数据集 定义模型构建实用功能 使用 RandAugment 训练模型 用 simple_aug 训练模型 加载 C…

Rime 如何通过 iCloud 实现词库多端同步,Windows、iOS、macOS

Rime 如何通过 iCloud 实现词库多端同步&#xff0c;Windows、iOS、macOS 一、设备环境 最理想的输入环境就是在多端都使用同一个词库&#xff0c;这样能保持多端的输入习惯是一致的。 以我为例&#xff0c;手头每天都要用到的操作平台和对应的输入法&#xff1a; 操作系统设…

Spring Boot | Spring Boot “自定义“ Redis缓存 “序列化机制“

目录: Spring Boot "自定义" Redis缓存 "序列化机制" &#xff1a;一、基于 "注解" 的 "Redis缓存管理" 的 "默认序列化机制" 和 "自定义序列化机制"1.1 基于 "注解" 的 "Redis缓存管理" 的 …

抽象代理模式2.0版本

前言&#xff1a; 1.0版本的核心 代理的定义 A proxy, in its most general form, is a class functioning as an interface to something else. The proxy could interface to anything: a network connection, a large object in memory, a file, or some other resource t…