现有一维数组score,存放10个人的分数,计算平均值
#include<stdio.h>
float aver(float arr[10]);//实参数组和形参数组类型一致
int main()
{
float score[10];
int i;
float average;
printf("enter 10 new numbers:\n");
for (i = 0; i < 10; i++)
scanf_s("%f", &score[i]);
average = aver(score);
printf("the average is %5.2f", average);
return 0;
}
float aver(float arr[10])//形参数组可以不指定大小
{
int j;
float aver1,sum=0;
for (j = 0; j < 10; j++)
{
sum += arr[j];
}
aver1 = sum / 10;
return aver1;
}
现有两个班级,利用函数分别求平均分
可以在形参中加一个i,来控制循环的此数
#include<stdio.h>
float aver(float arr[10],int n);
int main()
{
float score1[10]={1,2,3,4,5,6,7,8,9,10};
float score2[5]={2, 4, 6, 8, 15};
int i;
printf("the score1 average is %5.2f", aver(score1, 10));//用数组名
printf("the score2 average is %5.2f", aver(score2, 5));//用数组名
return 0;
}
float aver(float arr[10],int n)
{
int j;
float sum=0, aver1;
for (j = 0; j < n; j++)
{
sum += arr[j];
}
aver1 = sum / n;
return aver1;
}
总结:用数组名作为函数参数时,不是数组元素的值传递给形参,而是把实参数组首元素的地址传递给形参数组,两个共同占用一段内存空间
a[0]与b[0]共用,a[1]与b[1]共用
多维数组名
现有一个3*4的矩阵,求出其中的最大值
#include<stdio.h>
int max(int arr[][4]);
int main()
{
int a[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
printf("%d", max(a));
return 0;
}
int max(int arr[][4])
{
int i = 0, j = 0, max = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
if (arr[i][j] > max)
max = arr[i][j];
}
}
return max;
}
在对源程序编译时,编译系统把形参数组处理为指针变量(例如把float array[]转换为float * array),该指针变量用来接收从实参数组传过来的地址。C语言允许用指针变量(如 float * array)或数组(如float array[])作为形参,二者是等价的。对数组元素的访问,用下标法和指针法也是完全等价的。用形参数组是为了便于理解,形参数组与实参数组各元素一一对应,比较形象好懂