#include<stdio.h>
#define N 40
float average(int score[],int n);/*ave()函数原型*/
void readscore(int score[],int n);/*readscore函数原型*/
int main()
{ float score[N],aver;
int n;
scanf("%d",&n);
readscore(score,n);/*数组名作为函数实参调用函数readscore()*/
aver=average(score,n);/*数组名作为函数实参调用average()*/
printf("Average score is %f",aver);
return 0;
}
/*函数功能:计算n个学生的平均分*/
float average(int score[],int n) /*average()函数的定义*/
{ int i;
float sum=0;
for(i=0;i<n;i++)
{sum+=score[i];
}
/*return sum/n;这里为了防止发生除0错误,做如下修改*/
return n>0?sum/n:-1;
}
/*函数功能:计算n个学生的某门课程的成绩*/
void readscore(int score[],int n)
{ int i;
for(i=0;i<n;i++)
{ scanf("%d",&score[i]);
printf("%d ",score[i]);
}
printf("\n");
}
任务描述
本关任务:从键盘输入某班学生 C 语言课的成绩(已知该班人数为 40 人),要求分别定义三个子函数分别进行数组输入、输出和求平均分。
相关知识
如果希望定义一个函数,能对一个数组整体进行操作,我们应该注意以下 3 点:
- 定义函数时,形参是一维数组,那么主调函数也应该定义一个一维数组,不能只在一方定义,主调函数的数组称为实参数组。
- 实参数组与形参数组类型必须一致。
- 在 C 编译器中,用一维数组名作为函数形参时,在函数体内数组名自动退化为指针。C 编译器对形参数组的大小不作检查。
下面的几种书写形式是等效的:
void inputarr (int array[ ], int n)
{
…
}
void inputarr (int array[5], int n)
{
…
}
void inputarr (int array[10], int n)
{
…
}
void inputarr (int *array, int n)
{
…
}
当形参被声明为一维数组时,形参列表中数组的方括号内数组长度可以为空,即使不为空,也不起作用,上述四种书写形式,系统都将array
解释为指针变量。调用此函数时,不能将一个变量的地址传递给array
,必须将一个实参数组的地址传递给array
,要求形参和实参数组类型一致,其实就是要求地址类型一致。
定义输入数组元素的函数 inputarr ()
,函数没有返回值,返回值类型为void
:
void inputarr (int array[ ])
{
int i;
for (i=0; i < 40; i++)
{
scanf("%d", & array[i]);
}
}
但是这个 inputarr ()
函数,只能对长度为40
的数组进行输入操作,怎样才能用同一个函数对不同长度的数组都可以进行输入操作呢?
定义子函数时,在形参列表中增加一个整型变量n
,用来接收主调函数中实参数组的实际长度。改进函数 inputarr ()
定义如下:
void inputarr (int array[ ], int n)
{
int i;
for (i=0; i<n; i++)
{
scanf("%d", & array[i]);
}
}
调用这个子函数时,就是在向函数传递一维数组的时候,实参是数组名,后面不要方括号,数组名代表了数组的首地址,用数组名作函数参数,只传递一个地址,由于首地址相同,故实参数组与形参数组占用同一段内存,在该函数内,不仅可以读这个数组的元素,还可以修改它们的值。
请模仿 inputarr ()
函数编写以下两个函数的定义。
float average (int array[ ] , int n);
void outputarr (int array[ ] , int n);
编程要求
根据提示,在右侧编辑器 Begin-End 区间补充代码,从后台获取某班学生 C 语言课的成绩(已知每班人数最多不超过 40 人,具体人数由后台提供),计算该班的平均分,要求分别定义子函数进行输入、输出分数和求平均分。
测试说明
平台会对你编写的代码进行测试。
测试输入:
10
41 83 72 32 49 77 86 30 57 92
输入说明: 第一行为班级人数; 第二行为每个人的成绩。文章来源:https://www.toymoban.com/news/detail-463633.html
预期输出:文章来源地址https://www.toymoban.com/news/detail-463633.html
41 83 72 32 49 77 86 30 57 92
Average score is 61.900002
到了这里,关于C语言:编写函数进行一维数组输入输出和求平均值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!