qq_24892809 2016-07-03 12:15 采纳率: 0%
浏览 1281

PAT上面的一道C题目成绩排序

读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

输入格式:每个测试输入包含1个测试用例,格式为

第1行:正整数n
第2行:第1个学生的姓名 学号 成绩
第3行:第2个学生的姓名 学号 成绩
... ... ...
第n+1行:第n个学生的姓名 学号 成绩
其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。
输出格式:对每个测试用例输出2行,第1行是成绩最高学生的姓名和学号,第2行是成绩最低学生的姓名和学号,字符串间有1空格。

输入样例:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
输出样例:
Mike CS991301
Joe Math990112

我写的程序如下,不知道为啥执行到return 0突然触发一个中断
#include
#include
#include
struct infor {
char name[11];
char XH[11];
int score;
};
int CMPSCORE(const void* d, const void* b)
{
struct infor *p1 = (struct infor *)d;
struct infor *p2 = (struct infor *)b;
if ((p1->score)>(p2->score))
return 1;
if ((p1->score)<(p2->score))
return -1;
else return 0;
}
int main()
{
int i,t=0,g;
struct infor *a;
scanf_s("%d", &i);
getchar();
a = (struct infor *)malloc(i * sizeof(struct infor *));
for (t = 0; t < i; t++)
{
for (g = 0; (g < 10); g++) {
scanf_s("%c", &(a[t].name[g]));
if (a[t].name[g] == ' ')
break;
}
a[t].name[g] = '\0';
for(g = 0; (g<10); g++){

        scanf_s("%c", &(a[t].XH[g]));
        if (a[t].XH[g] == ' ')
            break;
    }
    a[t].XH[g] = '\0';
    scanf_s("%d", &(a[t].score));
    getchar();
}
qsort(a, i, sizeof(struct infor), CMPSCORE);
for (g = 0; (g <=10); g++) {
    if (a[i-1].name[g] == '\0')
        break;
    printf("%c", (a[i-1].name[g]));
}
printf(" ");
for (g = 0; g<=10; g++) {
    if (a[i-1].XH[g] == '\0')
        break;
    printf("%c", (a[i-1].XH[g]));

}
printf("\n");
for (g = 0; g <= 10; g++) {
    if (a[0].name[g] == '\0')
        break;
    printf("%c", (a[0].name[g]));
}
printf(" ");
puts(a[0].XH);
return 0;

}

  • 写回答

1条回答

  • threenewbee 2016-07-03 15:51
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试