015day(函数的学习)

来源:互联网 发布:淘宝水军平台 编辑:程序博客网 时间:2024/06/04 19:48

172210704111-陈国佳总结《2017年10月25日》【连续015天总结】

标题:函数的学习

内容:A.观看MOOC6.1,6.2;

           B.(a).函数定义 返回值类型 函数名(参数1类型 参数1名称,...........){    语句组(即“函数体”) }   无类型名时可写“void”;

               调用时  函数名(参数1,参数2,.....)        ;return 返回值; 无时:return ;(return是函数的出口,函数中可有多个return;函数的返回值与结束函数的return的返回值相同;   如:int Max(int x,int y) //求两个整型函数的较大值,x ,y是形参
{
if(x > y) 
    return x;
return y;
}
int main() 
{
int n =Max(4,6);//4,6是实参
cout << n <<","<<Max(20,n)<<endl;
return 0;   运行后输出结果为6,20;同时还练习了另外两个函数;其中一个为第二个函数调用第一个函数;

如:#define EPS 0.001
double Sqrt(double a)//求平均值
{
//此处见008day的迭代公式; 
}
double Distance(double x1,double y1,double x2,double y2)//求两点间距离
{
return Sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));

    (b).一般来说函数的定义必须出现在函数调用语句之前;也可以在调用语句前加上声明来代替(当定义A时,A内部调用B,而B内部调用了A,可用声明代替);

声明:int Max(int a,int b);(注意有“;")

main函数:C/C++程序从main函数开始执行,到return结束;

     (c).函数参数的传递:函数的形参是实参的一个拷贝,且形参的改变不会影响到实参;(除非形参类型是数组,引用或对象)

例:void Swap(int a,int b)
{
int tmp;//以下三行将a,b值互换
tmp = a;
a = b;
b = tmp;
cout<<"In Swap: a="<< a <<"b="<<b<<endl; 
}
int main ()
{
int a = 4,b = 5;
Swap(a,b);
cout<<"After swaping: a=" << a << "b="<<b;
return 0;
}运行后如下图所示:

其中,Swap函数中的a,b是形参,所以即使a,b改变了,实参a,b也不会有变化;

 (c).一维数组作为函数参数: 类型名 数组名[ ]([ ]中可不写元素个数)

注意:数组作为函数参数是传引用的,即形参数组改变,实参数组也要变;

如:int a1[4] = {4,15,6,9};
int a2[]={3,18,56,40,78};
int FindMax(int a[],int length){
     int mx = a[0];
     for(int i = 1;i<length;++i)
         if (mx<a[i])
                mx=a[i];
        return mx;
}
int main(){
cout<<FindMax(a1,sizeof(a1)/sizeof(int))<<endl;
cout<<FindMax(a2,sizeof(a1)/sizeof(int))<<endl;
return 0;
} 输出15,56;

例:int a1[4] = {4,15,6,9};
void SetToZero(int a[],int length)
{
for(int i=0;i<length;++i)
     a[i] = 0;
}
int main(){
    SetToZero(a1,4);
    for(int i = 0;i < 4;++i)
              cout << a1[i]<<",";
return 0;
} 该程序运行后,输出0,0,0,0;即实参发生了改变;

当以二维数组作为函数参数时;必须写列数;a[ ][ N ]

根据元素地址公式(见014day),写明列数,编译器才能算出地址;数组首地址+i*N*sizeof(a[0][0])+j*sizeof(a[0][0])

明日计划:学习递归初步;