习题8-10 输出学生成绩(20 分)

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

输入格式:

输入第一行首先给出一个正整数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;  
}  */





猜你喜欢

转载自blog.csdn.net/dreampinguo/article/details/81151562