C语言 一维数组名作函数参数

除了可以用数组元素作为函数参数外,还可以用数组名作为函数参数(包括实参和形参)。
注意:用数组元素作实参时,向形参变量传递的数组元素的值,而用数组名作函数实参时,向形参(数组名或指针变量)传递的是数组首元素的地址。
【例题1】
有一个一维数组score,内放10个学生成绩,求平均成绩。
【思路】
用一个函数Average来求平均成绩,不用数组元素作为函数实参,而是用数组名作为函数实参,形参也用数组名,在Average函数中引用各数组元素,求平均成绩并返回main函数。
【代码实现】

float Average(float arr[10])//定义Average函数
{
	float sum = arr[0];
	for (int i = 1; i < 10; i++)
	{
		sum = sum + arr[i];//累加学生成绩
	}
	float aver;
	aver = sum / 10;
	return aver;
}
int main()
{
	float score[10];
	printf("输入10个学生的成绩:\n");
	for (int i = 0; i < 10; i++)
	{
		scanf("%f", &score[i]);
	}
	float average;
	average = Average(score);//调用Average函数
	printf("这10个学生的平均成绩为:%.2f\n", average);
	return 0;
}

【运行结果】
请添加图片描述
【程序分析】
(1)用数组名做函数参数,应该在主调函数和被调函数分别定义数组,上例中arr是形参数组名,score是实参数组名,分别在其所在函数中定义,不能只在一方定义。
(2)实参数组与形参数组类型应一致(上例中都为float型),如不一致,结果将出错。
(3)在定义Average函数时,声明形参数组的大小为10,但实际上,指定其大小是不起任何作用的,因为C语言编译系统并不检查形参数组大小,只是将实参数组的首元素的地址传给形参数组名。形参数组名获得了实参数组的首元素的地址,由于数组名代表数组首元素的地址,所以认为,形参数组首元素(arr[0])和实参数组首元素(score[0])具有同一地址,它们共占同一存储单元,score[n]和arr[n]指的是同一单元。score[n]和arr[n]具有相同的值。
(4)形参数组可以不指定大小,在定义数组时在数组名后面跟一个空的方括号,如:float Average(float arr[10]),效果是相同的。
【例题2】
有两个班级,分别有n、m个学生,调用Average函数,分别求这两个班学生的平均成绩。
【思路】
例题1已经解决了求一个有确定长度的数组的平均值的问题。现在需解决求一个未知长度的数组的平均值的问题。在定义Average函数时不必指定数组的长度,在形参表中增加一个整型变量n,从主函数把数组的实际长度从实参传递给形参n。
【代码实现】

float Average(float arr[], int n)//定义Average函数
{
	float sum = 0;
	float aver;
	for (int i = 0; i < n; i++)
	{
		sum += arr[i];//累加学生成绩
	}
	aver = sum / n;
	return aver;
}

int main()
{
	float Average(float score[], int n);
	int n,m;
	printf("请输入第一个班学生个数:\n");
	scanf("%d", &n);
	float score1[100],score2[100];//定义两个长度为100未初始化的数组
	printf("请输入第一个班学生的成绩:\n");
	for (int i = 0; i < n; i++)
	{
		scanf("%f", &score1[i]);
	}
	 float average1=Average(score1, n);//用数组名score1和n作为实参
	printf("第一个班学生的平均成绩是%.2f\n", average1);
	printf("请输入第二个班学生个数:\n");
	scanf("%d", &m);
	printf("请输入第二个班学生的成绩:\n");
	for (int i = 0; i < m; i++)
	{
		scanf("%f", &score2[i]);
	}
	float average2 = Average(score2, m);//用数组名score2和m作为实参
	printf("学生的平均成绩是%.2f", average2);
	return 0;
}

【运行结果】
请添加图片描述

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值