本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。
输入格式:
输入第一行首先给出一个正整数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才得以通过。