这里主要学习的是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>