统计成绩
[问题描述]给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个算法:
(1) 按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次;
(2) 按名次列出每个学生的姓名与分数。
[基本要求]学生的考试成绩表必须通过键盘输入数据而建立,同时要对输出进行格式控制。
#include <stdio.h>
#define n 10
typedef struct
{char name[8];
int score;
}stu;
stu *R;
main()
{int num,i,j,max,temp;
stu *R;
printf("\n please input score:\n");
for(i=0;i<n;i++)
{printf("name:\n");
scanf("%s",&R[i].name);
scanf("%4d",&R[i].score);
}
num=num-1;
for(i=0;i<n;i++)
{max=i;
for(j=i+1;j<n;j++)
if(R[j].score>R[max].score)
max=j;
if(max!=i)
{temp=R[max].score;
R[max].score=R[i].score;
R[i].score=temp;
}
if((i>0)&&(R[i].score<R[i-1].score))
num=num+1;
printf("%4d%s%4d",num,R[i].name,R[i].score);
}
return 0;
}
这是我做的
他一直提示我输入姓名和成绩
----------------解决方案--------------------------------------------------------
统计成绩
[问题描述]给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个算法:
(1) 按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次;
(2) 按名次列出每个学生的姓名与分数。
[基本要求]学生的考试成绩表必须通过键盘输入数据而建立,同时要对输出进行格式控制。
#include <stdio.h>
#define n 10
typedef struct
{char name[8];
int score;
}stu;
stu *R;
main()
{int num,i,j,max,temp;
stu *R;
printf("\n please input score:\n");
for(i=0;i<n;i++)
{printf("name:\n");
scanf("%s",&R[i].name);
scanf("%4d",&R[i].score);
}
num=num-1; /*num没有进行初始化*/
for(i=0;i<n;i++)/*用冒泡法的话,不用这样子写,而且你没有考虑name也随着score的移动而移动*/
{max=i;
for(j=i+1;j<n;j++)
if(R[j].score>R[max].score)
max=j;
if(max!=i)
{temp=R[max].score;
R[max].score=R[i].score;
R[i].score=temp;
}
if((i>0)&&(R[i].score<R[i-1].score))
num=num+1;
printf("%4d%s%4d",num,R[i].name,R[i].score);
}
return 0;
}
这是我做的
他一直提示我输入姓名和成绩
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include<string.h>
#define N 10
typedef struct
{char name[8];
int score;
}stu;
/*stu *R;不要*/
main()
{int num=8,i,j,temp;
char tmp_name[8];
stu R[N];
printf("\n please input score:\n");
for(i=0;i<N;i++)
{printf("Name:");
scanf("%s",&R[i].name);
printf("Score:");
scanf("%4d",&R[i].score); /*输入就不用\n了*/
}
/*num=num-1不要*/
/**************************************************************/
for(i=0;i<N-1;i++)/*循环N-1次*/
for(j=i+1;j<N;j++)
if(R[j].score>R[i].score)/*由大到小冒泡排序*/
/* max=j;不要*/
/*if(max!=i)不要*/
{temp=R[i].score;
R[i].score=R[j].score;
R[j].score=temp;
/******************/
strcpy(tmp_name,R[i].name);
strcpy(R[i].name,R[j].name);
strcpy(R[j].name,tmp_name);
}
/*************************************************************/
/*if((i>0)&&(R[i].score<R[i-1].score))
num=num+1; */
for(i=0,j=1;i<10;i++)
{
if(i>0&&R[i-1].score!=R[i].score)/*从第二个学生开始,如果和前一个学生的成绩一样,则名次也一样*/
j++;
printf("No%2d:%s\t%4d\n",j,R[i].name,R[i].score);
}
getch();
return 0;
}
----------------解决方案--------------------------------------------------------
谢谢兄台
----------------解决方案--------------------------------------------------------