PAT 1004 注意事项

问题:

PAT 1004 注意事项

思路:

      因为要同时处理姓名学号和成绩三种不同类型的变量,因此需要使用结构体。而排名的时候,应当用成绩进行比较。比较以后输出成绩最高的同学和成绩最低的同学即可完成本题目。

      进行排序的时候可以进行统一的排序,输出第一名和最后一名,也可以单独设置变量来记录最高成绩和最低成绩,而无需进行统一排序。

难点:

①学生的人数事先是未知的,因此无法直接定义结构体数组。

②字符串的输入

参考答案:

#include<stdio.h>
#include<string.h>
#include<malloc.h>
int main(){
typedef struct people{
char name[11];
char number[11];
int score;
}peo;
int n,i,j;
scanf("%d",&n);
        peo *a;//定义一个指针  
a=(peo*)malloc(sizeof(peo)*n);//申请一个空间用来保存结构体变量
for(i=0;i<n;i++){
scanf("%s",&a[i].name);
scanf("%s",&a[i].number);
scanf("%d",&a[i].score);
}
peo chenge;
for(i=0;i<n;i++){
for(j=i;j<n;j++){
if(a[i].score<a[j].score){
chenge=a[i];
a[i]=a[j];
a[j]=chenge;
}
}
}
n=n-1;
printf("%s %s\n",a[0].name,a[0].number);
printf("%s %s",a[n].name,a[n].number);
return 0;
}

    准备pat到1004的时候,pat oj一直出现编译错误的提示,但是在VC上编译是没有问题的,因此查找了很久自身的问题,现在写下来,以后再有同学碰到这样的问题就知道解决办法了。

PAT 1004 注意事项

           这段代码在VC上编译是可以通过的,但是在pat oj上则会显示编译错误。

PAT 1004 注意事项

显示是这样的,也就是说pat oj并不承认结构体people的存在。因此在pat oj中使用结构体,应该这样使用:

PAT 1004 注意事项

以这样的用法去写结构体,即可通过编译。

总结:以上只是个人的思路和做法,并非最好的解决方法,也许比较繁琐,故仅供参考。