用数组元素作函数实参
#include <stdio.h>
int gcd(int m,int n)
{
int r;
while(r=m%n)
{
m=n;
n=r;
}
return n;
}
int main()
{
int i;
int a[8]= {26,1007,956,705,574,371,416,517};
int b[8]= {994,631,772,201,262,763,1000,781};
int c[8];
for(i=0; i<8; i++)
c[i]=gcd(a[i],b[i]); //对应元素的公约数
for(i=0; i<8; i++)
printf("%d ", c[i]);
printf("\n");
return 0;
}
数组内放10个学生成绩,求平均成绩
#include <stdio.h>
float average (float array[ ], int n)
{
int i;
float aver, sum=array[0];
for (i=1; i<n; i++)
sum=sum+array[i];
aver=sum/n;
return aver;
}
int main()
{
float score[10]= {100,90,89,87,61,76,98,78,82,90};
float aver;
aver=average(score,10);
printf("aver=%.2f\n", aver);
return 0;
}
应用:向量数乘和
#include <stdio.h>
int p(int a, int x[], int b, int y[], int n)
{
int i, s=0;
for(i=0; i<n; i++)
s+=a*x[i]+b*y[i];
return s;
}
int d[]= {2,3,5,4,9,10,8};
int v[]= {7,6,3,2,5,1,8,9,3,4};
int w[]= {1,2,3,4,5,6,7,8,9,10};
int main()
{
printf("s1=%d\n", p(1,d,2,v,8));
printf("s2=%d\n", p(3,v,4,w,10));
return 0;
}
回顾:形参占用与实参不同的空间
#include <stdio.h>
void fun(int a)
{
a=a*10;
}
int main()
{
int b = 2;
printf("%d\n", b);
fun(b);
printf("%d\n", b);
return 0;
}
新的问题!
#include <stdio.h>
void fun(int a[])
{
int i;
for(i=0; i<2; i++)
a[i]=a[i]*10;
}
int main()
{
int b[2]= {2,4};
printf("%d\t%d\n", b[0], b[1]);
fun(b);
printf("%d\t%d\n", b[0], b[1]);
return 0;
}
应用:专用于排序的函数
#include <stdio.h>
#define N 10
void bubblesort(int a[]);
int main( )
{
int i,d[N]={3,5,9,1,3,6,-9,-7,10,12};
bubblesort(d);
for(i=0; i<N; i++)
printf("%d ", d[i]);
return 0;
}
void bubblesort(int a[])
{
int i,j,t;
for (i=0; i<N-1; i++)
for(j=0; j<N-i-1; j++)
if (a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
return;
}
符合工程原则的做法:元素个数也作参数!
#include <stdio.h>
void bubblesort(int [], int);
int main( )
{
int i,d[10]={3,5,9,1,3,6,-9,-7,10,12};
bubblesort(d,10);
for(i=0; i<10; i++)
printf("%d ", d[i]);
return 0;
}
void bubblesort(int a[], int n)
{
int i,j,t;
for (i=0; i<n-1; i++)
for(j=0; j<n-i-1; j++)
if (a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
return;
}