本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。
输入格式:
输入第一行首先给出一个正整数N,表示学生的个数。接下来一行给出N个学生的成绩,数字间以空格分隔。
输出格式:
按照以下格式输出:
average = 平均成绩
max = 最高成绩
min = 最低成绩
结果均保留两位小数。
输入样例:
3
85 90 95
输出样例:
average = 90.00
max = 95.00
min = 85.00
#include <stdio.h>
int main(){
int N,grade,k,i=1;
float average,max,min,sum=0.0;
float maxy(float x,float y);
float miny(float x,float y);
scanf("%d",&N);
for(k=0;k<N;k++){
scanf("%d",&grade);
sum=sum+grade;
if (i==1){ //注意判断是否等于是“==”
max=grade;
min=grade;
i--;//控制只运行一次
}
max=maxy(max,grade);
min=miny(min,grade);
}
average=sum/N;
printf("average = %.2f\nmax = %.2f\nmin = %.2f",average,max,min);
return 0;
}
float maxy(float x,float y){
float z;
if(x>y)
z=x;
else
z=y;
return(z);
}
float miny(float x,float y){
float z;
if(x<y)
z=x;
else
z=y;
return(z);
}
//下列代码 较大N错误是什么鬼啊
/*#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int n,i,*p;
scanf("%d",&n);
if((p=(int*)malloc(n*sizeof(int)))==NULL){
//满足条件说明 not able to allocate memory 无法分配内存
exit(1); //退出整个程序,终止进程,并返回1给操作系统。
//由于返回0代表程序正常退出,返回1等其他数字通常代表异常终止。可通过返回的具体数值判断出错源。
}
for(i=0;i<n;i++){
scanf("%d",p+i);
}
double sum=0;
for(i=0;i<n;i++){
sum= sum + *(p+i);
}
printf("average = %.2f\n",sum/(1.0*n));
double index;
for (i=0;i<n;i++){
index= *p;//假设min为p p实际上和a[0]一样
if(*(p+i)>= index )
index=*(p+i);
}
printf("max = %.2f\n",index);
for (i=0;i<n;i++){
index= *p;
if(*(p+i)<= index )
index=*(p+i);
}
printf("min = %.2f\n",index);
free(p);
return 0;
} */