原题链接:成绩排序
解题思路:
定义 一个结构体->构造一个动态数组->输入->排序->输出
注意事项:
1、比较字符串需要用到strcmp(str1,str2);
2、这个题的输入并不是一次,而是需要多组数据输入;
参考代码(自定义函数):
# include <stdio.h>
# include <malloc.h>
# include <string.h> //里面有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<N; i++)
scanf("%s %d %d", pArr[i].name, &pArr[i].age, &pArr[i].score);
//排序
sort(pArr, N);
//输出
for( i=0; i<N; 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<N; i++)
{
for (j=i+1; j<N; j++)
{
if (pArr[j].score < pArr[i].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 < pArr[i].age && strcmp(pArr[j].name, pArr[i].name)==0)
{
t = pArr[j];
pArr[j] = pArr[i];
pArr[i] = t;
}
}
}
}参考代码:
# include <stdio.h>
# include <string.h> //里面有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<N; i++)
{
scanf("%s %d %d", S[i].name, &S[i].age, &S[i].score);
}
//按成绩排序
for (i=0; i<N; i++)
{
for (j=i+1; j<N; j++)
{
if (S[j].score < S[i].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 < S[i].age && strcmp(S[j].name, S[i].name)==0)
{
t = S[j];
S[j] = S[i];
S[i] = t;
}
}
}
//输出
for(i=0; i<N; i++)
printf("%s %d %d\n", S[i].name, S[i].age, S[i].score);
}
return 0;
}我是一个小垃圾,这题我做了很久,错了很多次。
0.0分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
@kkk scanf("%s%d%d",node[i].name,&node[i].age,&node[i].num);字符串的用scanf输入不用取地址符if(node[i].na==node[j].na&&node[i].num==node[j].num&&node[i].age>node[j].age){ swap(&node[i],&node[j]); } } } for(int i=0;i<n;i++){ printf("%s %d %d\n",node[i].name,node[i].age,node[i].num); } } } }#include <stdio.h> struct date{ char name[101]; int age; int num; char na; }node[1001]; void swap(struct date *p,struct date *q){ struct date temp; temp=*p; *p=*q; *q=temp; } int main(){ int n; while(scanf("%d",&n)!=EOF){ if(n<=1000&&n>0){ for(int i=0;i<n;i++){ scanf("%s %d %d",&node[i].name,&node[i].age,&node[i].num); node[i].na=node[i].name[0]; } for(int i=0;i<n-1;i++){ for(int j=i+1;j<n;j++){ if(node[i].num>node[j].num){ swap(&node[i],&node[j]); } if(node[i].na>node[j].na&&node[i].num==node[j].num){ swap(&node[i],&node[j]); }