当前位置: 代码迷 >> C语言 >> [求助]用C语言实现一个排序插入删除的程序
  详细解决方案

[求助]用C语言实现一个排序插入删除的程序

热度:409   发布时间:2007-05-26 14:31:20.0
[求助]用C语言实现一个排序插入删除的程序

我作业是一个要输入学员 的学号,姓名,C语言成绩,JAVA成绩,并按成绩排序,并且可以插入一个学员的资料,而且是有序的,还能删除,删除后顺序不变。

麻烦高手帮下忙。下面是我一个没有编辑完的程序。少个删除和插入。
#include <stdio.h>
#include <string.h>
struct student
{
int no;
char name[20];
float cscore;
float jscore;
double avescore;
}stu[30];
double ave(struct student *);
double cscore(struct student *,int);
double jscore(struct student *,int);
int find(struct student *,int);
void main()
{
int i,count=0,num=0,xiabiao;
char a;
double cchengji,jchengji;
printf("请输入总人数:");
scanf("%d",&num);
if(num>0&&num<=30)
{
for(i=0;i<num;i++)
{
printf("\n学号:");
scanf("%d",&stu[i].no);
printf("\n姓名:");
fflush(stdin);
gets(stu[i].name);
printf("\nC成绩:");
scanf("%f",&stu[i].cscore);
printf("\nJ成绩:");
scanf("%f",&stu[i].jscore);
stu[i].avescore=ave(&stu[i]);
printf("您是否需要继续(y/n)");
scanf("%c",&a);
if (a=='n'||a=='N')
break;


}
}
for(i=0;i<num;i++)
{
printf("\n学号:%d\t姓名:%s\tC成绩:%f\tj成绩:%f\t平均成绩:%f\t",stu[i].no,stu[i].name,stu[i].cscore,stu[i].jscore,stu[i].avescore);
}
cchengji=cscore(stu,num);
jchengji=jscore(stu,num);
printf("c平均成绩为:%f",cchengji);
printf("java平均成绩:%f",jchengji);
xiabiao=find(stu,num);
printf("要查找的学生的详细信息为:\n");
printf("\n学号:%d\t姓名:%s\tC成绩:%f\tj成绩:%f\t平均成绩:%f\t",stu[xiabiao].no,stu[xiabiao].name,stu[xiabiao].cscore,stu[xiabiao].jscore,stu[xiabiao].avescore);

}
double ave(struct student *p)
{
return ((p->cscore)+(p->jscore))/2;


}

double cscore(struct student *p,int count)
{
int i;
double sum=0;
for(i=0;i<count;i++,p++)
{
sum+=p->cscore;
}
return sum/count;
}
double jscore(struct student *p,int count)
{
int i;
double sum=0;
for(i=0;i<count;i++,p++)
{
sum+=p->jscore;
}
return sum/count;
}
int find(struct student *p,int count)
{
char fname[20];
int i;
printf("\n请输入要查找的学生姓名:");
fflush(stdin);
gets(fname);
for(i=0;i<count;i++,p++)
{
if(strcmp(p->name,fname)==0)
break;
}
return i;
}

搜索更多相关的解决方案: C语言  删除  

----------------解决方案--------------------------------------------------------
好长哦,不会,帮顶
----------------解决方案--------------------------------------------------------

定义stu[31]为好,其它的不变。


----------------解决方案--------------------------------------------------------
我对删除发表一下我的看法。
假设我们根据学号删除某个学生的信息。
如果学号=stu[i].no就记下i的位置k=i。
然后输出的时候for(i=0;i<num&&i!=k;i++)
我想就可以了吧。
如果是指针建的系统就好办一些了。


----------------解决方案--------------------------------------------------------
以下是引用pinglideyu在2007-5-26 17:17:55的发言:
我对删除发表一下我的看法。
假设我们根据学号删除某个学生的信息。
如果学号=stu[i].no就记下i的位置k=i。
然后输出的时候for(i=0;i<num&&i!=k;i++)
我想就可以了吧。
如果是指针建的系统就好办一些了。

for(i=0;i<num&&i!=k;i++)
如果这样,那么i>k 的那些都输不出来了

你的意思应该是
for(i=0;i<num;i++)
{ if(i == k)
continue;
}


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