[2020.4.12]动态分配

本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。

输入格式:

输入第一行首先给出一个正整数N,表示学生的个数。接下来一行给出N个学生的成绩,数字间以空格分隔。

输出格式:

按照以下格式输出:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n,i,sum=0;
    float max=0,min=100,*ptr=NULL;
    scanf("%d",&n);
    ptr = (float*) calloc(n, sizeof(float));//动态分配内存,与malloc不同的是,calloc会为每个元素初始化为0
    for(i=0;i<n;i++)
    {
        scanf("%f",ptr+i);
        max=max>*(ptr+i)? max:*(ptr+i);
        min=min<*(ptr+i)? min:*(ptr+i);
        sum =sum + *(ptr+i);
    }
    printf("average = %.2f\nmax = %.2f\nmin = %.2f",sum*1.0/n,max,min);
    free(ptr);//malloc和calloc都不会自己释放内存,free可以释放ptr指向的内存,不必要,但这是好习惯。
    return 0;
}

其实一开始也不知道什么动态分配,后来网上查了查发现有malloc,calloc,realloc,free函数与之相关。

动态分配就没a[]的定义了,直接用指针代替。指针指向了个头地址,那么后面有多少个元素跟着,这要用动态分配定义。

不过值得一提的是,本来我用的是void main()写主函数,但是用了free(ptr)后,报错说我没有返回值,void也要返回值了??

于是我只好改回int main(),自己加了个return 0才得以通过。

猜你喜欢

转载自www.cnblogs.com/fake8864/p/12692238.html