2023-04-23 学习记录--C/C++-函数

news2024/12/24 2:54:53

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻

【一】、调用有参函数 ⭐️

在这里插入图片描述

有参函数:调用函数时,需要传对应参数

一、实现步骤 🌸

实现步骤:💐

  • (一)、申明函数
  • (二)、定义/封装函数
  • (三)、调用函数

(一)、申明函数 🍭

1、一般形式 🎠

函数结果类型 函数名(参数类型1 参数名1, 参数类型2 参数名2,, 参数类型n 参数名n);

2、example1:🎈

float max(float x, float y); // 申明函数max:有两个形参xy(均为单精度浮点型),函数结果也是单精度浮点型

3、example2:🎈

void max(float x,float y); // 申明函数max:有两个形参xy(均为单精度浮点型),函数无返回值(函数结果类型为void

(二)、定义/封装有参函数 🍭

1、一般形式 🎠

函数结果类型 函数名(参数类型1 参数名1, 参数类型2 参数名2, ..., 参数类型n 参数名n)
{
	声明部分 ------ 声明各种变量、常量、函数等
	语句部分 ------ 各表达式
	(返回值) ------ 可有可无,应需求而定【无返回值时,函数结果类型为void}

2、注意事项 👁

  1. 定义/封装函数 时,必须指定函数结果类型无返回值时,类型是void)和各形参类型

(三)、调用函数 🍭

1、一般形式 🎠

函数名(参数值1, 参数值2,, 参数值n);

2、注意事项 👁

  1. 调用函数 时,传入的实参需与定义/封装函数时的形参个数类型顺序上保持一致;
  2. 调用函数 传数组时只用写数组名就相当于把数组传过去了。

二、举例 🌸

example1:🎈

需求:有两个小组,分别有5名学生和10名学生。请编程输入这些学生的成绩,并调用一个aver函数求这两个小组的平均分。

/**
 * 需求:有两个小组,分别有5名学生和10名学生。请编程输入这些学生的成绩,并调用一个aver函数求这两个小组的平均分。
 */

#include <stdio.h>
int main()
{
    /** 使用变量/常量/函数前必须先声明 */
    float aver(float a[], int n); // 声明函数aver:有两个形参a[](数组,数组元素为单精度浮点型)、n(数组个数,整数型),函数结果是单精度浮点型
    float arr1[5], arr2[10];      // 声明两个一维数组arr1、arr2
    int i;
    /** 引导用户输入学生成绩 */
    printf("请输入第1组的学生成绩:\n"); // 提示信息
    for (i = 0; i < 5; i++)
        scanf("%f", &arr1[i]);           // for语句依次输入第1组学生的成绩
    printf("请输入第2组的学生成绩:\n"); // 提示信息
    for (i = 0; i < 10; i++)
        scanf("%f", &arr2[i]); // for语句依次输入第2组学生的成绩
    /** 输出结果 —— 调用函数获取到平均分 */
    printf("第1组平均分是%f\n", aver(arr1, 5));  // 传数组时只用写数组名就相当于把数组传过去了
    printf("第2组平均分是%f\n", aver(arr2, 10)); // 传数组时只用写数组名就相当于把数组传过去了
    /** 程序正常运行结束 */
    return 0;
}

/**
 * 定义/封装函数:求数组元素的平均值
 * @param {a[]} a[] 数组
 * @param {int} n 数组个数
 * @return 平均值
 *  */
float aver(float a[], int n)
{
    /** 声明部分 */
    float sum = a[0], average;
    int i;
    /** 语句部分 */
    for (i = 1; i < n; i++) // i初始值为1:因为sum的初始值是a[0](数组里的第一个元素),所以第一个元素没必要再遍历一次了
        sum += a[i];
    average = sum / n; // 获取到平均值
    /** 返回值 */
    return (average);
}

在这里插入图片描述

example2:🎈

需求:请编程输入10个整数,并将这10个数由小到大排序。

/**
 * 需求:请编程输入10个整数,并将这10个数由小到大排序。
 */

#include <stdio.h>
int main()
{
    /** 使用变量/常量/函数前必须先声明 */
    void sort(int a[], int n); // 声明函数sort:有两个形参a[](数组,数组元素为单精度浮点型)、n(数组个数,整数型),函数结果是单精度浮点型
    int a[10], i;
    /** 引导用户输入10个整数 */
    printf("请输入10个整数:\n"); // 提示信息
    for (i = 0; i < 10; i++)
        scanf("%d", &a[i]); // 用户输入
    /** 调用函数 —— 升序 */
    sort(a, 10); // 传数组时只用写数组名就相当于把数组传过去了
    /** 输出结果 */
    printf("排序后的整数依次是:\n"); // 提示信息
    for (i = 0; i < 10; i++)
        printf("%d\t", a[i]);
    printf("\n"); // 最后一个输出语句,一定要记得加上换行符(\n)
    /** 程序正常运行结束 */
    return 0;
}

/**
 * 定义/封装函数:选择法实现升序
 * @param {a[]} a[] 数组
 * @param {int} n 数组个数
 * @return 无返回值
 *  */
void sort(int a[], int n)
{
    /** 声明部分 */
    int i, j, t;
    /** 语句部分 */
    for (i = 0; i < n - 1; i++) // i初始值为1:因为sum的初始值是a[0](数组里的第一个元素),所以第一个元素没必要再遍历一次了
        for (j = i + 1; j < n; j++)
            if (a[i] > a[j])
            {
                t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
}

在这里插入图片描述

【二】、调用无参函数 ⭐️

在这里插入图片描述

无参函数:调用函数时,不需要传对应参数

一、实现步骤 🌸

实现步骤:💐

  • (一)、申明函数
  • (二)、定义/封装函数
  • (三)、调用函数

(一)、申明函数 🍭

1、一般形式 🎠

函数结果类型 函数名();

2、example1:🎈

float sort(); // 申明函数sort不含参数,函数结果是单精度浮点型

3、example2:🎈

void sort(); // 申明函数sort不含参数函数无返回值(函数结果类型为void

(二)、定义/封装无参函数 🍭

1、一般形式 🎠

函数结果类型 函数名()
{
	声明部分 ------ 声明各种变量、常量、函数等
	语句部分 ------ 各表达式
	(返回值) ------ 可有可无,应需求而定【无返回值时,函数结果类型为void}

2、注意事项 👁

  1. 定义/封装函数 时,必须指定函数结果类型无返回值时,类型是void);

(三)、调用函数 🍭

1、一般形式 🎠

函数名();

2、注意事项 👁

  1. 调用函数 传数组时只用写数组名就相当于把数组传过去了。

二、举例 🌸

下面声明 一个无返回值的无参函数 和 一个有返回值(返回值类型为字符型)的无参函数为例:

#include <stdio.h>

int main()
{
    /** 使用变量/常量/函数前必须先声明 */
    void output(); // 声明一个无返回值的无参函数
    char get();    // 声明一个有返回值(返回值类型为字符型)的无参函数
    /** 调用函数 */
    output();
    printf("得到一个字符:%c\n", get()); // 记得加换行符
    /** 程序正常运行结束 */
    return 0;
}

/**
 * 定义/封装函数
 */
// 输出一句话
void output()
{
    printf("冲冲冲哇~\n"); // 记得加换行符
}
// 返回一个字符
char get()
{
    return 'a';
}

TODO

【三】、函数的嵌套 ⭐️

在这里插入图片描述

(一)、含义 🌸

函数的嵌套:函数里面再嵌套函数

(二)、举例 🌸

需求:请编程输入4个整数,并找出其中最大的数。

/**
 * 需求:请编程输入4个整数,并找出其中最大的数。
 */

#include <stdio.h>
int main()
{
    /** 使用变量/常量/函数前必须先声明 */
    int max4(int a, int b, int c, int d); // 声明函数max4:有4个形参a、b、c、d,均为整数型,函数结果也是整数型
    int a, b, c, d, max;
    /** 引导用户输入10个整数 */
    printf("请输入4个整数(以空格隔开):\n"); // 提示信息
    scanf("%d %d %d %d", &a, &b, &c, &d);      // 用户输入
    /** 调用函数 —— 获取4个整数里的最大值 */
    max = max4(a, b, c, d);
    /** 输出结果 */
    printf("最大数为%d\n", max);
    /** 程序正常运行结束 */
    return 0;
}

/**
 * 定义/封装函数:获取4个整数里的最大值
 * @return 4个整数里的最大值
 *  */
int max4(int a, int b, int c, int d)
{
    /** 声明部分 */
    int max2(int a, int b); // 函数使用前必须声明
    /** 返回值 */
    return (max2(max2(max2(a, b), c), d)); // 函数嵌套
}

/**
 * 定义/封装函数:获取2个整数里的最大值
 * @return 2个整数里的最大值
 *  */
int max2(int a, int b)
{
    /** 返回值 */
    return (a > b ? a : b);
}

在这里插入图片描述

【四】、函数的递归 ⭐️

在这里插入图片描述

(一)、含义 🌸

函数的递归:函数里面调用函数自己

(二)、举例 🌸

example1:🎈

在这里插入图片描述

#include <stdio.h>

int main()
{
    /** 使用变量/常量/函数前必须先声明 */
    int ageFun(int n); // 声明函数
    /** 输出结果 */
    printf("第5个学生的年龄为%d\n", ageFun(5));
    /** 程序正常运行结束 */
    return 0;
}

/**
 * 定义/封装函数:计算年龄
 * @param {int} n 整数
 * @return 年龄
 *  */
int ageFun(int n)
{
    int age; // 年龄
    age = n == 1 ? 10 : ageFun(n - 1) + 2;
    return age;
}

在这里插入图片描述

example2:🎈【重要】

需求 🌈:用递归方法求n!(n的阶乘)
分析 📚:

  • 1、负数没有阶乘
  • 2、0和1的阶乘为1
    • 1! = 1 = 0! * 1;
      0! = 1; 【1! = 1 = 0! * 1 👉🏻 0! = 1】
  • 3、大于等于2的阶乘:
    2! = 1 * 2= 1! * 2;(2)
    3! = 1 * 2 * 3 = 2! * 3;(6)
    4! = 1 * 2 * 3 * 4 = 3! * 4;(24)
    。。。
    n! = 1 * 2 * 3 * 4 * … * n-1 * n = (n-1)! * n;
    规律为:n! = (n-1)! * n;
/**
 * 需求:用递归方法求n!(n的阶乘)。
 */

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main()
{
    /** 使用变量/常量/函数前必须先声明 */
    unsigned long long factorial(int n); // 声明函数
    int n;
    /** 引导用户输入 */
    printf("请输入一个正整数n:"); // 提示信息
    scanf("%d", &n); // 用户输入
    n < 0 ? printf("输入错误!\n") : printf("%d! = %llu\n", n, factorial(n)); // 负数没有阶乘
    return 0;
}

/**
 * 定义/封装函数:获取n的阶乘
 * @param {int} n 整数
 * @return n的阶乘
 *  */
unsigned long long factorial(int n)
{
    if (n == 0 || n == 1)
    { // 阶乘0和1都为1
        return 1;
    }
    else
    {
        unsigned long long res = factorial(n - 1); // 递归求解n-1的阶乘
        // 防止溢出
        // ULLONG_MAX常量是在limits标头中定义的宏常量,用于获取无符号long long int对象的最大值,它返回一个无符号long long int对象可以存储的最大值,即18446744073709551615 (在32位编译器)。
        if (res > ULLONG_MAX / n)
        {
            printf("Error: 哦豁!我只能求%d以下滴阶乘哦~\n", n);
            /**
             * EXIT_FAILURE作为exit()的参数来使用,表示没有成功地执行一个程序;
             * EXIT_SUCCESS作为exit()的参数来使用,表示成功地执行一个程序。
             * 二者对应需引入的头文件是:#include <stdlib.h>
             */
            exit(EXIT_FAILURE);
        }
        return res * n; // 返回n的阶乘
    }
}

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Adobe国际认证证书,深化设计师个人优势!

Adobe国际认证又称为Adobe认证(英文:Adobe Certified Professional)是Adobe公司CEO签发的权威国际认证体系,旨在为用户提供Adobe软件的专业认证。 该体系基于Adobe核心技术及岗位实际应用操作能力的测评体系得到国际ISTE协会的认可&#xff0c;并在全球 148 个国家推广&#xf…

mybatis分页插件的详细理解和使用

mybatis分页插件的基本理解和使用 为什么要使用mybatis分页插件&#xff1f; 分页是一种将所有数据分段展示给用户的技术。用户每次看到的不是全部数据&#xff0c;而是其中一部分&#xff0c;如果在其中没有找到自己想要的内容&#xff0c;用户可以通过制定页码或者是翻页的…

头歌c语言实训项目-综合案例课外练习:学生成绩管理系统

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 第1关&#xff1a;学生成绩管理系统 题目&#xff1a; 代码思路&#xff1a; 代码表示&#xff1a; 如…

【Git】git使用

vitevue3部署静态文件到github 1. 新建仓库 新建仓库 仓库名称: 必须是 [你的git用户名]或[仓库名称] .github.io&#xff0c;例如你的用户名是YunZhonJun&#xff0c;统一为小写&#xff0c;如↓ 例1 用户名.github.io yunzhonjun.github.io 例2 仓库名称.github.io colors…

【动力节点】Springsecurity14-18章JWT+Spring Security+redis+mysql 实现认证

15 SpringSecurity 集成thymeleaf 此项目是在springsecurity-12-database-authorization-method 的基础上进行 复制springsecurity-12-database-authorization-method 并重命名为springsecurity-13-thymeleaf 15.1 添加thymeleaf依赖 | org.springframework.boot spring-…

根据vue2数组响应式实现原理找到了一个待优化点

最近学习了相关知识 写出了 vue2数据响应式原理(5) 通过重写函数实现数组响应式监听但也在这里 我发现 数组响应式 一个是通过for遍历监听已有属性 还有就是重写会改变数组的几个内置函数来监听 但 如果 元素之前没有 且 我们不适用这些内置函数去修改呢&#xff1f; 我们创建…

报表生成器 FastReport .Net 用户指南(一):基本原理

FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案&#xff0c;使用FastReport .NET可以创建独立于应用程序的.NET报表。 随着FastReport .Net 2023版的正式发布&#xff0c;厂商也发布了最新版的用户手册&#xff0c;从今天起我们将持续更新2023版的…

苹果手机怎么看生产日期?参考方法在这!

案例&#xff1a;怎么查苹果手机买了几年&#xff1f; 【求助&#xff01;我从别人那里买了一部苹果手机&#xff08;非官方&#xff09;&#xff0c;怎么看这个手机用了几年&#xff1f;】 苹果手机作为一款高端手机&#xff0c;备受用户的喜爱。然而&#xff0c;许多用户不知…

utools - 电脑必装软件

目录 一、超级面板二、计算稿纸三、IP地址查询和正则表达式测试四、浏览器书签五、OCR识别六、Markdown编辑器、Emoji表情输入工具七、总结 简介&#xff1a; 今天我要向大家介绍一款非常实用的电脑软件——utools。 官网&#xff1a;utloos &#x1f433;作为一款集成了多种实…

初识c++语法(一)

我们在C语言的基础之上进行c语言的学习。对于我们的c语言来说&#xff0c;c兼容C语言&#xff0c;所以我们以前编写的C语言的程序在c平台上也是可以运行的。唯一不同的就是我们的c对于我们C语言的部分语法做出了优化以及引入了面向对象的概念。所以在刚开始学习c的时候我们可以…

免费馅饼(牛客刷dp)

免费馅饼 比赛主页 我的提交 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述 SERKOI最新推出了一种叫做“免费馅饼”的游戏:游戏在一个舞台上进行。舞台的宽度为W格&#…

D. Color with Occurrences(Codeforces Round 811 (Div. 3))

https://codeforces.com/contest/1714/problem/D 题目大意 给定一个字符串 t t t 和一组字符串 s 1 , s 2 , … , s n s_1, s_2, \ldots, s_n s1​,s2​,…,sn​。每次操作可以选择其中一个字符串 s i s_i si​&#xff0c;将 t t t 中所有 s i s_i si​ 的出现位置染…

管理后台项目-04-SPU列表-增删改SPU-获取SKU【续】

目录 1-删除spu 2-添加sku 2.1-获取skuForm页面组件的数据 2.2-收集form表单数据 2.3-保存提交数据 3-查看SKU信息和loading效果 上一篇文章管理后台项目-03-SPU列表-增删改SPU-获取SKU_ycmy2017的博客-CSDN博客内容较多&#xff0c;交互逻辑有点复杂&#xff0c;所以分两…

微风·六·JAVA中“==”、hashcode、equals及字符串常量池的区别

vector线程安全的集合 hashset底层为hashmap 文章目录 1 “”和equals的区别是什么?1.1 “”解释1.2 “equals”解释1.3 注意点&#xff1a;equals不能比较基本数据类型1.4 Integter缓存数组1.4.1 引入案例发现问题1.4.2 解释缓存数组 1.5 字符串常量池1.5.1 案例一1.5.2 案例…

视频直播网站开发的最佳实践

随着互联网技术的不断发展&#xff0c;视频直播成为了网络世界中的一股热潮。无论是企业还是个人&#xff0c;都可以通过搭建自己的视频直播网站来实现自己的目标。但是&#xff0c;对于很多企业来说&#xff0c;视频直播网站的开发是一项复杂的任务。因此&#xff0c;本文将介…

响应式开发(HTML5CSS3)实现媒体查询的功能案例

目录 前言 一、媒体查询知识点 二、实现功能的尺寸 三、代码部分 1.不带嵌套的媒体查询功能 1.1.代码段 1.2.运行结果 2.带嵌套的媒体查询功能 2.1.代码段 2.2.运行结果 2.2.3视频效果 前言 1.本文讲解的响应式开发技术&#xff08;HTML5CSS3Bootstrap&#xff09…

C语言开发环境搭建及调试

C简介 可移植 标准C C/C &#xff08;系统硬件操作的接口&#xff0c;windows&#xff0c;Linux不一样&#xff09; 跨平台 Java Python 下载 去官网选择Visual Studio 2019下载 安装过程中勾选使用C的桌面开发 安装好之后点击创建新项目——空项目 位置最好放在根目录下&…

从数据管理到数据资产管理

数据已经与土地、劳动力、资本、技术并称为五种生产要素&#xff0c;数据的价值是毋庸置疑的。数据甚至成为了国家的基础性战略资源&#xff0c;数字经济也正在成为经济增长的强大创新动力。那么—— 数据到底指的是什么&#xff1f; 数据管理又是怎么回事&#xff1f; 数据如何…

Django项目之经济预测平台,应用LSTM、GBDT等算法

一、平台功能与技术点 1.技术点&#xff1a;Python3.9、Django4.1.7&#xff0c; tensorflow2.11.0&#xff0c;keras2.11.0&#xff0c;numpy1.24.2、bootstrap、ajax、MySQL等等 2.功能&#xff1a;正常前后端&#xff0c;前台主要完成经济预测功能&#xff08;特征和标签都…

✨✨✨ ❃ ♕ ꕥXpath解析html获取表情符号,丰富你的文章 ꧁ ꧂꧁ ꧂

✨✨✨ ❃ ♕ ꕥXpath解析html获取表情符号&#xff0c;丰富你的文章 ꧁ ꧂꧁ ꧂ 1. 推荐几个好玩的表情符号网站2. xpath解析html获取表情3. xpath解析html源码3.1 parse_li.py3.2 symbol2.html 参考 1. 推荐几个好玩的表情符号网站 &#x1f495; &#x1f9da; &#x1f6b…