初识c++中的函数

c++中的函数(模块化编程)

c++中的函数有两类,一类为标准函数,既c++定义好的函数,如我们可以使用getline()函数输入字符串等;
一类是自定义函数,要根据实际需要定义。总体上来说函数就是为了提高代码的重复使用。不能每一次用都用重复写一次代码。如
我们要计算平面上两个点的曼哈顿距离,(x1,y1)和(x2,y2)的曼哈顿距离为|x1-x2|+|y1-y2|
正常的写法就是:

#include<iostream>
using namespace std;
int main()
{
  double x1,y1,x2,y2;
  double dx,dy;
  cin>>x1>>y1>>x2>>y2;
  if(x1>x2)    //计算|x1-x2|
    dx=x1-x2;
  else
    dx=x2-x1;
  if(y1>y2)
    dy=y1-y2;
  else
    dy=y2-y1;
  cout<<dx+dy<<endl;
  retrun 0;
}

 


这仅仅是个简单的问题,我们并不希望在写代码的时候做重复的工作,而且也不希望main()中有太多的代码,要进可能的减少main()中的代码
所以我们修改了以上的程序:

#include<iostream>
using namespace std;
double abs(double x)
{
  if(x>0)
    return x;
  else
    return -x;
}
int main()
{
  double x1,y1,x2,y2;
  double dx,dy;
  cin>>x1>>y1>>x2>>y2;
  dx=abs(x1-x2);
  dy=abs(y1-y2);
  cout<<dx+dy<<endl;
  return 0;
}

 


其中double abs(double x)是我们自定义的用来求绝对值的函数,函数定义的语法为:

返回类型 函数名(参数列表)

函数体

1、返回类型可以是我们之前学过的各种类型,如int double char等,但是函数体内必须返回一个同类型的值;返回类型也可以是void表示不需要返回类型
2、函数名是标识符,一个程序除了主函数名必须为main外,其他的函数都必须按照标识符的命名规则命名。

函数的形式:无参数函数,有参数函数和空函数,空函数主要用来以后拓展程序所用,没有具体的工作。

函数的声明和调用
自定义函数必须要在main函数前面声明我们才能够使用,如前面求绝对值的函数abs。但是实际上我们并不希望main函数前面有太多的函数,我们希望把函数放在main函数的后面,如果把前面程序中abs函数放在main函数后面,调试时会提示找不到abs函数,这也就是说函数要“先有后用”,所以为了解决这个问题,我们只要把abs函数的声明放在main函数前,其函数体的定义放在main函数后即可。

#include<iostream>
using namespace std;
double abs(double x); //函数的声明,其中x可有可无
int main()
{
  double x1,y1,x2,y2;
  double dx,dy;
  cin>>x1>>y1>>x2>>y2;
  dx=abs(x1-x2);    // 函数调用
  dy=abs(y1-y2);
  cout<<dx+dy<<endl;
  return 0;
}
double abs(double x)
{
  if(x>0)
    return x;
  else
    return -x;
}

 


函数的调用要遵循参数类型一致性原则,既传递给函数的值要和自定函数的参数的类型一致。如上面的函数调用x1-x2的类型是double 和abs函数参数的类型double一致。

 

利用函数对数组进行排序

#include<iostream>
using namespace std;
void px(int x[],int n); //排序 ,要把数组和数组元素的个数传进去 
int main()
{
    int a[]={3,2,8,10,1,12 ,18,50,6,9,45};
    int n=sizeof(a)/sizeof(int);// 数组元素的个数
    px(a,n);// 为什么是a而不是a[n]?实际上a是数组a[n]的地址 
    for(int i=0;i<n;i++)
    cout<<a[i]<<" ";
    return 0;
}
void px(int x[],int n)
{
    int temp;
    for(int i=0;i<n-1;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            if(x[i]>x[j])
            {
                temp=x[i];
                x[i]=x[j];
                x[j]=temp;    
            }
        }
    }
}

 

posted @ 2019-03-07 16:29  Nikel  阅读(265)  评论(0编辑  收藏  举报