谁拿了最多奖学金
题目
题目要求
1.只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。
2.每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。
姓名是由大小写英文字母组成的长度不超过 20 的字符串(不含空格);期末平均成绩和班级评议成绩都是 0 到 100 之间的整数(包括 0 和 100 );是否是学生干部和是否是西部省份学生分别用一个字符表示,Y
表示是,N
表示不是;发表的论文数是 0 到 10 的整数(包括 0 和 10 )。每两个相邻数据项之间用一个空格分隔。
3.求
(1)获得最多奖金的学生的姓名。
(2)这名学生获得的奖金总数。如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。
(3)这 N 个学生获得的奖学金的总数。
思路分析
1.由于一名学生所需要的信息过多,我们可以创建一个结构体将学生的信息包含在里面。
2.利用for循环输入每一位学生的信息,用if判断是否符合奖学金条件
3.使用for和if共同判定出奖学金最多的学生,按照输入顺序可以筛选出输入靠前的学生。
4.再通过for进行统计一共发放多少奖学金
代码
#include<stdio.h> #include<stdlib.h> struct stu { char name[20]; int qimo; int banji; char ganbu; char xibu; int num; } student[99]; int main() { int n; int i; int sum[99]={0}; int max,maxlocation=0; int s=0; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%s %d %d %c %c %d",&student[i].name,&student[i].qimo,&student[i].banji,&student[i].ganbu,&student[i].xibu,&student[i].num); if(student[i].qimo>80&&student[i].num>=1) { sum[i]+=8000; } if(student[i].qimo>85&&student[i].banji>80) { sum[i]+=4000; } if(student[i].qimo>90) { sum[i]+=2000; } if(student[i].qimo>85&&student[i].xibu=='Y') { sum[i]+=1000; } if(student[i].banji>80&&student[i].ganbu=='Y') { sum[i]+=850; } } max=sum[0]; for(i=1;i<n;i++) { if(sum[i]>max) { max=sum[i]; maxlocation=i; } } for(i=0;i<n;i++) { s+=sum[i]; } printf("%s\n%d\n%d\n",student[maxlocation].name,max,s); return 0; }
运行结果
标签:&&,int,sum,C语言,蓝桥,学生,student,例题,奖学金 From: https://www.cnblogs.com/hcrzhi/p/17375245.html