***## PAT乙级1004成绩排名第一次完成记录***
-
题目:
读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。 -
思路:
首先建立学生变量类型的结构体,然后排个序,打印出第一位和最后一位的学生名字和成绩即可。每次输入一名学生的信息后,创建一个变量n来计数,最后用这个n来索引成绩最低的同学的信息。 -
写代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
typedef struct stu
{
char name[11];
char stu_num[11];
int score;
}stu;
void bubble(stu* s, int n);
int main()
{
int n = 0;//用来索引成绩最低的学生的信息
int num_in = 0;//要输入的学生信息数量
scanf("%d", &num_in);
stu* s = (stu*)malloc(sizeof(stu) * num_in);
if (s == NULL)
printf("%s", strerror(errno));
else
{
for (int i = 0; i < num_in; i++)
{
scanf("%s%s%d", &(s[i].name), &(s[i].stu_num), &(s[i].score));
n++;
}
}
bubble(s, n);
printf("%s %s\n", s[0].name, s[0].stu_num);
printf("%s %s", s[n-1].name, s[n-1].stu_num);
}
void bubble(stu* s, int sz)//冒泡排序学生的成绩
{
int i, j;
for (i = 0; i < sz - 1; i++)
{
for (j = 0; j < sz - 1 - i; j++)
if (s[j].score < s[j + 1].score)
{
stu tmp = s[j];
s[j] = s[j + 1];
s[j + 1] = tmp;
}
}
}