C语言编写程序 输入学生姓名与成绩 假设最多有50名学生

1求出平均值
2求出低于平均值的学生姓名
3求出最高分学生姓名

#include<stdio.h>
typedef struct student{
char name[20];
int gpa;
};
int main()
{
student a[55];
double average=0;
int n,i,sum=0,max=0,num=0;
printf("有多少学生:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("输入第%d名学生姓名和成绩用空格分开:",i+1);
scanf("%s %d",&a[i].name,&a[i].gpa); 
sum+=a[i].gpa;
if(a[i].gpa>max)
{
max=a[i].gpa;
num=i;
}
}
average=sum*1.0/n*1.0;
printf("平均值为:%lf\n",average);
printf("低于平均分的学生:");
for(i=0;i<n;i++)
{
if(a[i].gpa<average)
{
printf("%s ",a[i].name);
}
}
printf("\n成绩最高的学生是:%s\n",a[num].name);
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-03-02
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main(){
int i,j,count=0;
double avg,temp,score[50],tempScore[50],sum=0;
char *sName[50],str[1000];
//问题1
for(i=0;i<sizeof(sName)/sizeof(sName[0]);i++){
printf("请输入第%d个学生的名字和分数(名字和分数之间使用空格隔开):",(i+1));
sName[i] = (char*)malloc(20*sizeof(char));
scanf("%s %lf",&str,&score[i]);
tempScore[i]=score[i];
sum+=score[i];
strcpy(sName[i], str);
}
printf("\n");
avg=sum*1.0/(sizeof(score)/sizeof(score[0]));
printf("这%d个学生的平均成绩是:%.2lf分\n",(sizeof(score)/sizeof(score[0])),avg);
//问题2
printf("\n");
printf("低于平均分的学生有:\n");
for(i=0;i<sizeof(score)/sizeof(score[0]);i++){
if(score[i]<avg){
count++;
if(count%5==0&){
printf("\n");
}else{
printf("%s\t",sName[i]);
}
}
}
//问题3
count=0;
for(i=0;i<sizeof(tempScore)/sizeof(tempScore[0]);i++){
for(j=0;j<sizeof(tempScore)/sizeof(tempScore[0])-i-1;j++){
if(tempScore[j]<tempScore[j+1]){
temp=tempScore[j];
tempScore[j]=tempScore[j+1];
tempScore[j+1]=temp;
}
}
}
printf("\n");
printf("获得最高分的学生有:\n");
for(i=0;i<sizeof(score)/sizeof(score[0]);i++){
if(score[i]==tempScore[0]){
count++;
if(count%5==0){
printf("\n");
}else{
printf("%s\t",sName[i]);
}
}
}
}本回答被提问者和网友采纳