解题思路:
定义 一个结构体->构造一个动态数组->输入->排序->输出
注意事项:
1、比较字符串需要用到strcmp(str1,str2);
2、这个题的输入并不是一次,而是需要多组数据输入;
参考代码(自定义函数):# include
# include
# include //里面有strcmp(str1, str2);函数
//定义一个结构体类型
struct Student
{
char name[101];
int score;
int age;
};
void sort(struct Student * pArr, int N); //排序函数
int main()
{
int i;
int N;
struct Student * pArr;
while(scanf("%d", &N)!=EOF)
{
//分配内存
pArr = (struct Student *)malloc(sizeof(struct Student)*N);
//输入
for( i=0; i
scanf("%s %d %d", pArr[i].name, &pArr[i].age, &pArr[i].score);
//排序
sort(pArr, N);
//输出
for( i=0; i
printf("%s %d %d\n", pArr[i].name, pArr[i].age, pArr[i].score);
}
return 0;
}
//排序函数
void sort(struct Student * pArr, int N)
{
int i, j;
struct Student t;
//冒泡排序
for (i=0; i
{
for (j=i+1; j
{
if (pArr[j].score
{
t = pArr[j];
pArr[j] = pArr[i];
pArr[i] = t;
}
else if (pArr[j].score == pArr[i].score && strcmp(pArr[i].name, pArr[j].name)>0)
{
t = pArr[j];
pArr[j] = pArr[i];
pArr[i] = t;
}
else if (pArr[j].score == pArr[i].score && pArr[j].age
{
t = pArr[j];
pArr[j] = pArr[i];
pArr[i] = t;
}
}
}
}
参考代码:# include
# include //里面有strcmp(str1, str2);函数
struct Student
{
char name[101];
int score;
int age;
}S[2000], t; //s[2000]里面的数字大一点
int main()
{
int N;
int i, j;
while(scanf("%d", &N)!=EOF)
{
//输入
for(i=0; i
{
scanf("%s %d %d", S[i].name, &S[i].age, &S[i].score);
}
//按成绩排序
for (i=0; i
{
for (j=i+1; j
{
if (S[j].score
{
t = S[j];
S[j] = S[i];
S[i] = t;
}
else if (S[j].score == S[i].score && strcmp(S[i].name, S[j].name)>0)
{
t = S[j];
S[j] = S[i];
S[i] = t;
}
else if (S[j].score == S[i].score && S[j].age
{
t = S[j];
S[j] = S[i];
S[i] = t;
}
}
}
//输出
for(i=0; i
printf("%s %d %d\n", S[i].name, S[i].age, S[i].score);
}
return 0;
}
我是一个小垃圾,这题我做了很久,错了很多次。