| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1858 人关注过本帖
标题:[求助]谁能给我看看这希尔排序的函数那里错了吗?谢谢
只看楼主 加入收藏
chenhuips2
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-3-17
收藏
 问题点数:0 回复次数:11 
[求助]谁能给我看看这希尔排序的函数那里错了吗?谢谢

#include<stdio.h>
#include<string.h>
typedef struct
{ long num;
char name[12];
int score[2];
int total;
}stu;
stu student[100];

void xepx(int N)
{
int i,j,d;stu t;
printf ("1");
d=N/2;
while(d>=1);
{ for (i=d+1;i<=N;i++)
{ t=student[i];
j=i-d;
while (j>0&&strcmp(student[j].name,student[i].name)>0)
{
student[j+d]=student[j];
j=j-d;
}
student[j+d]=t;
}
d=d/2;
}
}

void main()
{
int N=0,H=0;
stu *p;
printf ("请输入本班人数:\n");
scanf ("%d",&N);
printf ("学号 姓名 高数 英语:\n");
for (p=student;p<student+N;p++)
{
scanf ("%ld%s%d%d",&p->num,p->name,&p->score[0],&p->score[1]);
printf ("总分:\n");
p->total=p->score[0]+p->score[1];
printf (" %d\n",p->total);
}
for (p=student;;)
{
printf ("请选择您要进行的操作:\n1:按姓名字母顺序排列。\n2:。。。。\n3:。。。。\n4:退出\n");
scanf ("%d",&H);
switch(H)
{
case 1:xepx(N);break;
case 2:break;
default: exit(0);
}
printf ("学号 姓名 高数 英语 总分:\n");
for (p=student;p<student+N;p++)
printf ("%-6ld%-10s%-6d%-6d%-6d\n",p->num,p->name,p->score[0],p->score[1],p->total);
}
}

搜索更多相关主题的帖子: 希尔 函数 
2006-03-27 11:53
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
自己对照下,我也没运行,大概看了下
[CODE]
void xepx(int N)
{
int i,j,d;stu t;
printf ("1");
d=N/2;
while(d>=1);
{
for (i=d;i<N;i++)
{
t=student[i];
j=i-d;
while (j>0&&strcmp(student[j].name,student[i].name)>0)
{
student[j+d]=student[j];
j=j-d;
}
student[j+d]=t;
}
d=d/2;
}
}


[/CODE]

叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-03-27 12:27
chenhuips2
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-3-17
收藏
得分:0 

我运行了下还是到printf("1")就停了下来
就是不知道那错了


2006-03-27 14:25
chenhuips2
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-3-17
收藏
得分:0 

知道错那了^_^
while(d>=1);多了个分号


2006-03-27 15:58
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-03-27 15:59
crazyrabbit
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:150
专家分:0
注 册:2006-3-15
收藏
得分:0 
这根本就没有按字母顺序进行排序呀,

http://www./bbs/boke.asp?crazyrabbit.index.html 欢迎大家来此讨论问题!
2006-03-27 18:18
chenhuips2
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-3-17
收藏
得分:0 

这是修改好了的
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct
{ long num;
char name[12];
int score[2];
int total;
}stu;
stu student[100];

void xzpx(stu*p,int N)
{
int i,j;
stu t;
for (i=0;i<N;i++)
{
for (j=i+1;j<N;j++)
if ((p+i)->total<(p+j)->total)
{ t=student[i];student[i]=student[j];student[j]=t;}
}
}

void xepx(int N)
{
int i,j,d;stu t;
d=N/2;
while(d>=1)
{ for (i=d;i<N;i++)
{ t=student[i];
j=i-d;
while (j>=0&&strcmp(student[j].name,student[i].name)>0)
{
student[j+d]=student[j];
j=j-d;
}
student[j+d]=t;
}
d=d/2;
}
}

void main()
{
int N=0,H=0;
stu *p;
printf ("请输入本班人数:\n");
scanf ("%d",&N);
printf ("学号 姓名 高数 英语:\n");
for (p=student;p<student+N;p++)
{
scanf ("%ld%s%d%d",&p->num,p->name,&p->score[0],&p->score[1]);
printf ("总分:\n");
p->total=p->score[0]+p->score[1];
printf (" %d\n",p->total);
}
for (;;)
{
printf ("请选择您要进行的操作:\n1:按总分高低排名。\n2:按姓名字母顺序排列。\n3:按学号排列\n4:退出\n");
p=student;
scanf ("%d",&H);
switch(H)
{
case 1:xzpx(p,N);break;
case 2:xepx(N);break;
default:exit(0);
}
printf ("学号 姓名 高数 英语 总分:\n");
for (p=student;p<student+N;p++)
printf ("%-6ld%-10s%-6d%-6d%-6d\n",p->num,p->name,p->score[0],p->score[1],p->total);
}
}


2006-03-27 22:28
chenhuips2
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-3-17
收藏
得分:0 
啊啊
气死啦有时字母排序是对的有时就不对……

[此贴子已经被作者于2006-3-27 22:55:53编辑过]


2006-03-27 22:36
你的嘴角
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-1-14
收藏
得分:0 
好诡异啊~~
2008-01-14 16:00
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct
{ long num;
char name[12];
int score[2];
int total;
}stu;
stu student[100];
void xuehao(stu *p,int N)
{   int i,i1,j,j1;
    stu a;
    for(i=0;i<N;i++)
    {   a=p[i];
        for(j=i+1;j<N;j++)
        {
            if(p[j].num<a.num)
                a=p[j];
                j1=j;
        }
        for(i1=j1;i1>i;i1--)
        {
            p[j1]=p[j1-1];
        }
       p[i]=a;
    }
}

void xzpx(stu*p,int N)
{
int i,j;
stu t;
for (i=0;i<N;i++)
{
for (j=i+1;j<N;j++)
if ((p+i)->total<(p+j)->total)
{ t=student[i];student[i]=student[j];student[j]=t;}
}
}

void xepx(int N)
{
int i,j,d;stu t;
d=(N+1)/2;
while(d>=1)
{
    for (i=d;i<N;i++)
    {
        t=student[i];
        j=i-d;
       while (j>=0&&strcmp(student[j].name,student[i].name)>0)
       {
         student[j+d]=student[j];
           j=j-d;
       }
          student[j+d]=t;
    }
d=d/2;
}
}

void main()
{
int N=0,H=0;
stu *p;
printf ("请输入本班人数:\n");
scanf ("%d",&N);
printf ("学号 姓名 高数 英语:\n");
for (p=student;p<student+N;p++)
{
scanf ("%ld%s%d%d",&p->num,p->name,&p->score[0],&p->score[1]);
printf ("总分:\n");
p->total=p->score[0]+p->score[1];
printf (" %d\n",p->total);
}
for (;;)
{
printf ("请选择您要进行的操作:\n1:按总分高低排名。\n2:按姓名字母顺序排列。\n3:按学号排列\n4:退出\n");
p=student;
scanf ("%d",&H);
switch(H)
{
case 1:xzpx(p,N);break;
case 2:xepx(N);break;
case 3:xuehao(p,N);break;
default:exit(0);
}
printf ("学号 姓名 高数 英语 总分:\n");
for (p=student;p<student+N;p++)
printf ("%-6ld%-10s%-6d%-6d%-6d\n",p->num,p->name,p->score[0],p->score[1],p->total);
}
}

我修正了一下,7#得有点小问题,我也帮你修正了
2008-01-14 17:13
快速回复:[求助]谁能给我看看这希尔排序的函数那里错了吗?谢谢
数据加载中...
 
   



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

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