当前位置: 代码迷 >> C语言 >> 这个题目做完后总觉得是个死循环谁能帮把我带出来啊
  详细解决方案

这个题目做完后总觉得是个死循环谁能帮把我带出来啊

热度:320   发布时间:2006-12-07 15:14:55.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;
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;
}
这是我做的
他一直提示我输入姓名和成绩

搜索更多相关的解决方案: please  统计  

----------------解决方案--------------------------------------------------------
以下是引用olifuu在2006-12-7 15:14:55的发言:

统计成绩
[问题描述]给出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;
}

依你的思路给你做了一点修改``````
----------------解决方案--------------------------------------------------------

谢谢兄台


----------------解决方案--------------------------------------------------------
  相关解决方案