当前位置: 代码迷 >> C语言 >> [求助]自己写了个程序有点小问题,就是在插入信息后排序有点不对(解决了)
  详细解决方案

[求助]自己写了个程序有点小问题,就是在插入信息后排序有点不对(解决了)

热度:212   发布时间:2006-08-12 15:58:29.0
[求助]自己写了个程序有点小问题,就是在插入信息后排序有点不对(解决了)

这个程序可以运行 但是就在插入新信息后排序的时候有点不对

#include <stdio.h>
#define N 50

struct student
{
int num;
char name[20];
int english;
int chinese;
int maths;
float ave;
};

void input(struct student st[],int i);
void output(struct student st[],int i);
void paixu(struct student st[],int n);
void sanchu(struct student st[],int i,int k);

void main()
{
struct student stu[N];
char ch;
int i=0, j;

//单个学员信息输入
printf("请输入学员信息:\n");
do
{
input(stu,i);
i++;
printf("是否继续输入(y/n)?");
fflush(stdin);
ch=getchar();
}while(ch=='y' || ch=='Y');
printf("\n");

//显示输入信息
printf("排序前学员成绩如下\n");
printf("学号\t姓名\t平均成绩\n");
output(stu,i);

//排序
printf("排序后学员信息如下\n");
printf("学号\t姓名\t平均成绩\n");
paixu(stu,i);
output(stu,i);

//插入新学员
ch='n';
do
{
if(ch=='y' || ch=='Y')
{
input(stu,i);
i++;
output(stu,i);//?????不加这个就不能顺利排序
printf("\n\n\n");
paixu(stu,i);
output(stu,i);
}
printf("是否插入新学员(y/n)?");
fflush(stdin);
scanf("%c",&ch);
}while(ch=='y' || ch=='Y');
}
void input(struct student st[],int i)
{
printf("学号:");
scanf("%d",&st[i].num);
printf("姓名:");
fflush(stdin);
gets(st[i].name);
printf("英语成绩:");
scanf("%d",&st[i].english);
printf("语文成绩:");
scanf("%d",&st[i].chinese);
printf("数学成绩:");
scanf("%d",&st[i].maths);
}
void output(struct student st[],int i)
{
int j;
for(j=0;j<i;j++)
{
st[j].ave=(st[j].maths+st[j].english+st[j].chinese)/3.0;
printf("%d\t%s\t%.2f\n",st[j].num,st[j].name,st[j].ave);
}

}
void paixu(struct student st[],int n)
{
struct student temp;
int i, j;

for(i=0;i<n;i++)
{
for(j=1;j<n;j++)
{
if(st[j-1].ave<st[j].ave)
{
temp=st[j];
st[j]=st[j-1];
st[j-1]=temp;
}
}
}
}
void sanchu(struct student st[],int i,int k)
{
int j;
for(j=0;j<i;j++)
{
if(st[j].num==k)
continue;
else
{
st[j].ave=(st[j].maths+st[j].english+st[j].chinese)/3.0;
printf("%d\t%s\t%.2f\n",st[j].num,st[j].name,st[j].ave);
}
}
}

[此贴子已经被作者于2006-8-12 20:49:06编辑过]


----------------解决方案--------------------------------------------------------
以下是引用zpeye在2006-8-12 15:58:29的发言:

这个程序可以运行 但是就在插入新信息后排序的时候有点不对

#include <stdio.h>
#define N 50

struct student
{
int num;
char name[20];
int english;
int chinese;
int maths;
float ave;
};

void input(struct student st[],int i);
void output(struct student st[],int i);
void paixu(struct student st[],int n);
void sanchu(struct student st[],int i,int k);

void main()
{
struct student stu[N];
char ch;
int i=0, j;

//单个学员信息输入
printf("请输入学员信息:\n");
do
{
input(stu,i);
i++;
printf("是否继续输入(y/n)?");
fflush(stdin);
ch=getchar();
}while(ch=='y' || ch=='Y');
printf("\n");

//显示输入信息
printf("排序前学员成绩如下\n");
printf("学号\t姓名\t平均成绩\n");
output(stu,i);

//排序
printf("排序后学员信息如下\n");
printf("学号\t姓名\t平均成绩\n");
paixu(stu,i);
output(stu,i);

//插入新学员
ch='n';
do
{
if(ch=='y' || ch=='Y')
{
input(stu,i);
i++;
output(stu,i);//?????不加这个就不能顺利排序
printf("\n\n\n");
paixu(stu,i);
output(stu,i);
}
printf("是否插入新学员(y/n)?");
fflush(stdin);
scanf("%c",&ch);
}while(ch=='y' || ch=='Y');
}
void input(struct student st[],int i)
{
printf("学号:");
scanf("%d",&st[i].num);
printf("姓名:");
fflush(stdin);
gets(st[i].name);
printf("英语成绩:");
scanf("%d",&st[i].english);
printf("语文成绩:");
scanf("%d",&st[i].chinese);
printf("数学成绩:");
scanf("%d",&st[i].maths);
}
void output(struct student st[],int i)
{
int j;
for(j=0;j<i;j++)
{
st[j].ave=(st[j].maths+st[j].english+st[j].chinese)/3.0;
printf("%d\t%s\t%.2f\n",st[j].num,st[j].name,st[j].ave);
}

}
void paixu(struct student st[],int n)
{
struct student temp;
int i, j;

for(i=0;i<n;i++)
{
for(j=1;j<n;j++)
{
if(st[j-1].ave<st[j].ave)
{
temp=st[j];
st[j]=st[j-1];
st[j-1]=temp;
}
}
}
}
void sanchu(struct student st[],int i,int k)
{
int j;
for(j=0;j<i;j++)
{
if(st[j].num==k)
continue;
else
{
st[j].ave=(st[j].maths+st[j].english+st[j].chinese)/3.0;
printf("%d\t%s\t%.2f\n",st[j].num,st[j].name,st[j].ave);
}
}
}

这个是当然的,因为你排序是按平均分排序的,而算平均分是在output()函数里面算的.
建议在input()函数里就把平均分算好.这样就不会出现这样的情况.

----------------解决方案--------------------------------------------------------

没有想到啊~~呵呵
谢谢楼上~
----------------解决方案--------------------------------------------------------

  相关解决方案