瑞星卡卡安全论坛技术交流区系统软件 有道题目不会做!请哥哥姐姐救我!

1   1  /  1  页   跳转

有道题目不会做!请哥哥姐姐救我!

有道题目不会做!请哥哥姐姐救我!

以下题目中是给给结构中的平均数排序.
好象是把平均存到数组里再排序吧?
可是接下来我真不知道怎么做了.请大家教我一下吧!


#include<stdio.h>
struct student
{
char name[20];
int number;
int a;
int b;
int c;
}stu[3];
void sort(int *a);
void main()
{
  int  j=0,k=0,num[3];
  char i;
  do
  {
  printf("请输入名字:\n");
  scanf("%s",&stu[j].name);
  printf("请输入序号:\n");
  scanf("%d",&stu[j].number);
  printf("请输入成绩:\n");
  scanf("%d",&stu[j].a);
  printf("请输入成绩:\n");
  scanf("%d",&stu[j].b);
  printf("请输入成绩:\n");
  scanf("%d",&stu[j].c);
  j++;
  printf("请选择是否继续:Y/N");
  fflush(stdin);
  scanf("%c",&i);
 
  }while(i=='Y'||i=='y');
  printf("排序前的详细内容为:\n");
 
      printf("学号    姓名  平均成绩\n");
 
 
    for(k=0;k<j;k++)
  {
  printf("\n%d\t%s\t%d\t",stu[k].number,stu[k].name,(stu[k].a+stu[k].b+stu[k].c)/3);
 
 
  }
    sort(&num[k]);
   
 
}
void (int *num[5])
{

}
最后编辑2007-03-30 11:37:56
分享到:
gototop
 

用起泡法直接排(stu[k].a+stu[k].b+stu[k].c)/3的顺序然后再依次输出可以么?
gototop
 

#include<stdio.h>
struct student
{
char name[20];
int number;
int a;
int b;
int c;
}stu[3];
void sort(int *a);
void main()
{
int j=0,k=0,num[3];
char i;
do
{
printf("请输入名字:\n");
scanf("%s",&stu[j].name);
printf("请输入序号:\n");
scanf("%d",&stu[j].number);
printf("请输入成绩:\n");
scanf("%d",&stu[j].a);
printf("请输入成绩:\n");
scanf("%d",&stu[j].b);
printf("请输入成绩:\n");
scanf("%d",&stu[j].c);
num[j]=(stu[j].a+stu[j].b+stu[j].c)/3;
j++;
printf("请选择是否继续:Y/N");
fflush(stdin);
scanf("%c",&i);

}while(i=='Y'||i=='y');
printf("排序前的详细内容为:\n");

printf("学号 姓名 平均成绩\n");


for(k=0;k<j;k++)
{
  printf("\n%d\t%s\t%d\t",stu[k].number,stu[k].name,num[k]);
}
sort(num);
}

void sort(int * num)
{
  int k=0,j=0;
  int tmp[3];
  for(k=0;k<=3;k++)
  {
    tmp[k]=num[0];
    for(j=0;j<=3;j++)
    {
      if(tmp[k]<num[j])//找出最大的
      {
        tmp[k]=num[j];
        num[j]=-100;//把目前最大的改为负数,下次循环就会找到第二大的
      }
    }
  }
//此时tmp已经是排好序的了,复制到num里去
  for(k=0;k<=3;k++)num[k]=tmp[k];
}
gototop
 

会了吗???能说说不?
gototop
 

2楼的排序函数实现不了吧,直接冒泡排就可以吧。
不过排完后还是找不到均值对应的名字。
应该可以再设个序号数组,排完传出来按序号输出
这样也许可以:
sort(float *average,int *order)
{
int i,j,count;
float temp;
for(i=0;i<StuNum;i++)
{
temp=average[0];
count=0;
for(j=0;j<StuNum;j++)
{
if(temp<average[j]){temp=average[j];count=j;}
}
order[count]=i+1;
average[count]=-temp;
}
for(j=0;j<StuNum;j++)
{
average[j]=-average[j];
}
}
然后order里放的就是名次了,输出的时候再按order输出名字和平均值。不过时间复杂度好像有点高了,应该还能改进。
gototop
 

#include<stdio.h>
struct student
{
char name[20];
int number;
int a;
int b;
int c;
}stu[3];    /*这里定义的结构体数组为4
void sort(int *a,int ll);
void main()
{
int j=0,k=0,num[3];
char i;
do
{
printf("请输入名字:\n");
scanf("%s",&stu[j].name);
printf("请输入序号:\n");
scanf("%d",&stu[j].number);
printf("请输入成绩:\n");
scanf("%d",&stu[j].a);
printf("请输入成绩:\n");
scanf("%d",&stu[j].b);
printf("请输入成绩:\n");
scanf("%d",&stu[j].c);
j++;
printf("请选择是否继续:Y/N");
fflush(stdin);
scanf("%c",&i);

}while((i=='Y'||i=='y') && j<=4);    、*这里的判断是否
printf("排序前的详细内容为:\n");

printf("学号 姓名 平均成绩\n");


for(k=0;k<j;k++)
{
printf("\n%d\t%s\t%d\t",stu[k].number,stu[k].name,(stu[k].a+stu[k].b+stu[k].c)/3);

num[k]=(stu[k].a+stu[k].b+stu[k].c))/3

}
sort(&num[k],j);


}
void sort(int num[],int ll)
{int i,j,t;
  for(i=ll;i>0;i--)
    for(j=0;j<i;j++)
        {
          if(num[j]<num[j+1])
              { t=num[j];
                num[j]=num[j+1];
                num[j+1]=t;
              }
        }
    for(i=0;i<ll;i++)
      {
        printf"从大到小的顺序为:\n");
        printf("%d ",num);
      }
  printf("\n");


     

}
gototop
 
1   1  /  1  页   跳转
页面顶部
Powered by Discuz!NT