(二十)自行制作函数

本文介绍如何在C++中定义自定义函数,包括计算数值的函数和处理字符串的函数,展示了不同类型的函数实现方法。

我们有时候需要自行制作一个函数,例如,我们要计算输入值*200,每次都打*200已经有一些麻烦了。假如我们要做的是*200+15然后再开方,明显就麻烦的多。


因此,自己制作一个函数,通过调用这个函数,然后给一个返回值,就方便的多。

 

例如,我们要做一个函数,他的效果是开方。然后我们知道开方的函数是sqrt(),他需要调用的文件头是 #include<cmath>。于是,我们可以这么做,上代码:


#include <iostream>  //调用输入输出流的那个库,反正就是那个
#include <cmath>	//调用计算开方的数学的那个库
using namespace std;	//调用名称空间,反正意思就是说可以省略std,用在这里,2个函数都可以省略,如果用在某一个函数里,那么另外一个就不能省略。

double kaifang(double);		//自定义函数,double表示是 双精度浮点数 8字节(反正可以显示小数)。里面的double表示输入值也可以是小数

int main()		//主函数
{
	cout << "这里你可以输入一个数字,他会自动显示这个数值开方后的结果。" << endl;	//废话1
	cout << "请输入吧:";		//废话2
	double a;	//定义双精度浮点数8字节(反正意思是可以是小数)
	cin >> a;	//输入 你要计算的数字
	cout << "你输入的数字是" << a << endl;	//废话3
	cout << "现在开始计算a开方后的结果" << endl;	//废话4,
	double b;	//定义你要输出的结果也是一个小数,用int的话就只能显示整数部分了。
	b = kaifang(a);	//b=调用的函数kaifang的返回值,其中a是输入值,并且a可以是小数。
	cout << "开方结果是: " << b;	//废话5,外加后面显示结果b
	cout << "计算结束。" << endl;	//废话6
	system("pause");	//暂停,让你能看结果
	return 0;	//无返回值
}

double kaifang(double a)	//自定义函数,他的输入值是double a(即小数a),他的返回值也是小数。
{
	return sqrt(a);  //return 表示返回值,返回值是开方a。
}

其中,第二个函数也可以写为:


double kaifang(double a)
{
	double c;
	c = sqrt(a);
	return c;
}


效果是一样的,只不过第二种写法要多定义一种变量。


第一个函数的


	double b;	//定义你要输出的结果也是一个小数,用int的话就只能显示整数部分了。
	b = kaifang(a);	//b=调用的函数kaifang的返回值,其中a是输入值,并且a可以是小数。
	cout << "开方结果是: " << b;	//废话5,外加后面显示结果b

也可以写为:


cout << "开方结果是: " << kaifang(a);	//废话5,外加后面显示结果b


效果也是一样的。

 

另外,假如我们把


double kaifang(double);和double kaifang(double a)

改为

int kaifang(double); 和int kaifang(double a)


那么假如结果是小数的话,返回值也只能是小数,例如输入1.44,正常结果是1.2,他返回结果是1。

 

那么假如我们需要返回的不是数字,而是一串文字怎么办,并且输入值可能是数字,甚至是多个数字,和上面类似那么我们这么做。


#include <iostream>  //调用输入输出流的那个库,反正就是那个
#include <cmath>	//调用计算开方的数学的那个库
using namespace std;	//调用名称空间,反正意思就是说可以省略std,用在这里,2个函数都可以省略,如果用在某一个函数里,那么另外一个就不能省略。

char32_t xianshi(double , int);		//自定义函数,double表示输入值可以是小数,int表示输入的第二个值是整数。char32_t 表示输出内容是字符串(即一串文字)

int main()		//主函数
{
	cout << "输入第一个数字,可以显示第一个数字的乘方和整数部分的开方。" << endl; //废话1
	double a;		//定义这个可以为小数的数a
	cout << "请输入这个数字吧: ";	//废话2
	cin >>a;		//输入这个数字
	cout << "你输入的数字为:" <<a<< endl;	//确认,并告诉你你输入的第一个数字是什么(由于double限制,只能显示6个数字。如果超出就会显示的很怪(我暂时看不懂)
	cout << "你再输入一个数字,他可以显示第一个数字减去第二个数字的差。" << endl; //废话3
	cout <<"需要注意的是,第二个数需要是整数,如果是小数,则只处理小数部分。" << endl;	//为了说明如何同时输入两个变量给自定义函数,所以加入第二个数
	int b;	//定义第二个数字为整数b,
	cin >> b;	//输入b
	cout << "你输入的第二个数字为:" << b << "  。请注意,没有小数部分" << endl;	//让你确定你输入的第二个数字是什么。
	xianshi(a,b);	//执行自定义函数,输入的两个变量分别为a 和 b。由于不需要返回计算结果,因此单纯写出函数即可,自定义函数能显示其内部要求输出的内容。

	system("pause");	//暂停,让你能看结果
	return 0;	//无返回值
}

char32_t xianshi(double a,int b)	//自定义函数,这里是函数体,并接受一个参数——即输入值是double a(即小数a),他的返回值也是小数。
{
	int c;	//定义整数c,目的是为了让整数c 等于小数a的整数部分
	c = a;	//由于int 问题,所以double a的小数部分被省略。
	cout << "————————自定义函数的分割线————————" << endl; //为了区分第一个函数的内容
	cout << "第一个数字的整数部分为:" << c << endl;	//显示a的整数部分
	cout << "第一个数字的小数部分为: " << a-c << endl;	//带小数的a减去其整数部分,即为小数部分的a
	cout << "通过计算," << a << "的乘方是: "<< pow(a, 2) << endl;	//pow(a,2)表示a的二次方,这个函数无需调用其他函数原型(即开头的#include<>)
	cout << "而第一个数字整数部分的开方是:" << sqrt(c) << endl;	//sqrt(c)表示对c进行开方,这个函数需要调用函数原型,即开头的#include <cmath>
	cout << "————分割线2,处理第二个数————" << endl;	//分割线,用于区分,比较容易分辨
	cout << "第二个数为:" << b << endl;	//确认第二个数,免得写代码的人自己糊涂搞错
	cout << "而第一个数字减去第二个数字的差为:" << a - b << endl;	//告诉你计算结果是什么。
	return 0;	//因为不需要返回值,只需要输出文本,因此return 0
}

其中需要注意的是,xianshi() 这个函数,int main函数之前有 char32_t xianshi(double,int); ——注意有分号; 。在int main()函数内部有 xianshi(a,b) 。在自己的函数是这么写的 char32_t xianshi(double a,int b){ 函数内容 }。

其中相对应的是,在#include<> 和 int main() 中间的 

char32_t xianshi(double , int);

和在编写自己函数内容时的:

char32_t xianshi(double a,int b)

第一个有分号,第二个无分号。第一个是double和int,表示输入的变量类型,对应第二个就要是double a和int b(如果不对应就会提示出错)。只有在第二个里面有的变量,才会引用到char32_t xianshi(double a,int b){ 函数内容 }的函数内部之中,否则,里面的函数是不认识变量a和变量b的。

 

在int main()函数里面调用时,用法是直接输入  xianshi(a,b); 即函数名加两个括号再加你要往里面输入的变量a和变量b。就能正常调用了,假如没有a和b,那么无输入值的函数就会提示出错。

 

另外,之所以用char32_t,是因为要显示的是一串文字,如果只需要返回数字的话,那么比如可以是int abc(int ,int ); 和 c=abc(a,b) 以及 int abc(int a,int b){return a*b;} 这样,那么c就等于a*b了。

 

又注意,在后面的int abc(int a,int b){return a*b;} 之中。不一定非要是(int a,int b),也可以是(int e,int f){return e*f;} 。即——只是表示在调用的时候定义输入的变量。但需要注意的是,不能省略或者改动2个int,如果2个不一样,也不能颠倒。

 

第三个备注:char32_t xianshi(double a,int b) 也可以写为 void xianshi(double a,int b) 。 第一个返回的是字符串,第二个无返回值。所以其实第二个应该更好点。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值