麻烦C语言高手解答下啊..50积分在线等答案啊..

用编程实现求全班50个学生成绩最高的学生学号和成绩

最好编的菜鸟一点啊.谢谢各位啦...

/*
一个完整的c程序如下,功能齐全。程序在win-tc和tc2.0下试验通过.程序实现从键盘输入50个学生的数据(包括学号、姓名、3门课的成绩),程序执行输出所有学生3门课的总平均成绩,最高分学生的学号、姓名、3门课的成绩、3门课平均成绩.
*/
# include <stdio.h>
# include <stdlib.h>
# include <conio.h>
# define N 50
struct student
{ char num[6];
char name[8];
int score[4];
float avr;
}stu[N];

main()
{
int i,j,max,maxi,sum;
float average;
/*以下为输入*/
for(i=0;i<N;i++)
{printf("\nInput scores of student %d:\n",i+1);
printf("NO.:");
scanf("%s",stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{printf("score %d:",j+1);
scanf("%d",&stu[i].score[j]);
}
}
/*以下为计算*/
average=0;
max=0;
maxi=0;
for(i=0;i<N;i++)
{ sum=0;
for(j=0;j<3;j++)
sum+=stu[i].score[j];
stu[i].avr=sum/3.0;
average+=stu[i].avr;
if(sum>max)
{max=sum;
maxi=i;
}
}
average/=N;

/*以下为打印*/
printf(" NO. name score1 score2 score3 average\n");
for(i=0;i<N;i++)
{ printf("%5s%10s",stu[i].num,stu[i].name);
for(j=0;j<3;j++)
printf("%9d",stu[i].score[j]);
printf("%8.2f\n",stu[i].avr);
}
printf("average=%6.2f\n",average);
printf("The highest score is : %s\tscore total: %d.",stu[maxi].name,max);
getch();
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-11-13
#include<stdio.h>

struct
{ int num;
int score;
};
main()
{ strcut p[50];
int i;
for(i=0;i<50;i++)
{ if (p[i]<p[i+1])
p[i]=p[i+1];}
printf(pi[i].num,pi[i].score)

}

在这个基础上加上你要输入50个数据就好了,剩下的要你自己做,别总这样要不总也不能提高,就像楼上说的那样!要是有什么不明白的可以在这问,大家都会尽量帮助你的,但是你这样无法提高自己编程思想
第2个回答  2008-11-13
#include <stdio.h>
#include <conio.h>

main()
{
int std[50],num;
int i;
clrscr();
for(i=0;i<50;i++) scanf("%d",std+i);
for(num=0,i=1;i<50;i++) if(num<std[i]) num=i;
printf("%d,%d",num+1,std[num]);
getch();
}
第3个回答  2008-11-13
不帮你编写了,给你点提示吧。
简单方法,不考虑空间和时间复杂度

1、创建一个学生结构体,包含学号和成绩两项
typedef struct STU
{
int num; //学号
float score; //成绩
}STU;

2、创建一个学生结构体的数组,存放学生信息。
STU student[50];

3、查找最高分的学生的学号呵成绩。
STU temp=student[0]; //假设第一个学生分数最高,其余学生和该学生比较。
for (int i=0;i<50;i++)
{
if (temp.score<student[i].score)
temp=student; //高于则替换temp为现最高分学生。
}

不足:当有多个学生分数相同时,只能取得其中一名学生作为最高分。

简单的改进:
当一次循环结束,找到最高分学生时,再做一次循环,将分数相等的找出来。
第4个回答  2008-11-13
采用结构体就可以了,将学号和学生成绩封装到结构体里面就可以了
第5个回答  2008-11-13
本程序经VC++ 6.0 调试通过,手工输入50组输据,先输入学号,后输入分数,中间用“,”隔开,输入完成后,即可输入分数最高的学生的学号和分数。

#include "stdio.h"

typedef struct STU
{
int num; //学号
int score; //成绩
}STU;
main()
{
STU p[50];
STU tmp;
int i;
for(i=0;i<50;i++)
{
printf("请输入第%d位学生的学号和成绩:",i+1);
scanf("%d,%d",&p[i].num,&p[i].score);
}
tmp.num=p[0].num;
tmp.score=p[0].score;
for(i=0;i<50;++i)
{ if (tmp.score<p[i].score)
{tmp=p[i];}

}
printf("成绩最高的学生的学号和成绩为:%d,%d\n",tmp.num,tmp.score);

}