题目内容:
某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,每项奖学金获取的条件分别如下:
1) 院士奖学金:期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生每人均可获得8000元;
2) 五四奖学金:期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生每人均可获得4000元;
3) 成绩优秀奖:期末平均成绩高于90分(>90)的学生每人均可获得2000元;
4) 西部奖学金:期末平均成绩高于85分(>85)的西部省份学生每人均可获得1000元;
5) 班级贡献奖:班级评议成绩高于80分(>80)的学生干部每人均可获得850元;
只要符合上述条件就可获得相应的奖项,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚明的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。
现在给出若干学生的相关数据(假设总有同学能满足获得奖学金的条件),请编程计算哪些同学获得的奖金总数最高。
————————————————
/*采用结构体数组的方法*/
#include<stdio.h>
struct students {
char name[20];
int finalscore;
int classscore;
char work;
char west;
int paper;
int scholarship;
} a;
int main(){
int i,num,j,k;
struct students a[10];/*结构体数组*/
printf("Input the num: ");
scanf("%d",&num);
for(i=0;i<num;i++){
printf("Input the name,finalscore,classscore,paper: ");
scanf("%s%d%d%d",&a[i].name,&a[i].finalscore,&a[i].classscore,&a[i].paper);
printf("Class cadre or not?(Y/N): ");
scanf("%s",&a[i].work); /*用c为一个字符,回车的时候会跳过过程,选用s*/
printf("west or not?(Y/N): ");
scanf("%s",&a[i].west);
a[i].scholarship=0;/*赋初值为0*/
if((a[i].finalscore>80)&&(a[i].paper>0)){
a[i].scholarship+=8000;
}
if((a[i].finalscore>85)&&(a[i].classscore>80)){
a[i].scholarship+=4000;
}
if((a[i].finalscore>90)){a[i].scholarship+=2000;}
if((a[i].finalscore>85)&&(a[i].west=='Y')){a[i].scholarship+=1000;}
if((a[i].work=='Y')&&(a[i].classscore>80)){a[i].scholarship+=850;}
printf("name:%s,scholarship:%d\n",a[i].name,a[i].scholarship);
}
/*比较拿奖学金最多的人是多少方法 要 记住*/
j=a[0].scholarship;/*先把第一项数据存放*/
k=0;
for(i=1;i<num;i++){
if(j<a[i].scholarship)
{
j=a[i].scholarship;
k=i;
/*将最大项存放在这*/
}
}
printf("%s get the highest scholarship %d \n",a[k].name,j);
return 0;
}