c语言分数统计

(1)输入某班级学生的姓名,分数
(2)对(1)的分数进行排序,按分数从大到小输出

方法一(使用结构体做法)
#include<stdio.h>
#include<string.h>
typedef struct namescore//定义结构体,包括姓名和分数
{
char name[10];
float score;
}NS;
main()
{
NS s[100];//定义结构体数组变量 ,可以存放100个学生的姓名和分数
NS temp;
int i=0,j=0;
int n=-1;
printf("请输入姓名和分数:(输入exit结束)");
while(1)//设置死循环
{
n++;
printf("\n请输入姓名:");
scanf("%s",s[n].name);//赋值姓名
if(!strcmp("exit",s[n].name))//当输入exit时退出循环
{//strcmp包含在string.h头文件中,判断两个字符串是否相等
n--;break;//因为输入"exit"会保存到结构体中,所以要n--
}
printf("\n请输入分数:");
scanf("%f",&s[n].score);//输入分数
}

for(i=0;i<n;i++)//用冒泡法排序
for(j=i+1;j<=n;j++)
{
if(s[i].score<s[j].score)//如果下一个数比前一个数大,则交换
{
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
printf("成绩从大到小的排序:\n");
printf("---姓名---------分数---------\n");//输出姓名和分数
for(i=0;i<=n;i++)
{
printf("%6s",s[i].name);
printf(" %5.1f\n",s[i].score);
}
}

//方法二(如果不会结构体的另一种方法)
#include<stdio.h>
#include<string.h>
#define N 100
main()
{
char name[N][10];//定义二维数组
char tempname[10];
float score[N];
float tempscore;
int i=0,j=0,n=0;
printf("请输入姓名和分数:(输入exit结束)");
while(1)
{
printf("\n请输入姓名:");
scanf("%s",name[n]);
if(!strcmp("exit",name[n]))
{
break;
}
printf("\n请输入分数:");
scanf("%f",&score[n]);
n++;
if(n>100)//当将要溢出时,就退出循环
break;
}
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{
if(score[i]<score[j])//分数与姓名交换
{
tempscore=score[i];
score[i]=score[j];
score[j]=tempscore;
strcpy(tempname,name[i]);//strcpy在string.h头文件中
strcpy(name[i],name[j]);//将name[j]的值复制到name[i]中
strcpy(name[j],tempname);
}
}

printf("成绩从大到小的排序:\n");
printf("---姓名---------分数---------\n");//输出姓名和分数
for(i=0;i<n;i++)
{
printf("%6s",name[i]);
printf(" %5.1f\n",score[i]);
}
getch();
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-25
#include<stdio.h>
#include<string.h>
#include<math.h>
typedef struct student
{
int score;
char name[20];
}student;
void swap(student * s1,student * s2)
{
char nametemp[20];
strcpy(nametemp,s1->name);
strcpy(s1->name,s2->name);
strcpy(s2->name,nametemp);
int temp;
temp=s1->score;
s1->score=s2->score;
s2->score=temp;
}
void sort(student stu[],int n)
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n-1;j++)
{
if(stu[j].score<stu[j+1].score)
{
swap(&stu[j],&stu[j+1]);
}
else if(stu[j].score==stu[j+1].score)
{
if(strcmp(stu[j].name,stu[j+1].name)>0)
{
swap(&stu[j],&stu[j+1]);
}
}
}
}
void input(student * s)
{
char string[30];
gets(string);
int n,i,j;
n=strlen(string);
for(i=0;i<n;i++)
{
if(string[i]==','){s->name[i]='\0';break;}
s->name[i]=string[i];
}
s->score=0;
int temp;
j=n-(i+1)-1;
for(i++;i<n;i++,j--)
{
temp=(int)string[i]-48;
s->score= s->score+ temp *(int)pow(10.0,j);
}
}
void main()
{
int n,i;
student stu[20];
scanf("%d\n",&n);
for(i=0;i<n;i++)
{
input(&stu[i]);
}
sort(stu,n);
for(i=0;i<n;i++)
{
printf("%s,%d\n",stu[i].name,stu[i].score);
}

}
相似回答