题目分析
水题,按题目要求按部就班编写代码。为避免浪费空间,根据输入情况动态分配内存即可。另外注意姓名、学号不超过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;
}