[PAT Basic Level]1004

题目分析

水题,按题目要求按部就班编写代码。为避免浪费空间,根据输入情况动态分配内存即可。另外注意姓名、学号不超过10字符但用char数组的话还是要开11个元素的空间,确保最后能插入’\0’。

源代码

#include <stdio.h>

int main()
{
    int stuNumber;
    scanf("%d",&stuNumber);
  
    int minScore=101,maxScore=-1;   //效成绩为0至100,确保会修改到学生实际成绩
    int minOrder,maxOrder;  //记录最高、最低成绩对应学生序号
    char **name=new char* [stuNumber];
    char **id=new char* [stuNumber];
    int *grades=new int [stuNumber];
    for(int i=0;i<stuNumber;++i){
        name[i]=new char[11];   //每个学生姓名至多10字符,外加一个\0
        id[i]=new char[11];
    }

    for(int i=0;i<stuNumber;++i){
        getchar();   //读取上一行的换行符
        int j=0;
        while((name[i][j++]=getchar())!=' ')
        ;
        name[i][j-1]='\0';
        j=0;  //重置为0
        while((id[i][j++]=getchar())!=' ')
        ;
        id[i][j-1]='\0';
        scanf("%d",&grades[i]);
        if(maxScore<grades[i]){   //记录成绩最高者
            maxScore=grades[i];
            maxOrder=i;
        }
        if(minScore>grades[i]){   //记录成绩最低者
            minScore=grades[i];
            minOrder=i;
        }
    }
    printf("%s %s\n",name[maxOrder],id[maxOrder]);
    printf("%s %s",name[minOrder],id[minOrder]);
    for(int i=0;i<stuNumber;++i){
        delete []name[i];
        delete []id[i];
    }
    delete []name;
    delete []id;
    delete []grades;
    return 0;

}
发布了11 篇原创文章 · 获赞 1 · 访问量 75

猜你喜欢

转载自blog.csdn.net/weixin_44452361/article/details/104602563
今日推荐