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

news2025/1/20 11:55:45

目录

一、实验要求

二、实验原理

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.coloradmin.cn/o/1344703.html

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

相关文章

实现二叉树的基本操作与OJ练习

目录 1.二叉树的基本操作 1.1二叉树基本操作完整代码 1.2检测value值是否存在 1.3层序遍历 1.4判断一棵树是不是完全二叉树 2.OJ练习 2.1平衡二叉树 2.2对称二叉树 2.3二叉树遍历 1.二叉树的基本操作 1.1二叉树基本操作完整代码 public class BinaryTree {static…

推荐系统/电商中的 业务指标GMV

GMV&#xff08;Gross Merchandise Volume&#xff09;是指在一定时间内&#xff0c;一个电商平台上所有商品的总销售价值&#xff0c;通常以货币单位&#xff08;例如美元、人民币等&#xff09;表示。GMV是一个关键的电商业务指标&#xff0c;用于衡量平台的交易规模和业务增…

Flink(十一)【状态管理】

Flink 状态管理 我们一直称 Flink 为运行在数据流上的有状态计算框架和处理引擎。在之前的章节中也已经多次提到了“状态”&#xff08;state&#xff09;&#xff0c;不论是简单聚合、窗口聚合&#xff0c;还是处理函数的应用&#xff0c;都会有状态的身影出现。状态就如同事务…

【网络安全】upload靶场pass1-10思路

目录 Pass-1 Pass-2 Pass-3 Pass-4 Pass-5 Pass-6 Pass-7 Pass-8 Pass-9 Pass-10 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1…

“从零到一“基于Freeswitch二次开发: 应用架构设计(二)

一、架构分享 上一篇文章“从零到一“基于Freeswitch二次开发:Freeswitch入门与网络架构 (一) 对Freeswitch二次开发做了一个介绍&#xff0c;距离这篇文章的发布时间有点久了&#xff0c;之前一直没时间把下文补上来。正好到了年末想起来&#xff0c;就把我们的一个实现架构进…

前端性能优化 将资源放到 linux 服务器上 提升访问效率

我们先远端连接服务器 然后服务器终端输入 mkdir 目录路径建出一个新的文件路径 回到我们自己的电脑 然后 在要缓存到服务器的文件目录下打开终端 输入 scp -r ./xidis.hdr 用户名 如果没设置用户名就是root服务器公网IP:/root/xhdr例如 scp -r ./xidis.hdr root1.113.266…

JavaScript基础知识点总结:从零开始学习JavaScript(六)

本章内容主要让小伙伴们自主练习 &#xff0c;建议大家先自己写出来答案&#xff0c;然后对照我的&#xff01;&#xff08;题不难主要培养自己的编程思维&#xff01;&#xff01;&#xff01;&#xff09; 如果大家感感兴趣也可以去看&#xff1a; &#x1f389;博客主页&…

Python跨年烟花秀

写在前面 今年跨年怎么过呢~博主用python的pygame实现了一场炫酷的烟花秀&#xff0c;一起来看看吧&#xff01; 环境需求 python3.11.4及以上PyCharm Community Edition 2023.2.5pyinstaller6.2.0&#xff08;可选&#xff0c;这个库用于打包&#xff0c;使程序没有python环境…

C#高级 08Json操作

1.概念 Json是存储和交换文本信息的语法。类似于XML。Json比XML更小、更快、更易解析。Json与XML一样是一种数据格式。Json是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。Json采取完全独立于语言的文本格式&#xff0c; 但是也使用了类似于C语言的习惯。这些特性使…

这儿有一道SPSS回归分析考试题,大家学会了吗?

为研究某地区房地产市场的价格与相关影响因素之间的关系&#xff0c;现从该地区采集了 20 份样本&#xff0c;数据如下表&#xff0c;请给出销售价格与相关影响因素之间的函数表达式&#xff0c;并从统计学角度分析这些因素之间的关系&#xff0c;最后预测 X 小区的平均销售价格…

java中的缓冲类HeapByteBuffer和DirectByteBuffer的区别

使用之前写的文章里的例子 https://blog.csdn.net/zlpzlpzyd/article/details/135292683 HeapByteBuffer import java.io.File; import java.io.FileInputStream; import java.io.Serializable; import java.nio.ByteBuffer; import java.nio.channels.FileChannel;public clas…

Tomcat与Servlet是什么关系

Tomcat与Servlet是什么关系 Apache Tomcat和Servlet之间存在密切的关系&#xff0c;可以说它们是一对密切合作的组件。下面是它们的关系&#xff1a; Tomcat是Servlet容器&#xff1a; Tomcat是一个开源的、轻量级的Servlet容器。Servlet容器是一个Web服务器扩展&#xff0c;用…

经典文献阅读之--OccNeRF(基于神经辐射场的自监督多相机占用预测)

0. 简介 作为基于视觉感知的基本任务&#xff0c;3D占据预测重建了周围环境的3D结构。它为自动驾驶规划和导航提供了详细信息。然而&#xff0c;大多数现有方法严重依赖于激光雷达点云来生成占据地面真实性&#xff0c;而这在基于视觉的系统中是不可用的。之前我们介绍了《经典…

php获取访客IP、UA、操作系统、浏览器等信息

最近有个需求就是获取下本地的ip地址、网上搜索了相关的教程&#xff0c;总结一下分享给大家、有需要的小伙伴可以参考一下 一、简单的获取 User Agent 信息代码: echo $_SERVER[HTTP_USER_AGENT]; 二、获取访客操作系统信息: /** * 获取客户端操作系统信息,包括win10 * pa…

一语道破爬虫,来揭开爬虫面纱

目录 一、爬虫&#xff08;网络蜘蛛(Spider)&#xff09; 1.1、是什么&#xff1a; 1.2、学习的原因 1.3、用在地方&#xff1a; 1.4、是否合法&#xff1a; 1.5、后果 案例&#xff1a; 二、应用领域 三、Robots协议 四、抓包 4.1、浏览器抓包 4.2、抓包工具 常见…

DDAE: Denoising Diffusion Autoencoders are Unified Self-supervised Learners

DDAE: Denoising Diffusion Autoencoders are Unified Self-supervised Learners Paper&#xff1a;https://arxiv.org/abs/2303.09769 Code&#xff1a;https://github.com/FutureXiang/ddae TL; DR&#xff1a;扩散模型的训练其实就是训练一个去噪模型&#xff0c;考虑到类似…

竞赛保研 基于机器视觉的12306验证码识别

文章目录 0 简介1 数据收集2 识别过程3 网络构建4 数据读取5 模型训练6 加入Dropout层7 数据增强8 迁移学习9 结果9 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器视觉的12306验证码识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向…

Harmony全局应用生命周期 EntryAbility.ts 讲解

之前 我们说过 page页面的生命周期 组件的生命周期 其实他和uni一样有一个整个应用的生命周期 我们如下图打开EntryAbility.ts 这是我们整个程序app的状态控制 他这里也有几个全局的生命周期 比如 我们手机 点开当前 App 启动 app 会触发 它的 onCreate 生命周期 当我们从手…

【并发设计模式】聊聊等待唤醒机制的规范实现

在多线程编程中&#xff0c;其实就是分工、协作、互斥。在很多场景中&#xff0c;比如A执行的过程中需要同步等待另外一个线程处理的结果&#xff0c;这种方式下&#xff0c;就是一种等待唤醒的机制。本篇我们来讲述等待唤醒机制的三种实现&#xff0c;以及对应的应用场景。 G…