| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 511 人关注过本帖
标题:[求助]自己写了个程序有点小问题,就是在插入信息后排序有点不对(解决了)
只看楼主 加入收藏
zpeye
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-7-26
收藏
 问题点数:0 回复次数:2 
[求助]自己写了个程序有点小问题,就是在插入信息后排序有点不对(解决了)

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

#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编辑过]

搜索更多相关主题的帖子: english include 信息 
2006-08-12 15:58
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用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()函数里就把平均分算好.这样就不会出现这样的情况.


倚天照海花无数,流水高山心自知。
2006-08-12 19:38
zpeye
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-7-26
收藏
得分:0 

没有想到啊~~呵呵
谢谢楼上~

2006-08-12 20:44
快速回复:[求助]自己写了个程序有点小问题,就是在插入信息后排序有点不对(解决 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031308 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved