zoukankan      html  css  js  c++  java
  • C++ 函数

    一、函数的定义与声明

    1、

    2、声明

    可以看出自己定义的函数没有声明,开方函数没有声明

    3、函数调用

    4、参数传递方式

    可以看到实参并没有发生变化。

    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<string>
    using namespace std;
    void swap(int x,int y)
    {
    	int temp;
    	temp=x;
    	x=y;
    	y=temp;
     } 
     
    int main()
    {
    	int a=1,b=2;
    	cout<<"before:a="<<a<<" b="<<b<<endl;
    	swap(a,b);
    	cout<<"exchange:a="<<a<<" b="<<b<<endl; 
    }
    

    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<string>
    using namespace std;
    
    int main()
    {
    	int a=1,b=2;
    	cout<<"before:a="<<a<<" b="<<b<<endl;
    	swap(a,b);
    	cout<<"exchange:a="<<a<<" b="<<b<<endl; 
    }
    
    void swap(int x,int y)
    {
    	int temp;
    	temp=x;
    	x=y;
    	y=temp;
     } 
    

    有点疑惑,更改函数的位置后,定义的函数不用声明也能通过编译  

    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<string>
    using namespace std;
    
    int main()
    {
    	int a=1,b=2;
    	cout<<"before:a="<<a<<" b="<<b<<endl;
    	swap(a,b);
    	cout<<"exchange:a="<<a<<" b="<<b<<endl; 
    }
    
    void swap(int &x,int &y)//引用,不预留位置,随着调用的变 
    {
    	int temp;
    	temp=x;
    	x=y;
    	y=temp;
     } 
    

    5、为形参定义默认值

    6、数组名做函数的参数

    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<string>
    using namespace std;
    
    int fun(int b[],int m,int n)
    {
    	int i,s=0;
    	for(i=m;i<m+n;i++)
    	    s=s+b[i];
    	return s;
     } 
    int main()
    {
    	int x,a[]={0,1,2,3,4,5,6,7,8,9};
    	x=fun(a,0,10);//不能给a后加方括号
    	cout<<x<<endl;
    	x=fun(a,3,5);
    	cout<<x<<endl;
    	return 0;
    }
    

    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<string>
    using namespace std;
    
    void  tranmat(int a[][10],int n)
    {
    	int t;
    	for(int i=0;i<n-1;i++)
    	{
    		for(int j=i;j<n;j++)
    		{
    			t=a[i][j];
    			a[i][j]=a[j][i];
    			a[j][i]=t;
    		}
    	}	    
     } 
    int main()
    {
    	int x[10][10],n;
    	cout<<"输入n(n<10):";
    	cin>>n;
    	cout<<"输入"<<n<<"行"<<n<<"列元素:"<<endl; 
    	for(int i=0;i<n;i++)
    	{
    		for(int j=0;j<n;j++)
    		{
    			cin>>x[i][j];
    		}
    	}
    	tranmat(x,n);
    	for(int i=0;i<n;i++)
    	{
    		for(int j=0;j<n;j++)
    		{
    			cout<<x[i][j]<<" ";
    		}
    		cout<<endl;
    	}
    	return 0;
    }
    

    可以看到直接将原来的数组改变了,并不会说生成一个新的数组。

    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<string>
    using namespace std;
    struct Student// 定义结构体 
    {
    	int stno;
    	char name[20];
    	int age;
    };
    
    void Print(Student a)
    {
    	cout<<a.stno<<endl;
    	cout<<a.name<<endl;
    	cout<<a.age<<endl; 
    }
    
    int main()
    {
        Student stu={1001,"zhangsan",20};//注意结构体如何初始化 
    	Print(stu);
    	return 0;	
    }
    

    二、递归函数

    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<string>
    using namespace std;
    int f(int n)
    {
    	if (n==0)
    	    return 1;
    	else
    	    return n*f(n-1);
     } 
    int main()
    {
        int n=3,m;
        m=f(3);
        cout<<m<<endl;
        
    }
    

    #include<iostream>
    #include<string>
    using namespace std;
    
    int s=0;//全局变量,次数
    void move(char x,char y)//移动函数 ,没有返回值 
    {
    	cout<<x<<"---->"<<y<<endl;
    	s++;
    }
    void hanoi(int n,char a,char b,char c)
    {
    	if(n==1)
    	    move(a,c);
    	else
    	{
    		hanoi(n-1,a,c,b);
    		move(a,c);
    		hanoi(n-1,b,a,c);
    	}
    } 
    
    int main()
    {
        int m;
        cout<<"请输入盘子个数:";
    	cin>>m;
    	cout<<"过程如下:"<<endl;
    	hanoi(m,'A','B','C'); 
    	cout<<"总共移动了"<<s<<"次"; 
    	return 0;
    }
    

    一定要注意提炼模型,移动柱子来表示移动的过程。再有注意全局变量的定义。

    三、内联函数

    四、函数重载

    五、变量的作用域

    注意理解:j是属于该函数中定义的值,而i 属于复合语句中的值,所以i的值发生了变化,而j的值没有发生变化。

    i会在循环结束后自动释放,所以判断i<5,可能出错。

    六、变量的存储类型

      

      

      

      

      

      

      

  • 相关阅读:
    自定义注解!绝对是程序员装逼的利器!!
    我女儿说要看雪,但是我家在南方,于是我默默的拿起了键盘,下雪咯。
    零基础转行前端,如何拿下了字节跳动、美团等大厂offer
    “TensorFlow 开发者出道计划”全攻略,玩转社区看这里!
    web面试必问的题
    Flutter开发指南之理论篇:Dart语法05(单线程模型,事件循环模型,Isolate)
    520了,用32做个简单的小程序
    虚拟机找不到本机vmnet0,vmnet8,无法连接xshell,解决方案
    Linux用户登出之后保持后台进程(nohup)
    Debian取消从光盘安装软件的方式(please insert the disc labeled)
  • 原文地址:https://www.cnblogs.com/ruo-li-suo-yi/p/8719528.html
Copyright © 2011-2022 走看看