| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 918 人关注过本帖
标题:[求助]这两个地方怎么写啊?写晕了~~
只看楼主 加入收藏
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 

对结构体一级排序
struct In
{
double data;
int other;
}s[100]
//按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种,参考上面的例子写
int cmp( const void *a ,const void *b) //这里面传进去的是什么?
{
return (*(struct In *)a)->data > (*(struct In *)b)->data ? 1 : -1;
//这里比较的是什么?是结构体里面的data 吗?可是我那个平均值没有在结构体里面,怎么办?
//那就在结构体内多加个成员吧,这很简单的,不是吗?
}
qsort(s,100,sizeof(s[0]),cmp); //这里面有4个参数?
qsort函数包含在<stdlib.h>的头文件里


*qsort 函数說明 ->>需要 #include<stdlib.h>
函数原型:void qsort(void* base, size_t n, size_t size, int (*cmp)(const void*, const void*)):阵列基础的快速排序法函数,陣列是参数 base,n 是陣列大小,size 是每個元素的大小,最后的参数是指向函数的指针,这是比较元素大小的函数( 即上面 cmp() 函数)。




汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-09-14 20:56
ww84020209
Rank: 1
等 级:新手上路
帖 子:190
专家分:0
注 册:2006-8-21
收藏
得分:0 

随便改了改:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 50

int n=0;
//声明学员结构
struct Student
{
char xuehao[10];
char name[10];
float score[4];
}stu[M];

int show_menu()
{
int i;
printf("---------Fuctions and Menu choices---------\n");
printf(" (1)Insert \n");
printf(" (2)Delete \n");
printf(" (3)Display \n");
printf(" (4)clrscr \n");
printf(" (5)Quit \n");
printf("enter you choice(1--5):");
scanf("%d",&i);
while(!(i>=1&&i<=5))
{
printf("Error!\n");
printf("Please enter you choice again:");
scanf("%d",&i);
}
return i;
}

void Insert(void)
{
int i,j;
struct Student s;
if(n>=49)
{
printf("数据以满\n");
exit(0);
}
printf("学号:");
scanf("%s",&s.xuehao);
printf("姓名:");
scanf("%s",s.name);
printf("三门成绩:\n");
printf("成绩1: ");
scanf("%f",&s.score[0]);
printf("成绩2: ");
scanf("%f",&s.score[1]);
printf("成绩3: ");
scanf("%f",&s.score[2]);
s.score[3]=(s.score[0]+s.score[1]+s.score[2])/3;
for(i=0;i<n;i++)
if(s.score[3]>stu[i].score[3])
break;
for(j=n;j>=i;j--)
stu[j+1]=stu[j];
stu[i]=s;
n++;
}

//显示学员信息
void Display(void)
{
int i;
printf("\t学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
for(i=0;i<n;i++)
{
printf("\t%s\t",stu[i].xuehao);
printf("%s\t",stu[i].name);
printf("%-6.2f\t%-6.2f\t%-6.2f\t",stu[i].score[0],stu[i].score[1],stu[i].score[2]);
printf("%-6.2f\t\n",stu[i].score[3]);
}
}
void Delete(void)
{
char str[10];
int i,j;
if(n==0)
{
printf("现在还没有任何学生信息\n");
exit(0);
}
fflush(stdin);
printf("输入要删除的学生的学号:");
gets(str);
for(i=0;i<n;i++)
if(strcmp(stu[i].xuehao,str)==0)
break;
if(i==n)
printf("没有该学生\n");
else
{
for(j=i;j<n;j++)
stu[j]=stu[j+1];
n--;
}
}


int main()
{
int choice;
while(1)
{
choice=show_menu();
switch(choice)
{
case 1:Insert();break;
case 2:Delete();break;
case 3:Display();break;
case 4:system ("cls");break;
}
if(choice==5)
break;
}
}


[此贴子已经被作者于2006-9-14 22:10:06编辑过]


2006-09-14 22:09
北国风光
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-9-14
收藏
得分:0 

谢谢楼上,不过没有按你的方法做啊,自己改了一下,有个插入写不出来了,排序好了
#include"stdio.h"
#include"string.h"
#define N 50
//声明学员结构
struct Student
{
int flag;
char xuehao[10];
char name[10];
float score[3];
float avg[N];
}stu[N];
void paixu(Student stu[]);
//添加学员信息
Student Add()
{
Student stu;
stu.flag=1;
printf("学号:");
scanf("%s",stu.xuehao);
printf("姓名:");
scanf("%s",stu.name);
printf("三门成绩:\n");
printf("成绩1: ");
scanf("%f",&stu.score[0]);
printf("成绩2: ");
scanf("%f",&stu.score[1]);
printf("成绩3: ");
scanf("%f",&stu.score[2]);
return stu;
}
//计算平均成绩
float pingjun(Student stu)
{
stu.avg[50]=(stu.score[0]+stu.score[1]+stu.score[2])/3;
return stu.avg[N];
}
//显示学员信息
void display(Student stu[N])
{
printf("flag\t学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
for(int i=0;i<50;i++)
{
if(stu[i].flag==0)continue;
printf("%d\t",stu[i].flag);
printf("%s\t",stu[i].xuehao);
printf("%s\t",stu[i].name);
printf("%-6.2f\t%-6.2f\t%-6.2f\t",stu[i].score[0],stu[i].score[1],stu[i].score[2]);
printf("%-6.2f\t\n",pingjun(stu[i]));
}
}

//删除某学员
void Delete(Student *stu)
{
stu->flag=0;
}
//排序学员组
void paixu(Student stu[],int *count)
{

Student temp[N]={0};
for(int i=0;i<*count;i++)
{
for(int j=0;j<*count-i-1;j++)
{
if(pingjun(stu[j])<pingjun(stu[j+1]))
temp[j]=stu[j+1];
stu[j+1]=stu[j];
stu[j]=temp[j];
}
}
}
//插入学员

void insert()
{


}


void main()
{

int count=0;
int i=0;
printf("请输入学员信息:");
char c;
c='y';
do{
c=' ';
stu[i++]=Add();
printf("还要继续输入吗?<y or n>");
fflush(stdin);
c=getchar();
count++;
}while(c=='y'||c=='Y');
printf("排序前的学员成绩如下:\n");
display(stu);
printf("排序后的学员成绩如下:\n");
paixu(stu,&count);
display(stu);

do{
c=' ';
printf("是否要插入新学员?<y or n>");
fflush(stdin);
if(c=getchar())
printf("请输入要插入的学员的信息:");
stu[i++]=Add();

}while(c=='y'||c=='Y');

// printf("插入新学员后学员的信息如下:\n");
// insert();


do{
c=' ';
printf("是否要删除某学员?<y or n>");
fflush(stdin);
c=getchar();
count++;
}while(c=='y'||c=='Y');

// printf("删除后学员的信息如下:");
// Delete(stu);
}

2006-09-14 22:57
北国风光
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-9-14
收藏
得分:0 
偶的马甲,·还有个插入函数了,帮忙看看啊~~主要是传值的时候不知道怎么传了
2006-09-14 23:12
honkerman
Rank: 2
等 级:新手上路
威 望:4
帖 子:3078
专家分:0
注 册:2006-8-25
收藏
得分:0 
偶的马甲,·还有个插入函数了,帮忙看看啊~~主要是传值的时候不知道怎么传了

" target="_blank">God Bless You[GLOW=255,#00ff00,2]My Friends![/GLOW]
2006-09-14 23:34
冰山一角
Rank: 1
等 级:新手上路
帖 子:385
专家分:0
注 册:2006-9-5
收藏
得分:0 

做程序员太乏味?来这里www..cn试试吧,你肯定能找到乐趣!
2006-09-15 14:48
honkerman
Rank: 2
等 级:新手上路
威 望:4
帖 子:3078
专家分:0
注 册:2006-8-25
收藏
得分:0 

你在灌水丫~~~


" target="_blank">God Bless You[GLOW=255,#00ff00,2]My Friends![/GLOW]
2006-09-15 14:51
wwjazz
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-8-24
收藏
得分:0 
这类的题用链表做就方便了

2006-09-17 00:22
快速回复:[求助]这两个地方怎么写啊?写晕了~~
数据加载中...
 
   



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

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