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,原理是栈(数据结构会学到)。

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

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

相关文章

vue中怎么缓存当前组件?缓存后怎么更新?今天来说说keep-alive的理解

&#xff08;看完点个关注呗&#xff0c;持续更新&#xff09; 一、Keep-alive 是什么 keep-alive是vue中的内置组件&#xff0c;能在组件切换过程中将状态保留在内存中&#xff0c;防止重复渲染DOM keep-alive 包裹动态组件时&#xff0c;会缓存不活动的组件实例&#xff0c…

Pycharm2023版本:Python远程调试配置详解

工欲善其事&#xff0c;必先利其器 首先你需要选择一个专业版本的pycharm&#xff0c;社区版本不支持远程配置功能&#xff0c;专业版下载地址&#xff1a;Pycharm 2023 双击程序进行安装&#xff0c;30天内免费试用&#xff0c;如果想要永久使用&#xff0c;办法你懂的&…

Java强软弱虚引用

面试&#xff1a; 1.强引用&#xff0c;软引用&#xff0c;弱引用&#xff0c;虚引用分别是什么&#xff1f; 2.软引用和弱引用适用的场景&#xff1f; 3.你知道弱引用的话&#xff0c;能谈谈WeakHashMap吗&#xff1f; 目录 一、Java引用 1、强引用&#xff08;默认支持模式…

Cisco模拟器-OSPF路由协议

设计要求用两台双口路由器连接不同IP网段的计算机&#xff0c;并使用OSFP协议发现路由表使不同IP网段的计算机可以相互通信。 通过设计&#xff0c;可以连通IP地址网段不同的局域网&#xff0c;可应用在园区网的互连和互通的实现上。 主要配置步骤 路由器0&#xff1a; Router…

科技创新实验室数据管理优选:高效企业网盘推荐

科技创新实验室建设是国家加强科技创新基本能力建设的重要措施&#xff0c;企业网盘等高效办公工具的应用是保证科技创新实验室正常运行、提高科研项目团队合作效率的重要手段。 本文将介绍企业网盘Zoho WorkDrive提供的解决方案&#xff1a; 行业痛点1&#xff1a;分散的数据…

蓝队应急响应- windows常用命令

在蓝队日常中&#xff0c;免不了被入侵&#xff0c;那么就需要对目前的主机或者服务器进行检查&#xff0c;在日常生活中&#xff0c;人们使用最多的还是windows&#xff0c;比如客服的电脑中了木马&#xff0c;这个时候就需要蓝队去进行溯源等后续操作。 1. msinfo32.exe 打开…

Python+OpenCV 零基础学习笔记(1-3):anaconda+vscode+jupyter环境配置

文章目录 前言相关链接环境配置&#xff1a;AnacondaPython配置OpenCVOpencv-contrib:Opencv扩展 Notebook:python代码笔记vscode配置配置AnacondaJupyter文件导出 前言 作为一个C# 上位机&#xff0c;我认为上位机的终点就是机器视觉运动控制。最近学了会Halcon发现机器视觉还…

理解ByteBuffer

Buffer 的使用 我们通过 Java 中 NIO 包中实现的 Buffer 来给大家讲解&#xff0c;Buffer 总共有 7 种实现&#xff0c;就包含了 Java 中实现的所有数据类型。 本篇文章中&#xff0c;我们使用的是 ByteBuffer&#xff0c;其常用的方法都有&#xff1a; putgetfliprewindmark…

【基础】【Python网络爬虫】【2.请求与响应】常用请求报头和常用响应方法

Python网络爬虫基础 爬虫基础请求与相应HTTP/HTTPS 协议HTTP/HTTPS的优缺点HTTP 的缺点HTTPS的优点 请求与响应概述请求请求目标&#xff08;url&#xff09;请求体&#xff08;response&#xff09;常用的请求报头查看请求体&#xff08;requests 模块&#xff09; 响应HTTP响…

微服务(10)

目录 46.k8s中镜像的下载策略是什么&#xff1f; 47.image的状态有哪些&#xff1f; 48.如何控制滚动更新过程&#xff1f; 49.DaemonSet资源对象的特性&#xff1f; 50.说说你对Job这种资源对象的了解&#xff1f; 46.k8s中镜像的下载策略是什么&#xff1f; 可通过命令k…

报错大全(未完待续)

springboot Could not find artifact org.springframework.boot:spring-boot-maven-plugin 报错环境&#xff1a;昨天的springboot项目的pom文件正常&#xff0c;今天再打开就会有些依赖爆红 解决步骤&#xff1a; 去maven的仓库里找你下载的依赖文件&#xff0c;路径是你的…

证明:切线垂直于半径

证明&#xff1a; 切线垂直于过切点的半径。 下面是网上最简单的证明方法。 证明&#xff1a; 利用反证法。 如下图所示&#xff0c;直线AB和圆O切于点A&#xff0c;假设OA 不垂直于 AB&#xff0c;而 O B ⊥ A B OB \perp AB OB⊥AB&#xff0c;则 ∠ O B A 90 \angle OB…

感染了后缀为.[sqlback@memeware.net].2700勒索病毒如何应对?数据能够恢复吗?

导言&#xff1a; 近期&#xff0c;[sqlbackmemeware.net].2700 勒索病毒成为网络安全的一大威胁。该勒索病毒采用高度复杂的加密算法&#xff0c;将用户文件加密并勒索赎金。了解该病毒的特征对于有效恢复被加密数据以及预防进一步感染至关重要。如果受感染的数据确实有恢复的…

Spring Cloud Gateway + Nacos 实现动态路由

1、maven 依赖 主要依赖 <!-- 网关 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>案件差不多完整主要依赖 <!--Spring boot 依赖(微服务基…

每日一题——LeetCode961

方法一 排序法&#xff1a; 2*n长度的数组里面有一个元素重复了n次&#xff0c;那么将数组排序&#xff0c;求出排序后数组的中间值&#xff08;因为长度是偶数&#xff0c;没有刚好的中间值&#xff0c;默认求的中间值是偏左边的那个&#xff09;那么共有三种情况&#xff1a;…

Java时间工具类LocalTime

Java时间工具类LocalTime 嘚吧嘚LocalTime - API获取时间获取时分秒增减时分秒替换时间比较时间 嘚吧嘚 本篇文章整理一下有关LocalTime工具类的用法。个人感觉单独使用LocalTime类的几率不大&#x1f643;&#xff0c;使用频率最高的应该是LocalDateTime&#xff0c;但是既然…

变量的存储类型

auto类型 简述&#xff1a;c和c中的区别 auto类型表示自动存储类型 : 就是系统自动分配内存,使用结束后系统回收。 其实auto类型就是我们平时定义的局部变量&#xff0c;所以我们定义一个auto类型的变量&#xff0c;加auto都可以。 { auto int a 10; } 上面这行代码,…

Java EE Servlet之Servlet API详解

文章目录 1. HttpServlet1.1 核心方法 2. HttpServletRequest3. HttpServletResponse 接下来我们来学习 Servlet API 里面的详细情况 1. HttpServlet 写一个 Servlet 代码&#xff0c;都是要继承这个类&#xff0c;重写里面的方法 Servlet 这里的代码&#xff0c;只需要继承…

CSS与JavaScript的简单认识

CSS&#xff1a;是一门语言&#xff0c;用于控制网页表现&#xff0c;让页面更好看的。 CSS&#xff08;Cascading Style Sheet&#xff09;&#xff1a;层叠样式表 CSS与html结合的三种方式&#xff1a; 1、内部样式&#xff1a;用style标签&#xff0c;在标签内部定义CSS样式…

DevOps持续交付之容器化CICD流水线

DevOps持续交付 随着DevOps⼤规模化的落地和应⽤&#xff0c;持续集成以及持续交付已经是⼀种常态的。CI指的是持续集成&#xff0c;使⽤的开源⼯具是Jenkins&#xff0c;CD指的是持续交付和持续部署&#xff0c;⼀个完整的软件开发⽣命周期为: 主要流程可以具体为: 构建阶段…