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.mzph.cn/news/586138.shtml

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

相关文章

uniapp中uview组件库的丰富Upload 上传上午用法

目录 基础用法 #上传视频 #文件预览 #隐藏上传按钮 #限制上传数量 #自定义上传样式 API #Props #Methods #Slot #Events 基础用法 可以通过设置fileList参数(数组&#xff0c;元素为对象)&#xff0c;显示预置的图片。其中元素的url属性为图片路径 <template>…

python文件打包实战技巧

众所周知&#xff0c;python是一种脚本语言&#xff0c;python程序必须在python环境下运行&#xff0c;所以如果想把自己写的程序给别人看的话&#xff0c;就比较麻烦&#xff0c;他需要先配置python环境&#xff0c;对于电脑小白来说这是“要命”的事情。而且如果是客户的话&a…

PulseGAN

研究背景 远程光电容积描记术 (rPPG) 是一种非接触式技术&#xff0c;用于测量面部视频中的心脏信号。健康监测和情绪识别等许多领域都迫切需要高质量的 rPPG 脉冲信号。然而&#xff0c;由于脉搏信号不准确的限制&#xff0c;现有的大多数rPPG方法只能用于获取平均心率&#…

AD域组策略

题目&#xff1a; 除manager 组和IT组&#xff0c;所有用户隐藏C盘&#xff1b;除manager 组和IT组&#xff0c;所有普通给用户禁止使用cmdIT01用户登陆域后&#xff0c;会自动增加驱动器X&#xff0c;该驱动器自动关联DC1的C:\tools文件夹&#xff1b;sales用户组的InternetE…

2023“信息安全管理与评估“---单机取证(高职组)

介绍&#xff1a; 竞赛有固定的开始和结束时间&#xff0c;参赛队伍必须决定如何有效的分配时间。请认真阅读以 下指引&#xff01; &#xff08;1&#xff09;当竞赛结束&#xff0c;离开时请不要关机&#xff1b; &#xff08;2&#xff09;所有配置应当在重启后有效&#xf…

ESP32S3+HX8347+3线SPI运行LVGL例程

一、clone lv_port_esp32到本地 git clone https://github.com/lvgl/lv_port_esp32.git 二、增加hx8347.c、hx8347.h components\lvgl_esp32_drivers\lvgl_tft下新增2个文件&#xff1a;hx8347.c、hx8347.h。因为lv_port_esp32中没有hx8347的驱动&#xff0c;需要自己写。这两个…

1.2.0 IGP高级特性之FRR

理论部分参考文档&#xff1a;Segment Routing TI-LFA FRR保护技术 - 华为 一、快速重路由技术 FRR(Fast Reroute)快速重路由 实现备份链路的快速切换&#xff0c;也可以与BFD联动实现对故障的快速感知。 随着网络的不断发展&#xff0c;VoIP和在线视频等业务对实时性的要求越…

web:[BJDCTF2020]The mystery of ip(ssti模板注入、Smarty 模板引擎)

题目 进入页面显示如下 点击flag页面得到ip 点击hint页面 在hint.php的源代码页面中发现 由题目可以知道要从ip入手 这里尝试抓包加上X-Forwarded-For请求头修改为127.0.0.1 因为直接将127.0.0.1输出到页面&#xff0c;可以猜测是ssti模板注入 可以继续验证 这里发现输入什么…

【数据结构】八、查找

一、基本概念 静态查找&#xff1a;只查找&#xff0c;不改变集合内数据元素 动态查找&#xff1a;有则输出元素&#xff0c;无则添加元素 二、静态查找表 2.1顺序查找 在线性表、链表、树中依次查找 2.2折半查找&#xff08;二分查找&#xff09; 在有序的线性表中&…

HTML5 `<audio>` 面试题

HTML5 <audio> 面试题 什么是HTML5 <audio>元素&#xff1f; 元素是HTML5的音频播放器。它允许在网页中嵌入音频文件&#xff0c;并提供了控制音频播放的功能。 如何在HTML中嵌入音频文件&#xff1f; 使用 <audio> 元素&#xff0c;通过设置 src 属性指定…

获取PG库 database与 user 创建时间以及cluster初始化时间

代码实现 echo "获取数据库创建时间" data_dir$(psql -U postgres -d postgres -X -qAt -c "show data_directory" ) db_dirs$(ls $data_dir/base |grep -v pgsql_tmp) for db_oid in $db_dirs dodb_exists$(psql -U postgres -d postgres -X -qAt -c &qu…

macos下转换.dmg文件为 .iso .cdr文件的简单方法

为了让镜像文件在mac 和windows平台通用, 所以需要将.dmg格式的镜像文件转换为.iso文件, 转换方法也非常简单, 一行命令即可 hdiutil convert /path/to/example.dmg -format UDTO -o /path/to/example.iso 转换完成后的文件名称默认是 example.iso.cdr 这里直接将.cdr后缀删…

C#高级 08Json操作

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

Kotlin基础语法

Kotlin基础语法 Kotlin内置数据类型变量可读可写变量可读变量 自动类型推导机制when表达式range表达式字符串模版函数函数定义函数简写默认参数具名函数参数Unit函数反引号函数匿名函数隐式返回函数作为形参函数引用函数作为返回值 可空性高级函数 let非空断言空合并操作符 高级…

Mac系统通过homebrew安装postgresql和postgis

花费了大概一天的时间安装postgresql和postgis&#xff0c;期间遇到了大量的坑&#xff0c;记录下来分享给大家&#xff0c;方便自己以后再次安装&#xff0c;也帮助别人踩坑 tip:我的系统是MAC ,通过homebrew安装的 最开始是通过homebrew安装了 postgresql13 &#xff0c;但…

2047过滤空格(C语言)

目录 一&#xff1a;题目 二&#xff1a;思路分析 三&#xff1a;代码 一&#xff1a;题目 二&#xff1a;思路分析 1.首先&#xff0c;这道题是一个字符串的问题&#xff0c;我们要先知道字符串存放在char类型的数组中的&#xff0c;并不是一个变量就可直接存放的下一个完整…

1.Linux快速入门

Linux快速入门 Linux操作系统简介Linux操作系统优点Linux操作系统发行版1. Red Hat Linux2. CentOS3. Ubuntu4. SUSE Linux5. Fedora Linux 32位与64位操作系统的区别Linux内核命名规则 Linux操作系统简介 Linux操作系统是基于UNIX以网络为核心的设计思想&#xff0c;是一个性…

云计算:OpenStack 配置云主机实例的存储挂载并实现外网互通

目录 一、实验 1. 环境 2.配置存储挂载 3.云主机实例连接外部网络&#xff08;SNAT&#xff09; 4.外部网络连接云主机实例&#xff08;DNAT&#xff09; 二、问题 1.云主机 ping 不通外部网络 2.nova list 查看云主机列表报错 3.nova list 与 virsh list --all有何区…

Go语言中的包管理工具之Go Modules的使用

GoLang 中常用的包管理的方式 常用的有三种 Go PathGo VendorGo Modules 关于 Go Modules 1 ) 概述 Go的包管理&#xff0c;经过社区和官方的共同努力下&#xff0c;最终在百家争鸣后Go官方在 2018.8 推出了go 1.11版本中的Go Modules&#xff0c;并且很快成为一统江湖的包…

python学习 21 excel分列

简单做了个模板&#xff0c;能干这个&#xff1a; 指定sheet中某列数据进行按需拆分&#xff0c;拆分后新建一个test的sheet&#xff0c;将数据分别存入test的不同列中。 import os import xlwings as xw import re #excel路径 pathrC:\Users\xxx\Desktop\123.xlsx#设置需要…