69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LINEMAX 30
#define MAX 50
#define MAX_NAME 21//名字不超过20个字符
struct Student
{
char name[MAX_NAME];
int mark;
};
void AnalyzeString(struct Student *stu, char *str)
{
int i=0;//下标
for(i=0; str[i] != '\0'; i++)
{
//标记逗号
if(str[i] == ',')
{
str[i] = '\0';//方便字符串提取
break;
}
}
//提取姓名
strcpy(stu->name, str);
//提取成绩
stu->mark = atoi(&str[i+1]);
}
//用冒泡法排序
void Sort(struct Student stu[], int n)
{
int i,j;
struct Student tmp;
memset(&tmp, 0, sizeof(struct Student));
for(i = 0; i < n-1; i++)
{
for(j = n-1; j > i; j--)
{
if(stu[j].mark > stu[j-1].mark)
{
memcpy(&tmp, &stu[j], sizeof(struct Student));
memcpy(&stu[j], &stu[j-1], sizeof(struct Student));
memcpy(&stu[j-1], &tmp, sizeof(struct Student));
}
}
}
}
void main()
{
struct Student stu[MAX];//学生
char tmpLine[LINEMAX];//临时储存输入的一行
int n=0;//总人数
int i=0;//下标
memset(stu, 0, MAX * sizeof(struct Student));
memset(tmpLine, '\0', LINEMAX * sizeof(char));
scanf("%d", &n);
getchar();
for(i=0;i<n;i++)
{
gets(tmpLine);
AnalyzeString(&stu[i], tmpLine);
}
Sort(stu, n);
for(i=0; i<n; i++)
{
printf("%s,%d\n", stu[i].name, stu[i].mark);
}
}