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,可能出错。

六、变量的存储类型

 

 

  

 

  

  

  

  

  

  

 

posted on 2018-04-04 22:19  箬笠蓑衣  阅读(4585)  评论(0)    收藏  举报