一,数据交换
交换两个数据的位置,通常选用中间变量t做为媒介,将它编写到函数中:
void swap(int m,int n)
{
int t;
//return可以立即结束该函数的执行,返回至调用函数的地方继续执行
if(m==n)return;
t=m;m=n;n=t;
}
int main()
{
int a,b;
cin>>a>>b;
cout<<a<<","<<b<<endl;
swap(a,b);
cout<<a<<","<<b<<endl;
return 0;
}
我们通常认为该程序可以实现交换a和b的位置,这就是该小节的易错点。
总结:参数传递有传值和传引用两种方式。
注:实参和形参之间是实参到形参的单向传导,形参的交换对实参无影响,但是可以通过交换两者地址的方式交换两者的值。
代码如下:
//这种方法称为传引用
void swap(int& m,int& n)
{
int t;
//return可以立即结束该函数的执行,返回至调用函数的地方继续执行
if(m==n)return;
t=m;m=n;n=t;
}
int main()
{
int a,b;
cin>>a>>b;
cout<<a<<","<<b<<endl;
swap(a,b);
cout<<a<<","<<b<<endl;
return 0;
}
二,局部变量
局部变量最主要的点就是变量所在的区域决定他它的作用范围。
int main()
{
//这个a在整个主函数中都可用
int a;
for(a=1;a<10;a++)
{
//这个b只在它所在的循环结构中起作用,以此类推
int b;
}
}
全局变量就是定义在所有函数外的变量,在整个程序中都可以使用。
三,参数传递的应用
要点:实参与形参个数,顺序,类型要一致。
1,判断一个数值x是否为数组的成员
int mem(int[],int,int);
int main()
{
int i,n,a[100],x;
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i];
}
cin>>x;
//引用数组只标注名称不加长度,因为传递的是数组的首地址
cout<<mem(a,n,x)<<endl;
}
int mem(int a[],int len,int x)
{
int i;
for(i=0;i<len;i++)
if(a[i]==x)break;
if(i<len)return i;
else return -1;
}
2,对分项成绩进行加权求和
void totel(int[][3],int);
int main()
{
int n,i,j,score[100][3];
cin>>n;
for(i=0;i<n;i++)
for(j=0;j<2;j++)
cin>>score[i][3];
totel(score,n);
return 0;
}
//二维数组作为函数的参数列要求尺寸
void totel(int a[][3],int len)
{
int i,j;
for(i=0,i<len;i++)
a[i][2]=a[i][0]*0.7+a[i][1]*0.3;
}
3*,十进制数转二进制数
int tran(int,int[]);
int main()
{
int x,a[10],n,i;
cin>>x;
n=tran(x,a);
for(i=n-1;i>=0;i++)
cout<<a[i];
return 0;
}
int tran(int y,int a[])
{
int n=0;
while(x!=0)
{
a[n]=x%2;
n++;
x/=2;
}
return n;
}
注:数组不能作为函数的返回值!