C语言实验3:函数的定义

目录

一、实验要求

二、实验原理

1.函数头

2.函数体

3.函数的定义及使用

三、实验内容

1. sum函数

代码

截图

分析

2. sum函数

代码

截图

分析

3. rank_grade函数

代码

截图

分析

4. rank_grade函数

代码

截图

分析

5. 函数的嵌套使用

代码

截图

分析

6. inputt函数

代码

截图

分析

7.函数的递归

代码

截图

分析


一、实验要求

  1. 熟悉定义函数的方法。
  2. 熟悉声明函数的方法。
  3. 熟悉调用函数时实参与形参的对应关系,以及“值传递”的方式。
  4. 学习对多文件的程序的编译运行。

二、实验原理

在C语言中,函数是一种可重复使用的代码块,用于执行特定的任务。函数的定义包括函数头和函数体两部分。

1.函数头

函数头包含以下信息:

1.返回类型:指定函数返回的数据类型,如int、float、void等。
2.函数名:函数的标识符,用于在程序中调用该函数。
3.参数列表:函数接受的输入参数,可以包含零个或多个参数,每个参数都有自己的数据类型和名称。

2.函数体

函数体是函数的具体实现部分,包含一系列要执行的语句。在函数体中,可以定义局部变量、执行操作和控制流语句等。函数体内的代码在函数调用时被执行。

3.函数的定义及使用

函数的定义原理如下:

1.在程序中声明函数,包括函数头和函数体。
2.在需要调用函数的地方使用函数名和合适的参数列表进行函数调用。
3.程序执行到函数调用语句时,会跳转到函数定义的位置,并将控制权转移到函数体中。
4.在函数体中,执行函数内部的代码,包括变量的初始化、操作和控制流语句等。
5.函数执行完毕后,将返回值(如果有)返回给函数调用处,并将控制权返回给函数调用处继续执行。

函数的定义和使用可以将程序分解为更小的模块,提高代码的可读性和可维护性。通过函数的参数和返回值,可以在函数之间传递数据和结果。这样的模块化设计使得程序更易于理解、调试和修改。

三、实验内容

1. sum函数

定义一个函数,功能为返回两个整型数字的和。

代码

#include<iostream>
using namespace std;
int sum(int a,int b) {return a + b;
}
int main() {int input1, input2,answer;cin >> input1 >> input2;answer = sum(input1, input2);cout << answer;return 0;
}

截图

分析

上述代码定义了一个int型函数,叫做sum,会返回一个int型值。

在定义函数名时,不能随便定义,不能定义库中已有的函数,会发生函数重定义的错误。函数重定义错误通常会导致编译失败,并生成相应的错误消息。

由于需要输入两个数,则参数列表(即括号内部)应包含两个参数,分别为a和b,等于定义了a和b,在函数内部就可以使用a和b。

int型一定只会返回一个值,而且是int型。sum(int a,int b)相当于一个int型的值。

在函数的使用中,只需把要使用的数填补到函数中,如上述代码,将input1和input2放入。

2. sum函数

定义一个函数,功能为返回两个float型数字的和。

代码

#include<iostream>
using namespace std;
float sum(float a,float b) {	return a+b;
}
int main() {float a,b,ans;cin >> a >> b;ans = sum(a, b);cout << ans;return 0;
}

截图

分析

因为要求返回float型数字的和,只需把int改为float即可

3. rank_grade函数

定义一个函数,分数低于60评级为4,位于60-80分评级为3,位于80-90分评级为2,位于90-100分评级为1

代码

#include<iostream>
using namespace std;
int rank_grade(int a) {if (a < 60) {return 4;}else if (a < 80) {return 3;}else if (a < 90) {return 2;}else if (a < 100) {return 1;}
}
int main() {int grade,rank;cout << "请输入你的分数:";cin >> grade;rank = rank_grade(grade);cout << "你的等级为:"<<rank;return 0;
}

截图

分析

这个函数只需要一个输入参数,即分数,但是可能会返回不同的值

利用if来判断最后返回哪个评级,但是这个函数有一个问题,当输入比100大的数字,即输入不规范的情况下,它会返回1,这是因为这个函数在运行过程中最后运行到return 1

在函数的最后加入一个 return 0,就会返回0

因为函数会在运行到符合条件的return处结束

4. rank_grade函数

定义一个函数,分数低于60评级为D,位于60-80分评级为C,位于80-90分评级为B,位于90-100分评级为A

代码

#include<iostream>
using namespace std;
char rank_grade(int a) {if (a < 60) {return 'D';}else if (a < 80) {return 'C';}else if (a < 90) {return 'B';}else if (a < 100) {return 'A';}
}
int main() {int grade;char rank;cout << "请输入你的分数:";cin >> grade;rank = rank_grade(grade);cout << "你的等级为:" << rank;return 0;
}

截图

分析

由于要返回字符,要将int型改为char型,且一个函数不可能返回不同类型的数。

5. 函数的嵌套使用

实现函数的加减乘除,共输入三个数,返回一个数字,前两个数字是需要参加运算的数,第三个数代表运算符,输入1代表加法,输入2代表减法,输入3代表乘法,输入4代表除法。

代码

#include<iostream>
using namespace std;
int addd(int a,int b) {	return a+b;
}
int decc(int a, int b) {return a - b;
}
int mull(int a, int b) {return a * b;
}
int divv(int a, int b) {return a / b;
}
int sortt(int a,int b,int c) {if (c == 1) {return addd(a, b);}else if (c == 2) {return decc(a, b);}else if (c == 3) {return mull(a, b);}else if (c == 4) {return divv(a, b);}
}
int main() {int a,b,c,ans;cout << "请输入两个数字:";cin >> a>>b;cout << "请输入运算规则:";cin >> c;ans = sortt(a, b, c);cout << "答案为:"<<ans;return 0;
}

截图

分析

定义了五个函数,前四个函数是实现加减乘除的功能,第五个函数是判断实现什么运算符的功能,第五个函数会用到前四个函数,所以定义时放在它们的后面定义,否则会报错

如下

所以要注意函数定义顺序

6. inputt函数

定义一个函数,可以实现输入输出功能

代码

#include<iostream>
using namespace std;
void inputt() {string s;cin >> s;
}
int main() {inputt();return 0;
}

截图

分析

函数不需要返回任何东西,则使用void声明函数即可,void不会返回任何东西,但这不意味着void定义的函数没什么作用,上述所有函数实现的功能都可以用void函数实现,有兴趣的同学可以试一下(全局变量)。

7.函数的递归

兔子数列问题,也称为斐波那契数列(Fibonacci sequence),是一个经典的数学问题,起源于公元13世纪的意大利数学家斐波那契(Leonardo Fibonacci)的著作《算盘书》(Liber Abaci)。

在《算盘书》中,斐波那契提出了一个理想化的问题:假设有一对刚出生的兔子,从第三个月起,每个月都会生一对新兔子(一雄一雌),而新生的兔子在出生后第三个月也开始生兔子。假设所有的兔子都不会死亡,问在第n个月时,共有多少对兔子?

斐波那契数列的定义如下:

第0个月:0对兔子
第1个月:1对兔子
第2个月:1对兔子
第3个月及以后:前两个月的兔子总数之和
用数学符号表示为:

F(0) = 0
F(1) = 1
F(2) = 1
F(n) = F(n-1) + F(n-2),其中 n ≥ 3
斐波那契数列的前几个数字为:0, 1, 1, 2, 3, 5, 8, 13, 21, ...

代码

#include<iostream>
using namespace std;
int fac(int n)
{if (n == 0) {return 0;}else if (n == 1) {return 1;}else if (n == 2) {return 1;}else {return fac(n - 1) + fac(n - 2);}
}
int main() {int n;cin >> n;cout << fac(n);return 0;
}

截图

分析

当n大于等于3时,不能直接得到结果,得通过fac(n-1)和fac(n-2),一直推,直到可以直接从函数中得知fac的值,会不断调用fac,原理是栈(数据结构会学到)。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

同城家政服务预约上门系统功能特点;

在繁忙的现代生活中&#xff0c;家政服务越来越受到人们的青睐。为了满足大家的需求&#xff0c;家政服务小程序应运而生。这款小程序致力于提供便捷的家政服务&#xff0c;让用户尽享高效、贴心的体验。本文将深入剖析家政服务小程序的功能特点及其优势。 一、家政服务小程序的…

华为高级Java面试真题

今年IT寒冬&#xff0c;大厂都裁员或者准备裁员&#xff0c;作为开猿节流主要目标之一&#xff0c;我们更应该时刻保持竞争力。为了抱团取暖&#xff0c;林老师开通了《知识星球》&#xff0c;并邀请我阿里、快手、腾讯等的朋友加入&#xff0c;分享八股文、项目经验、管理经验…

C# OpenCvSharp读取rtsp流录制mp4可分段保存

软件界面&#xff1a; 测试环境&#xff1a; VS2019 .NET Framework 4.7.2 OpencvSharp4.8.0 输入RTSP流地址即可拉取RTSP流&#xff0c;支持抓拍和录制RTSP流视频&#xff0c;且支持支持按固定时间保存&#xff0c;比如我想5分钟保存一个视频&#xff0c;设置保存间隔为30…

Linux实战:部署基于Postfix 与 Dovecot 的邮件系统

一、电子邮件系统简介 在电子邮件系统中&#xff0c;为用户收发邮件的服务器名为邮件用户代理&#xff08;Mail User Agent&#xff0c;MUA&#xff09;&#xff0c;MTA &#xff08;邮件传输代理&#xff09;的工作职责是转发处理不同电子邮件服务供应商之间的邮件&#xff0…

【node-express-sse】Server Sent Event 单向推送消息,实现站内信功能

sse 实现效果代码前端后端 实现效果 服务端返回的 Content-Type 是 text/event-stream&#xff0c;这是一个流&#xff0c;可以多次返回内容。 Sever Sent Event 就是通过这种消息来随时推送数据。 AIGC&#xff0c;如 ChatGPT 打字机消息回复实现原理 等也是使用sse实现。 还有…

安卓在SOA中的运用

安卓在运用SOA研发的过程中&#xff0c;会针对实际情况对研发的架构和流程进行优化&#xff0c;通过优化过的架构和实施方案&#xff0c;不仅可以大大提升了整车开发的效率和灵活行以及功能落地的稳定性&#xff0c;同时也增加了系统的向上兼容性。 目前基于车载SOA系统的研发…

软件游戏缺失XINPUT1_3.dll怎么安装,马上教会你

当我们打开某个软件或游戏时&#xff0c;系统提示“XINPUT1_3.dll丢失”怎么办&#xff0c;XINPUT1_3.dll是一个动态链接库文件&#xff0c;它包含了许多用于处理输入设备的函数。当计算机丢失这个文件时&#xff0c;一些依赖于它的应用程序可能无法正常运行&#xff0c;导致输…

实践:基于双向LSTM模型完成文本分类任务

目录 1 数据处理 1.1 数据加载 1.2 构造Dataset类 1.3 封装DataLoader 2 模型构建 3 模型训练 4 模型评价 5 模型预测 5 拓展实验 5.1 使用Pytorch内置的单向LSTM进行文本分类实验 ​编辑 5.2 使用Paddle内置的单向LSTM进行文本分类实验 总结 电影评论可以蕴含…

打印菱形和金字塔类型(总结)

首先&#xff0c;在之前的学习中&#xff0c;我们了解了菱形的打印&#xff0c;今天我们来对金字塔和菱形这类打印图形的问题&#xff0c;我们来做一个总结。 这个总结的来源是这今天做了一道题 这道题的答案如下 这个题做起来并不难&#xff0c;拓展到这类问题中&#xff0c;…

Axure软件大全:原型设计下载与学习指南!

Axure可以有效地创建原型&#xff0c;包括绘制APP和网页的原型图、框架图、结构图等。Axure内置的小部件可以用来构建动态交互。即使新手设计师不懂程序代码&#xff0c;也可以在Axure中创建复杂、动态、功能丰富的原型。对于想要深入研究和花时间学习程序的设计师来说&#xf…

深入解析云原生与Kubernetes:现代化应用开发的未来

云原生是一种创新的软件开发和部署方法论&#xff0c;旨在使应用程序能够更好地适应云环境的特性和需求。而Kubernetes作为云原生的核心技术&#xff0c;提供了强大的容器编排和管理能力&#xff0c;改变了应用部署和运行的方式。本文将深入探讨云原生和Kubernetes的概念、原理…

Elasticsearch:带有自查询检索器的聊天机器人示例

本工作簿演示了 Elasticsearch 的自查询检索器 (self-query retriever) 将问题转换为结构化查询并将结构化查询应用于 Elasticsearch 索引的示例。 在开始之前&#xff0c;我们首先使用 langchain 将文档分割成块&#xff0c;然后使用 ElasticsearchStore.from_documents 创建…