读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。
输出格式:对每个测试用例输出2行,第1行是成绩最高学生的姓名和学号,第2行是成绩最低学生的姓名和学号,字符串间有1空格。
输入样例:
3 Joe Math990112 89 Mike CS991301 100 Mary EE990830 95
输出样例:Mike CS991301 Joe Math990112实现思路: 首先定义结构体对学生信息进行封装,其次进行添加信息,定义了两个函数,一个用来寻找最大值,一个用来寻找最小的。
struct student { char name[10]; char snum[10]; int score; }; int get_max(struct student *s,int n) { int max_score = 0; int index = 0; for (int i = 0;i<n;i++) { if (s[i].score > max_score) { max_score = s[i].score; index = i; } } return index; } int get_min(struct student *s,int n) { int min_score = s[0].score; int index = 0; for (int i = 1;i<n;i++) { if (s[i].score < min_score) { min_score = s[i].score; index = i; } } return index; } void show_info(struct student *s,int n) { printf("%s %s %d\n",s[n].name,s[n].snum,s[n].score); } int main() { int n = 0; scanf("%d",&n); struct student s1[100]; for (int i= 0;i<n;i++) { scanf("%s %s %d",&s1[i].name,&s1[i].snum,&s1[i].score); } int i1 = get_max(s1,n); int i2 = get_min(s1,n); show_info(s1,i1); show_info(s1,i2); return 0; }
可能有点繁琐。
又重新实现了一下:
int main() { int n;cin>>n; student* s=new student[n]; for(int i=0;i<n;i++) cin>>s[i].name>>s[i].number>>s[i].score; int min,max; min=max=0; for(int i=0;i<n;i++) { if(s[i].score<s[min].score) min=i; if(s[i].score>s[max].score) max=i; } cout<<s[max].name<<" "<<s[max].number<<endl; cout<<s[min].name<<" "<<s[min].number<<endl; return 0; }