#include<stdio.h>
#include<stdlib.h>
#define SIZE 100
typedef struct STUDENT
{
int id;
char number[20];
int score;
}
student[SIZE];
int cmp(const void aa,const void bb)
{
return(((struct STUDENT)aa).id-((struct STUDENT)bb).id);
}
int main()
{ student s;
int i,n;
scanf("%d",&n);
printf("学号 课程号 分数\n");
for(i=0;i<n;i++)
{
scanf("%d%s%d",&s[i].id,s[i].number,&s[i].score);
}
qsort(s,n,sizeof(s[0]),cmp);
printf("排序如下:\n");
for(i=0;i<n;i++)
{
printf("%d %s %d\n",s[i].id,s[i].number,s[i].score);
}
return 0;
}
缺少排列,运用计数器表现出现次数
#include <stdio.h>
#include <stdlib.h>
#define SIZE 100
typedef struct _Student
{
int id;
char number[20];
int score;
} Student;
int cmp(const void *a, const void *b)
{
return ((Student *)a)->id - ((Student *)b)->id;
}
int main()
{
Student s[SIZE];
int i, n;
scanf("%d", &n);
printf("学号 课程号 分数\n");
for (i = 0; i < n; i++)
scanf("%d%s%d", &s[i].id, s[i].number, &s[i].score);
qsort(s, n, sizeof(Student), cmp);
printf("排序如下:\n");
for (i = 0; i < n; i++)
printf("%d %s %d\n", s[i].id, s[i].number, s[i].score);
i = 0;
printf("平均成绩:\n");
while (i < n)
{
int sum = 0;
int j = i;
while (s[i].id == s[j].id)
{
sum += s[j].score;
j++;
}
printf("%d %.1f\n", s[i].id, (float)sum / (j - i));
i = j;
}
return 0;
}
$ gcc -Wall main.c
$ ./a.out
5
学号 课程号 分数
215301 1 90
215302 1 91
215301 2 89
215303 1 95
215302 2 98
排序如下:
215301 1 90
215301 2 89
215302 1 91
215302 2 98
215303 1 95
平均成绩:
215301 89.5
215302 94.5
215303 95.0
确定代码是实际代码吗?student从哪来的?
代码修改如下:
#include <stdio.h>
#include<stdio.h>
#include<stdlib.h>
#define SIZE 100
#define KCS 10
typedef struct STUDENT
{
int id;
char number[KCS][20]; //多门课程号
int score[KCS]; //多门课程成绩
float ave; //平均分
}student;
student stu[SIZE];
void sort(student stu[],int n)
{
student tmp;
int i,j;
for (i=0;i<n-1;i++)
{
for (j=0;j<n-1-i;j++)
{
if (stu[j].ave<stu[j+1].ave)
{
tmp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = tmp;
}
}
}
}
int main()
{
int i,j,n,kc;
printf("请输入学生人数:");
scanf("%d",&n);
printf("请输入课程数:");
scanf("%d",&kc);
for(i=0;i<n;i++)
{
printf("请输入学号\n");
scanf("%d",&stu[i].id);
stu[i].ave = 0;
for(j=0;j<kc;j++)
{
printf("请输入第%d门课的课程号 成绩:",j+1);
scanf("%s",stu[i].number[j]);
scanf("%d",&stu[i].score[j]);
stu[i].ave += stu[i].score[j];
}
stu[i].ave/= kc;
}
sort(stu,n);
printf("排序如下:\n");
for(i=0;i<n;i++)
{
printf("学号:%d ",stu[i].id);
for(j=0;j<kc;j++)
printf("课程号:%s,成绩:%d ",stu[i].number[j],stu[i].score[j]);
printf("平均分:%.2f\n",stu[i].ave);
}
return 0;
}
我先评价一下,大概错了至少5处。等我运行康康,回来再说