习题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;  
}  */





 

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 这道题要求我们统计学生的平均成绩和及格人数。 首先,我们需要知道什么是及格分数。一般来说,及格分数是60分以上。因此,我们可以遍历所有学生成绩,统计出分数大于等于60分的学生人数,即为及格人数。 接着,我们需要计算学生的平均成绩。这可以通过遍历所有学生成绩,累加每个学生成绩,最后除以学生总数来实现。 最后,我们可以将统计结果输出,即可完成这道题目。 ### 回答2: 这道练习要求我们编写一个程序,统计一个班级的学生的平均成绩和及格人数。在开始编写代码之前,我们需要理解题目的要求并且思考解决方法。 首先,我们需要输入每位学生成绩,使用的数据结构可以是列表(list)。接着,我们可以使用循环语句来遍历整个列表,统计及格人数并且计算平均成绩。最后,输出结果即可。 下面是一份可能的代码示例: ``` grades = [] # 定义一个空列表来存储每个学生成绩 n = int(input("请输入班级人数:")) for i in range(n): grade = float(input("请输入第 %d 个学生成绩:" % (i+1))) grades.append(grade) # 添加到列表中 pass_num = 0 # 初始化及格人数为0 total = 0 # 初始化总成绩为0 for grade in grades: total += grade if grade >= 60: pass_num += 1 average = total / n # 计算平均成绩 print("平均成绩为:%.2f" % average) print("及格人数为:%d" % pass_num) ``` 在这份代码示例中,我们首先定义了一个空列表来存储每个学生成绩。接着,我们使用 `input` 函数来获取输入值,使用 `append` 函数将输入值添加到列表中。然后,我们使用循环语句遍历整个列表,并且依次统计及格人数和总成绩。最后,计算平均成绩输出结果即可。 需要注意的是,在代码中我们使用了格式化字符串来输出结果。另外,为了保证结果的精度,我们在平均成绩的计算时,将总成绩除以人数后保留两位小数。 综上所述,通过以上的方法我们可以很轻松地编写一个统计班级学生平均成绩和及格人数的程序。 ### 回答3: 这道题目要求我们编写一个函数,统计一组学生成绩的平均分和及格人数。具体而言,我们需要输入一个学生成绩列表,计算出其中及格(即分数大于或等于60)的学生人数和所有学生的平均分,然后把这两个数值作为一个元组返回。 要实现这个目标,我们可以通过遍历整个成绩列表,累加及格学生的数量和所有学生的总分数。在代码中,我们可以定义两个变量,分别为pass_number用于保存及格人数,和grade_sum用于保存总分数。初始值都为0。然后,我们对成绩列表进行遍历,对于每一个成绩,我们判断是否及格,如果及格则把pass_number加1,同时把grade_sum增加该成绩的数值。遍历结束后,我们可以通过pass_number和grade_sum计算出平均分和及格人数,并将它们封装成一个元组返回即可。 具体实现如下: ``` def score_statistics(scores): pass_number = 0 grade_sum = 0 for score in scores: if score >= 60: pass_number += 1 grade_sum += score average_grade = grade_sum / len(scores) return (pass_number, average_grade) ``` 这个函数的用法非常简单。我们只需要将学生成绩列表作为参数传入,就可以获取到及格学生人数和平均分数两个值了。比如: ``` scores = [89, 78, 92, 35, 67, 70, 60, 55, 81, 94] result = score_statistics(scores) print(result) ``` 执行上面的代码后,就会输出如下结果: ``` (6, 72.1) ``` 这表示,这10个学生中,有6个人及格了,平均分数为72.1分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CLiuso

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值