急,哪位C语言大神帮我看看这小程序

#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 50
typedef struct

{ int data[MAXSIZE];

int last;

}sequenlist;

void creat(sequenlist *L)

{

int a,b;

printf("输入A表元素的个数:\t");

scanf("%d",&a);

for(int i=1;i<=a;i++)

{

printf("请输入第%d个元素\t",i);

scanf("%d",&(L->data[i])); }

printf("输入B表元素的个数:\t");

scanf("%d",&b);

i=a+1;

for(int j=1;i<=a+b;i++,j++)

{

printf("请输入第%d个元素\t",j);

scanf("%d",&(L->data[i]));
L->last=a+b;
}

}

void merge(sequenlist *L)
{int i,j,k;

i=1;

while(i<=L->last)

{j=i+1;

while(j<=L->last)

if(L->data[j]==L->data[i])

{for(k=j+1;k<=L->last;k++)

L->data[k-1]=L->data[k];

L->last=L->last-1;

}

else

j++;

i++;

}

}

void maop(sequenlist *L)
{
int k=1;
for(int i=1;i<L->last;i++)

for(int j=1;i<L->last-i;j++)
if(L->data[j]>L->data[j+1]){
k=L->data[j];
L->data[j]=L->data[j+1];
L->data[j+1]=k;
}
}

void main()

{

sequenlist *C;

C=(sequenlist *)malloc(sizeof(sequenlist));

creat(C);
merge(C);
maop(C);

printf("合并的元素为:\n");

for(int d=1;d<=C->last;d++)

printf("%d\t",C->data[d]);

printf("\n");

}
我想写个A和B顺序表的合并,删除相同元素,然后冒泡排序,分出大小。写的没出现错误,但是没办法输出最后合并的元素。错在哪,怎么改???
要是把冒泡排序删除就可以输出结果了。可是我就是不懂错在哪

冒泡排序你少了一对括号。好的排版可以减少这种错误的发生。还有一个小建议就是写循环之类从0开始,比如for(i=0;i<a;i++)


#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 50
typedef struct
{
    int data[MAXSIZE];
    int last;
}sequenlist;
void creat(sequenlist *L)
{
    int a,b,i,j;
    printf("输入A表元素的个数:\t");
    scanf("%d",&a);
    for(i=1;i<=a;i++)
    {
        printf("请输入第%d个元素\t",i);
        scanf("%d",&(L->data[i]));
    }
    printf("输入B表元素的个数:\t");
    scanf("%d",&b);
    i=a+1;
    for(j=1;i<=a+b;i++,j++)
    {
        printf("请输入第%d个元素\t",j);
        scanf("%d",&(L->data[i]));
        L->last=a+b;
    }
}
void merge(sequenlist *L)
{
    int i,j,k;
    i=1;
    while(i<=L->last)
    {
        j=i+1;
        while(j<=L->last)
        if(L->data[j]==L->data[i])
            {
                for(k=j+1;k<=L->last;k++)
                L->data[k-1]=L->data[k];
                L->last=L->last-1;
            }
        else
        j++;
        i++;
    }
}
void maop(sequenlist *L)
{
    int i,j,t;
    for(i=1;i<=L->last;i++)
    {
        for(j=1;j<=L->last-i;j++)
        {//这里的括号
            if(L->data[j]>L->data[j+1])
            {
                t=L->data[j];
                L->data[j]=L->data[j+1];
                L->data[j+1]=t;
            }
        }//这里的括号
    }
}
int main()
{
    int d;
    sequenlist *C;
    C=(sequenlist *)malloc(sizeof(sequenlist));
    creat(C);
    merge(C);
    maop(C);
    printf("合并的元素为:\n");
     for(d=1;d<=C->last;d++)
       printf("%d\t",C->data[d]);
    printf("\n");
    system("pause");
    return 0;
}

追问

大神,就QQ

大神,就QQ

追答

我也不是大神了...比大神差太多了
QQ刚才私信发了,现在QQ上的不多,邮箱用的多一些
qinmo0525@qq.com

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-03
冒泡里面第二个循环条件错了for(int j=1;i<L->last-i;j++)追问

大神,那怎么改?

第2个回答  2013-10-03
冒泡法。。。擦,都忘了。。

C语言高手来一下帮我编个小程序
首先,我可以用字符串来做。我现在先把代码贴上:include <stdio.h> int main(){ char *str , *ch , *c[] = {"个位为:" , "十位为:" , "百位为:" , "千位为:" , "万位为:"};scanf("%s",str);int i = 0 ;\/\/要求1.求出它是几位数 printf("此数为%d位数\\n",(sizeo...

大家帮我看看这个C语言小程序哪个地方出现了死循环
死循环再 while(sum!=1)猜想你的程序是解决绕圈报数问题,m个人每报n个数出来一个人,求最后出来的人。你的程序使用链表,并且用一个标志位来表示人(或猴)在不在队列里。有这样几个问题:1。如果你用链表,没有必要用标志为。因为链表的优势是插入,删除方便,用了标志位,链表的结构没有变化,...

c语言小程序例题, 大师看看。怎么办?
1.5 大写转小写:输入一个大写英文字母,输出相应的小写字母。实验二 分支结构 2.1 显示成绩:输入学生的数学成绩,若低于60输出“Fail”,否则输出“Pass”。2.2 找最小值:输入四个整数,输出其中的最小值。2.3 求三角形:输入三角形的三条边,计算面积和周长(保留两位小数);若不构成三角形...

帮忙看一个c语言小程序
其实题主的程序输出的前 30 个数不是 0。但是因为题主的 while 语句没有停止条件,所以是一个无限循环,导致这部分不为零的结果马上就被一大堆 0 覆盖了。你的程序输出的实际结果为:这种结果的原因是,题主定义的 i 类型是 int。int 型在 C 语言中默认代表有符号整数(也就是说也可以表示负整...

我是c语言小白,问问大神帮我看看编写的简单程序这哪里出错了?_百度...
#include<stdio.h> 输入代码时忽视输入法隐藏的错误 表面上看都是一样的代码,但是第二行就有错误,是全角和半角的不同,再看:正确编译运行 所以你的代码没有任何问题,但是要注意代码输入的方法。以前回答了很多,有时间可以看看我最近回答c语言问题:网页链接 网页链接 网页链接 网页链接等等。

求c语言大佬帮助!帮我写个小程序,谢谢
int n);\/\/在屏幕上输出数组各元素的值(逗号分隔)#define N (10)int main(){ int a[N],b[N],c[N*2],i; srand(time(NULL)); Init(a,N); Print(a,N); Short(a,N); Print(a,N); Init(b,N); Print(b,N); Short(...

急急急,c语言问题,求高手帮我看看下面的程序,它要求是把10000以内的完 ...
int main(){ int i=2,m=2,k,sum=1,j=2;while (m<=100){ i=2; \/\/重设初始值 sum=1; \/\/重设初始值 while (i<m){ k=m%i;if (k==0) sum=sum+i;i=i+1;} if (sum-m==0) { \/\/判断为完全数并且输出的部分应该都在if语句内,用大括号 printf("%d its factors are ...

谁能用C语言帮我写几个小程序 急求
{ int max(int x,int y,int z);int a,b,c,d;scanf("%d%d%d",&a,&b,&c); \/\/scanf%d间不能有逗号,后面是输入的地址因此得加& d=max(a,b,c); \/\/输入的是abc,不是x,y,z\/\/x,y,z是形参a,b,c是实参 printf("max=%d",d);\/\/不是print是printf return 0;} int max(int ...

跪求C语言编程高手帮忙编个小程序,大一年级的
tot=a+b+c+d+e;printf("字符串中共有:%d字符\\n大写字母:%d个\\n小写字母:%d个\\n数字:%d个\\n空格:%d个\\n其他字符:%d\\n",tot,a,b,c,d,e);for(i=0;i<tot-1;i++){ iPos = i;for(j=i+1;j<tot;j++)if(ch[j]<ch[iPos])iPos=j;iTemp = ch[i];ch[i] = ch[...

c语言的一个小程序
{ int a[N];int i, j;\/\/将2到N-1间的数放在筛子中 i = 2;while(i<N){ a[i]=1;i++;} i = 2;int limit;limit = (int)sqrt((double)(N-1));\/\/计算除数的上限limit while(i<limit){ \/\/用i筛去筛子中i的倍数的数,不包括i本身 j = 2*i;while(j<N){ a[j] = 0;...

相似回答