一、函数的定义与声明
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,可能出错。
六、变量的存储类型