要求分别用数组和指针作为函数参数。

有一数组,存放10名学生的成绩,编写函数,计算并输出平均成绩。学生成绩在主函数中输入,并在主函数中输出平均成绩,要求分别用数组和指针作为函数参数。
#include<stdio.h>
int aver()
{
int *p;
int sum = 0,average,i;
int a[10];
p = &a[0];
for(i=0;i<10;i++)
{
sum = sum + *p;
*p++;
}
average = sum / 10;
printf("%d", average);
return average;
}
void main()
{
int aver();
int a[10],i;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
printf("%d",aver);
}

供参考:

#include<stdio.h>
#define N 10
float aver(int a[]) //数组作为参数
{ 
    float sum = 0;
    int   i;
    for (i = 0; i < N; i++)
        sum = sum + a[i];
    sum /= N;
    return sum;
}
float aver1(int* p) //指针作为参数
{
    float sum = 0;
    int* q;
    for (q = p; q < p + N; q++)
        sum += *q;
    sum /= N;
    return sum;
}
void main()
{
    float aver(int a[]);
    float aver1(int* p);
    int a[N], i;
    for (i = 0; i < 10; i++)
        scanf("%d", &a[i]);
    printf("%.2f\n", aver(a));
    printf("%.3f", aver1(a));
}

上面的代码计算并输出了使用指针作为函数参数的平均成绩。如果要使用数组作为函数参数,可以这样编写:

#include<stdio.h>
int aver(int a[10])
{
    int sum = 0,average,i;
    for(i=0;i<10;i++)
    sum=sum+a[i];
    average = sum / 10;
    printf("%d", average);
    return average;
}

void main()
{
    int a[10],i;
    for(i=0;i<10;i++)
    scanf("%d",&a[i]);
    printf("%d",aver(a));
}

主要区别就是函数参数变成了数组a,在主函数中调用时直接传入数组a。


#include<stdio.h>
#define N 10

float aver(int a[], int n) //数组作为参数
{ 
    float sum = 0;
    int   i;
    for (i = 0; i < n; i++)
        sum = sum + a[i];
    sum /= n;
    return sum;
}
float aver1(int* p, int n) //指针作为参数
{
    float sum = 0;
    int* q;
    for (q = p; q < p + n; q++)
        sum += *q;
    sum /= n;
    return sum;
}
void main()
{
    float aver(int a[]);
    float aver1(int* p);
    int a[N], i;
    for (i = 0; i < 10; i++)
        scanf("%d", &a[i]);
    printf("%.2f\n", aver(a), i);
    printf("%.3f", aver1(a), i);
}