当前位置: 首页 > news >正文

【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
  • 使用函数模板有两种方式:自动类型推导、显示指定类型
  • 模板的目的是为了提高复用性,将类型参数化

相关文章:

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

1、函数 函数是对实现某一功能的代码的模块化封装。 函数的定义&#xff1a; 标准函数&#xff1a; 输入 n 对整数的 a、b &#xff0c;输出它们的和。 #include <iostream> #include <windows.h> using namespace std;int add(int a,int b);//函数原型声明int…...

华为数通HCIA题库(750题)

完整题库在这里&#xff1a;华为数通HCIA-RS题库注释版-加水印.pdf资源-CSDN文库 此处只节选几题。 1.网络管理员在网络中捕获到了一个数据帧&#xff0c;其目的MAC地址是01-00-5E-AO-B1-C3。关于该MAC地址的说法正确的是&#xff08; )。 A.它是一个单播MAC地址 B.它是一个广播…...

SpringIOC之support模块GenericXmlApplicationContext

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…...

CCF认证+蓝桥杯习题训练

贪心 *上取整公式* *代码展示* #include <iostream> #include <cstring> #include <algorithm>using namespace std;const int N 1e5 10;typedef long long LL;int v[N] , a[N];int main() {int n , d;cin >> n >> d;for(int i 1 ; i < n…...

vue前端开发自学基础,动态切换组件的显示

vue前端开发自学基础,动态切换组件的显示&#xff01;这个是需要借助于&#xff0c;一个官方提供的标签&#xff0c;名字叫【Component】-[代码demo:<component :is"ComponetShow"></component>]。 下面看看代码详情。 <template><h3>动态…...

16.桥接模式

桥接模式 介绍 桥接模式是一种结构型设计模式&#xff0c;它通过将抽象部分与实现部分分离&#xff0c;使它们可以独立变化。这种模式通过组合的方式来实现&#xff0c;而不是继承。桥接模式通过将抽象和实现解耦&#xff0c;从而实现抽象和实现的分离&#xff0c;使得系统更加…...

【网络安全】【密码学】【北京航空航天大学】实验一、数论基础(上)【C语言和Java实现】

实验一、数论基础&#xff08;上&#xff09; 一、实验目的 1、通过本次实验&#xff0c;熟悉相关的编程环境&#xff0c;为后续的实验做好铺垫&#xff1b; 2、回顾数论学科中的重要基本算法&#xff0c;并加深对其的理解&#xff0c;为本学期密码学理论及实验课程打下良好…...

Go语言的sync.Pool如何使用?使用场景具体有哪些?

sync.Pool 是 Go 标准库中提供的一个对象池&#xff08;Object Pool&#xff09;的实现。对象池是一种用于缓存和复用对象的机制&#xff0c;可以在一定程度上减轻内存分配的开销。sync.Pool 专门用于管理临时对象&#xff0c;适用于一些需要频繁创建和销毁的短暂对象&#xff…...

MySQL单表查询练习题

一、创建表的素材 表名&#xff1a;worker——表中字段均为中文&#xff0c;比如&#xff1a;部门号、工资、职工号、参加工作等 CREATE TABLE worker ( 部门号 int(11) NOT NULL, 职工号 int(11) NOT NULL, 工作时间 date NOT NULL, 工资 float(8,2) NOT NULL, 政治面貌 …...

Spring MVC中@Controller和@RestController的区别

Controller 和 RestController 是 Spring MVC 中用于处理 HTTP 请求的注解&#xff0c;它们有以下区别&#xff1a; 返回值处理方式&#xff1a; Controller 用于定义一个传统的 Spring MVC 控制器&#xff0c;它的方法通常返回视图名称或 ModelAndView 对象&#xff0c;由视图…...

Flink定制化功能开发,demo代码

前言&#xff1a; 这是一个Flink自定义开发的基础教学。本文将通过flink的DataStream模块API&#xff0c;以kafka为数据源&#xff0c;构建一个基础测试环境&#xff1b;包含一个kafka生产者线程工具&#xff0c;一个自定义FilterFunction算子&#xff0c;一个自定义MapFunctio…...

Edge浏览器入门

关于作者&#xff1a; CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP&#xff0c;带领团队单日营收超千万。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业化变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览…...

Go语言的调度器

简介 Go语言的调度器是一个非常强大的工具&#xff0c;它可以帮助我们轻松地实现并发编程。调度器的工作原理是将多个协程映射到多个操作系统线程上&#xff0c;并根据协程的状态来决定哪个协程应该在哪个线程上运行。 调度器有两种主要策略&#xff1a; 协作式调度&#xf…...

Linux系统使用超详细(十)~vi/vim命令①

vi/vim命令有很多&#xff0c;其实只有少数的用法对于我们日常工作中起到了很大帮助&#xff0c;但是既然我选择梳理Linux的学习笔记&#xff0c;那么一定全力把自己的理解和学习笔记的内容认真整理汇总&#xff0c;内容或许有错误&#xff0c;还请发现的C友们发现了及时指出。…...

C语言实现双向链表

1.版本一 由于节点之间的连接变多 所以我们最好提前将前驱节点和后继节点用变量保存下来 以免等下在进行节点之间的指向时出错 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> // 节点类 typedef struct Node {// 数据域int data;// 指针域…...

OpenGL 网格拾取坐标(Qt)

文章目录 一、简介二、代码实现三、实现效果参考资料一、简介 有时候我们希望通过鼠标来拾取某个网格中的坐标,这就涉及到一个很有趣的场景:光线投射,也就是求取一条射线与网格的交点,这里如果我们采用普通遍历网格中的每个面片的方式,当网格的面片数据量很大时计算效率就…...

GitHub高级搜索技巧

GitHub高级搜索技巧 in:name <关键字> 仓库名称带关键字查询 in:description <关键字> 仓库描述带关键字查询 in:readme <关键字> README文件带关键字查询 stars(fork): >() <数字> <关键字> star或fork数大于(或等于)指定数字的带关键字查…...

docker-compose安装HertzBeat赫兹跳动监控H3C交换机

前面我们用docker方式安装了HertzBeat&#xff0c;现在我们自己写个docker-compose.yml文件、创建文件直接docker-compose up -d直接启动运行 使用docker-compose需要先安装docker和docker-compose1、输入以下两段命令 mkdir 123 && cd 123 && mkdir data &a…...

NetSuite学习笔记 - 中心

一、什么是中心&#xff1f; 对于每个用户&#xff0c;NetSuite 会根据用户的指定角色显示一组可变的标签页面&#xff0c;称为中心。通俗来讲呢&#xff0c;NetSuite的中心其实就是我们常说的“导航菜单”。 只是在我过去常见的系统中&#xff0c;导航菜单一般都是固定的&am…...

鸿蒙开发笔记(三):页面和自定义组件生命周期

先明确自定义组件和页面的关系&#xff1a; 自定义组件&#xff1a;Component装饰的UI单元&#xff0c;可以组合多个系统组件实现UI的复用。 页面&#xff1a;即应用的UI页面。可以由一个或者多个自定义组件组成&#xff0c;Entry装饰的自定义组件为页面的入口组件&#xff0c…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...