【C++ 程序设计入门基础】- 第4节-函数

1、函数

函数是对实现某一功能的代码的模块化封装。

 函数的定义:

标准函数:

输入 n 对整数的 a、b ,输出它们的和。

#include <iostream>
#include <windows.h>
using namespace std;int add(int a,int b);//函数原型声明int main()
{int n,a,b;cin>>n;int *c=new int[n];//动态数组for(int i=0;i<n;i++){cin>>a>>b;c[i]=add(a,b);//调用函数}for(int i=0;i<n;i++){cout<<c[i]<<endl;}return 0;
}int add(int a,int b){//函数定义return a+b;
}

运行结果如下:

 无返回值:

输入n,输出1~n之间所有整数。

#include <iostream>
#include <windows.h>
using namespace std;void print(int n);//函数原型声明int main()
{int n;cin>>n;print(n);return 0;
}void print(int n){//函数定义for(int i=1;i<=n;i++){cout<<i<<endl;}
}

运行结果:

 无参数:

输入n,如果n为10的倍数,输出3个“very good!”。

#include <iostream>
#include <windows.h>
using namespace std;void print();//函数原型声明int main()
{int n;cin>>n;if(n%10==0){print();}return 0;
}void print(){//函数定义for(int i=1;i<=3;i++){cout<<"very good!"<<endl;}
}

 运行结果如下:

 传值参数:

输入两个整数a,b,交换后输出。

#include <iostream>
#include <windows.h>
using namespace std;void swap(int x,int y);//函数原型声明int main()
{SetConsoleOutputCP(CP_UTF8);int a,b;cin>>a>>b;swap(a,b);cout<<"a和b交换后"<<a<<"\t"<<b<<endl;return 0;
}void swap(int x,int y){//传值参数定义int temp;temp=x;x=y;y=temp;
}

 发现传值参数调用,只在函数内有效,离开函数,参数并未交换值。

引用参数:

比如:int &b = a; 在定义b的时候前面的符号& 就表示b是a的一个引用,对引用变量的赋值等操作相当于对变量本身的操作。所以你对b赋值 b=a+14其实相当于a=a+14操作,引用又称为别名,相当于一个人两个名字。所以b是15。

 接下来我们在参数前面加个&号,代表引用参数,改变参数值,跳出函数依然生效。

 数组参数:

输入n个数存入数组a[]中,求和后输出和值。

#include <iostream>
#include <windows.h>
using namespace std;
//int a[100];//定长数组long long sum(int s[],int n){//参数数组long long count=0;for(int i=0;i<n;i++){count+=s[i];}return count;
}
int main()
{SetConsoleOutputCP(CP_UTF8);int n;cin>>n;int *a = new int[n];//动态数组for(int i=0;i<n;i++){cin>>a[i];}cout<<"sum 计算结果"<<sum(a,n)<<endl;return 0;
}

 运行结果(这里我输入10个数):

 字符串参数:

输入n个字母,如果是小写字母将其转换为大写字母,输出转换后的字符串。

#include <iostream>
#include <windows.h>
#include <cstring>
using namespace std;string covert(string &s)
{for(int i=0;i<s.length();i++){if(s[i]>='a'&&s[i]<='z'){s[i]-=32;//将小写字符转为大写}}return s;
}
int main()
{SetConsoleOutputCP(CP_UTF8);string s;cin>>s;covert(s);cout<<s<<endl;return 0;
}

 运行结果:

 函数嵌套:

#include <iostream>
#include <windows.h>
#include <cstring>
using namespace std;int gcd(int x,int y)//最大公约数
{int t;t=x%y;//求余数 while(t!=0){x=y;//y做被除数 y=t;//余数做除数 t=x%y;//求余数 }return y;
}
int lcm(int x,int y){//最小公倍数return x*y/gcd(x,y);
}
int main()
{SetConsoleOutputCP(CP_UTF8);int a,b;cin>>a>>b;cout<<"最大公约数:"<<gcd(a,b)<<endl;cout<<"最小公倍数:"<<lcm(a,b)<<endl;return 0;
}

运行结果如下:

 函数重载(多态):

多个同名函数(参数数目、类型、顺序不同)

写一个函数,对于字符串类型数据取其长度的一半,对于浮点数类型,求其值的二分之一。

 

#include <iostream>
#include <windows.h>
#include <cstring>
using namespace std;float half(float a){return a/2;
}
string half(string s){int n=s.length()/2;char *str=new char[n];for(int i=0;i<n;i++){str[i]=s[i];}return str;
}
int main()
{SetConsoleOutputCP(CP_UTF8);float a;string b;cin>>a>>b;cout<<"float 的一半值:"<<half(a)<<endl;cout<<"string 的一半值:"<<half(b)<<endl;	return 0;
}

 运行结果:

 函数模版:

  • C++另一种编程思想称为 泛型编程 ,主要利用的技术就是模板

  • C++提供两种模板机制:函数模板类模板

函数模板作用:

建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。

函数模版语法:
template<typename T>
T add(T x,T y)
{return x+y;} 
解释:

template --- 声明创建模板

typename --- 表面其后面的符号是一种数据类型,可以用class代替

T --- 通用的数据类型,名称可以替换,通常为大写字母

函数模版使用示例:
//交换整型函数
void swapInt(int& a, int& b) {int temp = a;a = b;b = temp;
}//交换浮点型函数
void swapDouble(double& a, double& b) {double temp = a;a = b;b = temp;
}//利用模板提供通用的交换函数
template<typename T>
void mySwap(T& a, T& b)
{T temp = a;a = b;b = temp;
}void test01()
{int a = 10;int b = 20;//swapInt(a, b);//利用模板实现交换//1、自动类型推导mySwap(a, b);//2、显示指定类型mySwap<int>(a, b);cout << "a = " << a << endl;cout << "b = " << b << endl;}int main() {test01();system("pause");return 0;
}
总结:
  • 函数模板利用关键字 template
  • 使用函数模板有两种方式:自动类型推导、显示指定类型
  • 模板的目的是为了提高复用性,将类型参数化

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

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

相关文章

Python数据分析案例34——IMDB电影评论情感分析(Transformer)

电影评论的情感分析 案例背景 很多同学对电影系列的数据都比较喜欢&#xff0c;那我就补充一下这个最经典的文本分类数据集&#xff0c;电影情感评论分析。用神经网络做。对国外的英文评论文本进行分类&#xff0c;看是正面还是负面情感。 数据集介绍 数据集&#xff1a;IMDb…

java每日一题——ATM系统编写(答案及编程思路)

前言&#xff1a; 基础语句学完&#xff0c;也可以编写一些像样的程序了&#xff0c;现在要做的是多加练习&#xff0c;巩固下知识点&#xff0c;打好基础&#xff0c;daydayup! 题目&#xff1a;模仿银行ATM系统&#xff0c;可以创建用户&#xff0c;存钱&#xff0c;转账&…

VMware workstation安装debian-12.1.0虚拟机(最小化安装)并配置网络

VMware workstation安装debian-12.1.0虚拟机&#xff08;最小化安装&#xff09;并配置网络 Debian 是一个完全自由的操作系统&#xff01;Debian 有一个由普罗大众组成的社区&#xff01;该文档适用于在VMware workstation平台安装最小化安装debian-12.1.0虚拟机。 1.安装准…

索引和视图

索引和视图 一、实验目的 学会使用SQL语句CREATE INDEX创建索引。学会使用SQL语句DROP INDEX删除索引。学会使用SQL语句CREATE VIEW创建视图的用法。掌握使用SQL语句ALTER VIEW修改视图的方法。了解删除视图的SQL语句DROP VIEW的用法。 二、实验内容SQL语句CREATE INDEX创建索…

谷粒商城-缓存使用分布式锁SpringCache(5天)

缓存使用 1.1.1 哪些数据适合放入缓存 即时性、 数据一致性要求不高的 访问量大且更新频率不高的数据&#xff08;读多&#xff0c; 写少&#xff09; 例如&#xff1a;电商类应用&#xff0c; 商品分类&#xff0c; 商品列表等适合缓存 本地缓存 使用Map进行本地缓存 本地缓存…

基于JavaWeb+BS架构+SpringBoot+Vue智慧党建系统设计与实现

基于JavaWebBS架构SpringBootVue智慧党建系统设计与实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 1 概 述 1 1.1 课题研究背景 1 1.2 课题研究意义 1 1.3 课题研究内容 2 2 系统开…

MySQL 基于 GTID 主从复制

GTID 定义 GTID 是 MySQL 事务标识&#xff0c;为每一个提交的事务都生成一个标识&#xff0c;并且是全局唯一的&#xff0c;这个特性是从 MySQL5.6 引进的。 组成 GTID 是由 UUID TID&#xff0c;UUID 是MySQL的唯一标识&#xff0c;每个MySQL实例之间都是不同的。TID是代表…

速度之巅-位图算法

1:简单通俗来讲就是速度非常之快 以字节为单位,用一位一位寻找 #include <iostream> using namespace std; //加载数据 //就是将能被3整除的位设置为:1 void init(char* data, int len) {unsigned int n len * 8;for (unsigned i 0; i < n; i){if (i%30){//判断能被…

DNS从入门到精通

DNS从入门到精通 Dns从入门到精通 DNS从入门到精通一、DNS原理二、企业高速缓存dns的搭建三、DNS相关名词解释四、权威DNS搭建编辑子配置文件&#xff08;主要写我们维护的域zone)开始解析 五、权威dns中的数据记录种类及应用编辑子配置文件&#xff08;主要写我们维护的域zone…

图像提取大师:轻松从指定时长中获取某帧的图片,视频剪辑方法

在数字媒体时代&#xff0c;视频和图像已成为生活中不可或缺的部分。要从视频中提取某一帧作为图片&#xff0c;或者在视频剪辑时要采用其他的方法来达到需求的效果。下面来看云炫AI智剪如何轻松地从指定时长的视频中获取某帧的图片&#xff0c;视频剪辑的新方法。 视频中按指定…

JMeter定时器之同步定时器

JMeter定时器之同步定时器 1. 背景2. 目的3. 介绍4. 例子4.1单个请求4.2多个请求 1. 背景 在实际生活中大家肯定遇到过一种场景&#xff0c;就是在某一时间或某一时刻&#xff0c;某件商品进行抢购&#xff0c;相当于秒杀&#xff1b;但是用JMeter进行测试的时候&#xff0c;如…

tcpdump常用命令

tcp首部解析&#xff1a; tcp-首部_tcp首部-CSDN博客 ref&#xff1a; Home | TCPDUMP & LIBPCAP https://www.cnblogs.com/onlyforcloud/p/4396126.html tcpdump 详细使用指南&#xff08;请尽情食用&#xff09;_tcpdump指定ip和端口-CSDN博客 【博客192】抓取报文查…

【Python机器学习】SVM——线性模型与非线性特征

SVM&#xff08;核支持向量机&#xff09;是一种监督学习模型&#xff0c;是可以推广到更复杂模型的扩展&#xff0c;这些模型无法被输入空间的超平面定义。 线模型在低维空间中可能非常受限&#xff0c;因为线和平面的灵活性有限&#xff0c;但是有一种方式可以让线性模型更加…

软件测试|Python数据可视化神器——pyecharts教程(十四)

使用pyecharts绘制极坐标系图 简介 极坐标系图是一种用于可视化数据的坐标系&#xff0c;与常见的直角坐标系图&#xff08;笛卡尔坐标系&#xff09;不同&#xff0c;它使用角度和半径来表示数据点的位置。极坐标系图非常适合展示数据的循环性和周期性关系&#xff0c;以及数…

VSCode 正则表达式 匹配多行

VS Code 正则表达式匹配多行 (.|\n)*? //test.js const test {str: VS Code 正则表达式匹配多行VS Code 正则表达式匹配多行VS Code 正则表达式匹配多行VS Code 正则表达式匹配多行VS Code 正则表达式匹配多行VS Code 正则表达式匹配多行VS Code 正则表达式匹配多行VS Code …

【Rust】get_local_info 0.2.4发布

发布0.2.4&#xff0c;修正0.2.3&#xff08;[我的Rust库更新]get_local_info 0.2.3-CSDN博客&#xff09;中存在的峰值算法bug&#xff0c;现已提交力扣并通过&#xff0c;耗时0ms

C++学习笔记——SLT六大组件及头文件

目录 一、C中STL&#xff08;Standard Template Library&#xff09; 二、 Gun源代码开发精神 三、 实现版本 四、GNU C库的头文件分布 bits目录 ext目录 backward目录 iostream目录 stdexcept目录 string目录 上一篇文章&#xff1a; C标准模板库&#xff08;STL&am…

为什么自动测试要发现缺陷?

Q:为什么你做了那么多自动测试&#xff0c;却很少能发现缺陷&#xff1f; A:为什么自动化测试要发现缺陷&#xff1f; 在讨论问题时&#xff0c;首先要对问题是否存在达成一致&#xff0c;而不是直接跳到解决方案。 前一阵子&#xff0c;笔者在某个高端测试群里面丢了一个小…

FFmpeg 入门

1. 编译 参考文档&#xff1a;FFmpeg编译和集成(FFmpeg开发基础知识)&#xff0c;重点注意这句话&#xff1a; 在MSYS2 Packages可以查到云仓库有哪些包&#xff0c;直接安装可节约大量时间。 注意&#xff1a;这个路径可自定义 吐槽 在看到这篇文章之前&#xff0c;花了大…

rke2 Online Deploy Rancher v2.8.0 latest (helm 在线部署 rancher v2.8.0)

文章目录 1. 简介2. 预备条件3. 安装 helm4. 安装 cert-manager4.1 yaml 安装4.2 helm 安装 5. 安装 rancher6. 验证7. 界面预览 1. 简介 Rancher 是一个 Kubernetes 管理工具&#xff0c;让你能在任何地方和任何提供商上部署和运行集群。 Rancher 可以创建来自 Kubernetes 托…