C++学习(3)

这里主要学习的是C++中的函数。在采用自顶向下设计方案的面向过程编程中,将程序分解成函数就一个基本原则。使用函数的另一优势在于,通过在程序中随处调用它们,程序的大小可能得以减少。

 

//程序1.内联函数的使用
#include<iostream>
using namespace std;
inline double mul(double x,double y)//内联函数,语法格式:关键词inline+返回类型+函数名+(参数列表)
{
	return(x*y);//内联函数在调用之前都需要先定义
}
inline double div(double p,double q)//内联函数的使用是为了消除小函数的调用开销
{
	return(p/q);//当函数小的只有一两行的时候,考虑使用内联函数,其它的情况没必要使用
}
int main()
{
	double a=12.345;
	double b=9.82;
	cout<<mul(a,b)<<endl;//调用内联函数mul
	cout<<div(a,b)<<endl;
	return 0;
}

C++中为了消除小函数的调用开销,采用了内联函数。当其被调用时,代码将按行展开。

<span style="font-size:12px;color:#000000;">程序2.带默认参数的函数:总是从右到左添加
好处:利用默认参数,向已有函数添加新参数;可将相似函数合并为一
#include<iostream>
using namespace std;
int main()
{
	float amount;
	float value(float p,int n,float r=0.15);//value 函数声明,默认参数为r=0.15
	void printline(char ch='*',int len=40);//printline 函数声明,设置默认参数ch='*',len=40
	printline();//调用printline函数,参数为默认值
	amount=value(5000.00,5);//默认参数的设置从右边第一个参量开始,依次设置,当调用函数时没改变参数,则保留默认参数
	cout<<"\n Final Value="<<amount<<endl<<endl;
	printline('=');
	return 0;
}
float value(float p,int n,float r)
{
	int year=1;
	float sum=p;
	while(year<=n)
	{
		sum=sum*(1+r);
		year=year+1;
	}
	return(sum);
}
void printline(char ch,int len)//打印输出ch所指字符,打印长度为len
{
	for(int i=1;i<=len;i++)
		printf("%c",ch);
	printf("\n");
}</span>

C++允许调用不带参数的函数。在声明时会检测类型的默认参数,而在调用时会使用其默认值。特别要提醒的是,只有尾部的连续几个参数才能有默认值。

<span style="font-size:12px;color:#000000;">程序3.函数重载:使用同一函数名来处理不同的任务
//重载volume函数来进行三种不同形体体积的计算
#include<iostream>
using namespace std;
int volume(int);//函数声明,子函数在主函数之后定义,所以要先声明
double volume(double,int);
long volume(long,int,int);
int main()
{
	cout<<volume(10)<<endl;//当前调用哪个函数由参数类型和数目决定
	cout<<volume(2.5,8)<<endl;
	cout<<volume(100L,75,15)<<endl;
	return 0;
}
int volume(int s)//计算正方体的体积
{
	return (s*s*s);
}
double volume(double r,int h)//计算圆柱体的体积
{
	return(3.14519*r*r*h);
}
long volume(long l,int b,int h)//计算长方体的体积
{
	return(l*b*h);
}</span>

C++中函数的重载也称为函数的多态性。在调用重载函数前先找到匹配的函数原型(函数原型即:返回类型+函数名+(参数列表)),匹配的函数原型是唯一的。函数重载主要运用在一些任务相近的函数,如类对象处理。

练习1.编写一个函数,从键盘读入一个大小为mXn的矩阵,并将其显示在屏幕上。

解题关键:创建矩阵的内存

<span style="font-size:12px;color:#000000;">#include<iostream>
using namespace std;
void input_show(int m,int n)
{
	double **A ;  
	A = new double*[m] ;  //为输入矩阵创建内存
	for( int i1 = 0 ; i1 < n; i1 ++ )  
	    A[i1] = new double[n] ;  </span>
<span style="font-size:12px;color:#000000;">	for(int i=0;i<m;i++)//输入矩阵
	{
		cout<<"Enter the"<<i<<"th row is:";//提示输入第i行矩阵元素
		for(int j=0;j<n;j++)
		{
			cin>>A[i][j];
		}
		cout<<endl;
	}
	cout<<"The Array is:"<<endl;
	for(int k=0;k<m;k++)//显示输入的矩阵
	{
		for(int l=0;l<n;l++)
		{
			cout<<A[k][l]<<" ";
		}
		cout<<endl;
	}
	//for( int i2 = 0 ; i2 < m ; i2 ++ ) //释放内存
	//	delete A[i2] ;  
	delete A ;  
}
int main()
{
	int M,N;
	cout<<"Enter the number of row is:";//提示输入矩阵的行数
	cin>>M;
	cout<<"Enter the number of col is:";//提示输入矩阵的列数
	cin>>N;
	input_show(M,N);//调用输入与显示矩阵函数
	return 0;
}</span>

练习2.使用内联函数,获得三个数中的最大值。

解题关键:主要了解内联函数的定义及调用方式。

<span style="font-size:12px;color:#000000;">#include<iostream>
using namespace std;
inline double Max(double a,double b,double c)//内联函数的声明及定义
{
	double temp,max;
	temp=a>b?a:b;
	max=temp>c?temp:c;
	return (max);
}
int main()
{
	double I,J,K;
	cout<<"Enter three numbers are:";//提示输入三个数
	cin>>I>>J>>K;
	cout<<"The big one is:"<<Max(I,J,K)<<endl;
	return 0;
}</span>

练习3.编写函数power( ),计算m的n次幂。n的默认值为2,使用函数重载实现m支持double类型参数和m支持int类型参数。

解题关键:考察对带默认参数函数及函数重载的使用。

<span style="font-size:12px;color:#000000;">#include<iostream>
using namespace std;
double power_function(double,int);//求幂函数声明
int main()
{
	double N,result;
	int M,option;
	cout<<"Enter the background number is:";//提示输入底数
	cin>>N;
	cout<<"Select the default parameters YES(1) or No(0)? ";//提示是否采用默认的指数2
	cin>>option;
	if(option)
	{
		result=power_function(N,2);//采用默认的指数2计算结果
	}
	else
	{
		cout<<"Enter the index number is:";//提示输入的指数
		cin>>M;
		result=power_function(N,M);//采用输入的指数计算结果
	}
	cout<<"The result is:"<<result<<endl;
	return 0;
}
double power_function(double a,int b)
{
	double temp1=a;
	for(int i=0;i<b-1;i++)
		temp1 *= a;
	return (temp1);
}</span>






 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值