20天轻松入门《C++第四章——函数》——4经坛教育
itomcoil 2025-06-15 16:59 8 浏览
该系列为C++初学者设计
编写不易,希望获得收藏,关注和转发的支持,谢谢。
constexpr函数
constexpr函数语法规定
constexpr修饰的函数,在其所有参数都是constexpr时一定返回constexpr
constexpr函数举例:
constexpr int get_size()(return 20;) //可以看出constexpr写在函数的类型前
constexpr int too= get_size();
//正确:foo是一个常量表达式
带默认参数值的函数
预先给形参给默认的值,如果调用实参,则以实参为主。
可以预先设置默认的参数值,调用时如给出实参,则采用实参值,
否则采用预先设置的默认参数值。
例:
int add(int x = 5,int y = 6){
return x + y;
}
int main(){
add(10.20);//10+20
add(10); //10+6
add(); //5+6
}
默认参数值的说明次序
有默认参数的形参必须列在形参列表的最右,即默认参数值的右面不能有无默认值的参数;
调用时实参与形参的结合次序是从左向右。
例:
int add(int x, int y = 5, int z = 6);//正确
int add(int x = 1, int y = 5, int z);//错误
int add(int x = 1, int y, int z = 6);//错误
切记默认值只用给一次就好了。默认参数值与函数的调用位置
如果一个函数有原型声明,且原型声明在定义之前,则默认参数值
应在函数原型声明中给出;
如果只有函数的定义,或函数定义在前,
则默认参数值可以在函数定义中给出。
例:int add(int x= 5,int y = 6); int add(int x = 5,int y = 6){
//原型声明在前 //定义在调用之前
int main(){ return x+y;
add(); }
} int main(){
int add(int x,int y){ add();
//此处不能再指定默认值 }
returnx+ y;
}
默认参数值例3-15
例3-15计算长方体的体积
函数getVolume计算体积
.有三个形参:length(长)、width(宽)、height(高)
其中width和height带有默认值2和3
主函数中以不同形式调用getVolume函数
函数的重载
求绝对值函数。底下一个是整数型的另外一个是实数型的。虽然由于他们的参数表不同,所以我们要写两个函数,但我们希望他们用同一个名字。
原因是:
函数重载
C++允许功能相近的函数在相同的作用域内以相同函数名声明,
从而形成重载。方便使用,便于记忆。
int abs(int x){
returnx<0?-x:x;
}
double abs(double x){
returnx<0?-x :x;
}
参数表不同的几种情况。
c++系统函数
C++的系统库中提供了几百个函数可供程序员使用,例如:
求平方根函数(sprt)
求绝对值函数 (abs)
使用系统函数时要包含相应的头文件,例如:
<cmath>
例3-17 系统函数应用举例
题目:
从键盘输入一个角度值,求出该角度的正弦值、余弦值和正切值。
分析:
系统函数中提供了求正弦值、余弦值和正切值的函数:sin()、cos().
tan(),函数的声明在头文件cmath中。
#include <iostream>
#include <cmath>
using namespace std;
const double PI=3.14159265358979;
int main() {
double angle;
cout << “Please enter an angle:”;
cin>> angle; //输入角度值
double radian = angle * PI/180;//转为弧度
cout <<“sin(” << angle << ")="<< sin(radian)<<endl
cout <<"cos("<< angle << ")= "<< cos(radian)<<endl:
cout << “tan("<< angle << ")="<<tan(radian)<<endl
return 0;
}
运行结果:
30
sin(30)=0.5
cos(30)=0.866025
tan(30)=0.57735
章末例题
例题一
编写函数float Convert(float TempFer),
参数和返回值都为float类型。
实现算法:C=(F-32)*5/9.
#include <iostream>
using namespace std
float Convert(float F)
float C
C=(F- 32)*5/9
return C;
}
int main() {
float F;
cout<<"please input the temperatur in fahrenheit: \n";
cin>>F;
cout<<"Conver the temperatur in celsius:\n
cout<<Convert(F);
例题二
编写递归函数int fib (int n),在主程序中输入n的值,
调用fib函数计算Fibonacci级数。
公式为:
fib(n)=fib(n-1)+ fib(n-2),n>2;
fib(1)=fib(2)=1。
由于这段程序函数体在函数调用之后,所以需要给出函数声明。
#include"stdafx.h" //是预编译处理器把stdafx.h文件中的bai内容加载到程序来。
#include <iostream>
using namespace std;
int fib(int n);
int main(){
int n, answer;
cout << "Enter number; ”
cin >> n
cout << "\n\n";
answer = fib(n);
cout << answer << ” is the ” << n << "th Fibonacci number\n"
return 0;
}
int fib (int n)
{
cout<< "Processing fib(” <<n<< “)... ";
if (n <3)
{
cout << "Return 1!\n";
return (1);
}
else
{
cout << "Call fib("<< n-2 << ") and fib(" << n-1 <<").\n"; //反复运用的结构,可以类比之前汉诺塔问题。
return( fib(n-2) + fib(n-1);
}
从这个题中还可以看出所调用函数值的形参名。可以和主函数中的实参名一致。
例题三
分别编写四个同名函数max1,实现函数重载;
可分别求取两个整数,三个整数,两个双精度数,
三个双精度数的最大值。
在main()函数中测试函数功能。
#include <iostream>
#include <cmath>
using namespace std;
int max1(int xint y); //两个整数的最大值
int max1(int xint y,int z);://三个整数的最大值
double max1(double x,double y);//两个双精度数的最大值
double max1(double x,double y,double z)://三个双精度数的最大值
int max1(int x,int y) //两个整数的最大值
if (x= =y) return x;
else if (x>=y)
return X;
else
return y;
int max1(int x,int y,int z)//三个整数的最大值
{
return max1(max1(xy),z); //巧妙地运用了已经定义好的函数,这也是之后学习需要培养的一个能力和意识。
}
double max1(double x,double y)//两个双精度数的最大值
{
if (abs(x-y)<1e-10) return x;//判断两浮点数是否相等的常见处理方式 以上abs这个函数是系统库自带的一个函数,用于求绝对值。需要在include指令中把cmath包含出来。
else if (x>=y)
return x;
else
return y;
}
在此函数中可以发现输入ABC3个整数值,但是当函数调用时,如果只调用两个,则从左到又开始调用。
例题四
在main()函数中提示输入两个整数x、y,
使用cin语句得到x、y的值,
调用pow(x,y)函数计算x的y次幂的结果,再显示出来。
注意:包含cmath库
#include <iostream>
#include <cmath>
using namespace std;
int main()
int x,y;
cout<< "Enter int x;
cin >>X;
cout << "Enter int y:
cout<<"\n";
cout<<"x="<<X<<"\t";
cout<<"y= "<<y<<"\n";
cout<<"pow(x,y)="<<pow(x,y);
return 0;
第四章完,谢谢收看 如果喜欢我的系列记得、点赞、收藏、加关注
相关推荐
- Java 如何从一个 List 中随机获得元素
-
概述从一个List中随机获得一个元素是有关List的一个基本操作,但是这个操作又没有非常明显的实现。本页面主要向你展示如何有效的从List中获得一个随机的元素和可以使用的一些方法。选择一个...
- 想月薪过万吗?计算机安卓开发之"集合"
-
集合的总结:/***Collection*List(存取有序,有索引,可以重复)*ArrayList*底层是数组实现的,线程不安全,查找和修改快,增和删比较慢*LinkedList*底层是...
- China Narrows AI Talent Gap With U.S. as Research Enters Engineering Phase: Report
-
ImagegeneratedbyAITMTPOST--ChinaisclosinginontheU.S.intheAIindustry-academia-research...
- 大促系统优化之应用启动速度优化实践
-
作者:京东零售宋维飞一、前言本文记录了在大促前针对SpringBoot应用启动速度过慢而采取的优化方案,主要介绍了如何定位启动速度慢的阻塞点,以及如何解决这些问题。希望可以帮助大家了解如何定位该类问...
- MyEMS开源能源管理系统核心代码解读004
-
本期解读:计量表能耗数据规范化算法:myems/myems-normalization/meter.py代码见底部这段代码是一个用于计算和存储能源计量数据(如电表读数)的小时值的Python脚本。它主...
- Java接口与抽象类:核心区别、使用场景与最佳实践
-
Java接口与抽象类:核心区别、使用场景与最佳实践一、核心特性对比1.语法定义接口:interface关键字定义,支持extends多继承接口javapublicinterfaceDrawabl...
- 超好看 vue2.x 音频播放器组件Vue-APlayer
-
上篇文章给大家分享了视频播放器组件vue-aliplayer,这次给大家推荐一款音频插件VueAplayer。vue-aplayer一个好看又好用的轻量级vue.js音乐播放器组件。清爽漂亮的U...
- Linq 下的扩展方法太少了,MoreLinq 来啦
-
一:背景1.讲故事前几天看同事在用linq给内存中的两个model做左连接,用过的朋友都知道,你一定少不了一个叫做DefaultIfEmpty函数,这玩意吧,本来很流畅的from......
- MapReduce过程详解及其性能优化(详细)
-
从JVM的角度看Map和ReduceMap阶段包括:第一读数据:从HDFS读取数据1、问题:读取数据产生多少个Mapper??Mapper数据过大的话,会产生大量的小文件,由于Mapper是基于虚拟...
- 手把手教你使用scrapy框架来爬取北京新发地价格行情(实战篇)
-
来源:Python爬虫与数据挖掘作者:霖hero前言关于Scrapy理论的知识,可以参考我的上一篇文章,这里不再赘述,直接上干货。实战演练爬取分析首先我们进入北京新发地价格行情网页并打开开发者工具,如...
- 屏蔽疯狂蜘蛛,防止CPU占用100%(mumu模拟器和雷电模拟器哪个更占用cpu)
-
站点总是某个时间段莫名的cpu100%,资源占用也不高,这就有必要怀疑爬虫问题。1.使用"robots.txt"规范在网站根目录新建空白文件,命名为"robots.txt...
- Web黑客近年神作Gospider:一款基于Go语言开发的Web爬虫,要收藏
-
小白看黑客技术文章,一定要点首小歌放松心情哈,我最爱盆栽!开始装逼!Gospider是一款运行速度非常快的Web爬虫程序,对于爱好白帽黑客的小白来说,可谓是佳作!Gospider采用厉害的Go语言开发...
- 用宝塔面板免费防火墙屏蔽织梦扫描网站
-
今天教大家在免费的基础上屏蔽织梦扫描,首先您要安装宝塔面板,然后再安装免费的防火墙插件,我用的是Nginx免费防火墙,然后打开这个插件。设置GET-URL过滤设置一条简单的宝塔面板的正则规则就可以屏蔽...
- 蜘蛛人再捞4千万美元 连续三周蝉联北美票房冠军
-
7月15日讯老马追踪票房数据的北美院线联盟今天表示,“蜘蛛人:离家日”(Spider-Man:FarFromHome)击退两部新片的挑战,连续第2周勇夺北美票房冠军,海捞4530万美元。法新...
- 夏天到了,需要提防扁虱,真是又小又恐怖的动物
-
夏天马上要到了,你知道吗,扁虱是这个夏天最危险的动物之一,很少有动物能比它还凶猛。Whenitcomestosummer'slittledangers,fewarenastiert...
- 一周热门
- 最近发表
-
- Java 如何从一个 List 中随机获得元素
- 想月薪过万吗?计算机安卓开发之"集合"
- China Narrows AI Talent Gap With U.S. as Research Enters Engineering Phase: Report
- 大促系统优化之应用启动速度优化实践
- MyEMS开源能源管理系统核心代码解读004
- Java接口与抽象类:核心区别、使用场景与最佳实践
- 超好看 vue2.x 音频播放器组件Vue-APlayer
- Linq 下的扩展方法太少了,MoreLinq 来啦
- MapReduce过程详解及其性能优化(详细)
- 手把手教你使用scrapy框架来爬取北京新发地价格行情(实战篇)
- 标签列表
-
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)
- sorted key (33)
- shutil.copy() (33)