学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
 14 12
发新话题
打印

数组编程题求解,需要指针

数组编程题求解,需要指针

题目:数组a:"1,7,9,11,13,15,17,19"; 数组b:"2,4,6,8,10"
      两个数组合并为数组c,按升序排列。
想不出来循环怎末写

TOP

我想你可以先合并,再排个序~
不需要指针。
学到数组就可以做
数组那章讲了冒泡排序了吧?!

[ 本帖最后由 sxn0508 于 2008-5-8 11:04 编辑 ]

TOP

#include"stdio.h"
int main()
{
    int a[]={1,7,9,11,13,15,17,19};
    int b[]={2,4,6,8,10};
    int j=(sizeof(a)+sizeof(b))/sizeof(int);
    int *c=new int[j];
    int k=0,e=0;
    for(int i=0;i<j;i++)
    {   
        if(k<sizeof(a)/sizeof(int)&&e<sizeof(b)/sizeof(int))
        a[k]>b[e]?(c[i]=b[e++]):(c[i]=a[k++]);
        else if(k<sizeof(a)/sizeof(int))
            c[i]=a[k++];
        else
            c[i]=b[e++];
    }
    for( i=0;i<j;i++)
    {
        printf("%d ",c[i]);
    }
    delete []c;
    return 0;
}
学习需要安静。。海盗要重新来过。。

TOP

这是C版块,你用new  delete ,不知道LZ是否能懂得啊~

TOP

用动态数组是不知道数组长度,如果明确了就不需要了...或者用malloc()也一样

TOP

谢谢3楼,不过不是很明白,我要好好看看

TOP

复制内容到剪贴板
代码:
/************************************************************************
        数组编程题求解,需要指针

        题目:数组a:"1,7,9,11,13,15,17,19"; 数组b:"2,4,6,8,10"
        两个数组合并为数组c,按升序排列。

        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

            根据题意,写出下面的小程序,如有错误,欢迎指出。谢谢。
************************************************************************/
#include<stdio.h>
#include<string.h>
void px(int *p,int i,int j)/*设定px函数形参为指向数组c的指针p,待排序数组的前端下标,后端下标*/
{
        int I,J,V,t;
        I=i;            /*为I、J赋值为数组前、后端下标值*/
        J=j;
        V=*(p+(i+j)/2);  /*  V值为数组中间数据的值,作为参照值*/
        while(1)
        {
                while(i<J&&*(p+i)<V) /*如果数组下标到达后端,或者数据大于参照值,跳出循环*/
                        ++i;         /*此时的i值即为交换数据的下标*/
                while(j>I&&*(p+j)>V) /*同上,不过是后端数据有小于参照值的,跳出循环*/
                        --j;
                if(i>j)
                        break;   /*如果i值大于j值,说明已经是排好序,跳出循环*/
                if(i<j)     /*如果i值小于j值,就进行交换*/
                {
                        t=*(p+i);
                        *(p+i)=*(p+j);
                        *(p+j)=t;
                }
                ++i;
                --j;
        }
        if(i<J) /*如果前端下标未移动到后端,说明还未完成排序,返回px函数继续排序*/
                px(p,i,J);
        if(j>I) /*同上*/
                px(p,I,j);
}
int main(void)
{
        int a[]={1,7,9,11,13,15,17,19};
        int b[]={2,4,6,8,10};
        int c[13];
        int i,j;
        for(i=0;i<8;++i)
                c[i]=a[i];
        for(j=0;j<5;++j)
                c[j+i]=b[j];
        printf("组合后的数组:\n");
        for(i=0;i<13;++i)
                printf(" %d",c[i]);
        puts(" ");
        px(c,0,12);
        printf("排序后的数组:\n");
        for(i=0;i<13;++i)
                printf(" %d",c[i]);
        puts("");


        getch();
}


                        

TOP

LS
应该减下肥!
我来自偶然! bitter C

TOP

谢谢广陵绝唱,如果你真是扬州人,那就更好了。因为我也是。。
这个程序,我用很无赖的方法编写出来了,自己很不满意。看完指针,正好在看函数。可以一起学习一下。尽管你的程序看起来实在是很繁琐,仍然很感谢
我的很无赖的方法
#include<stdio.h>
main()
{
    int a[8]={1,7,9,11,13,15,17,19};
    int *p;
    int b[5]={2,4,6,8,10};
    int c[13];
    int i=0,j=0,k=0;
    p=c;

    for(i=0;i<5;i++)
    {
        c[i]=b[i];
    }
    for(i=0;i<8;i++)
    {
        c[i+5]=a[i];
    }
    for(i=0;i<13;i++)
        {printf("%4d",p[i]);}
    printf("\n");

    for(i=0;i<13;i++)
    {
        for(j=i+1;j<13;j++)
        {
            if(*(p+i)>*(p+j))
                {k=*(p+i);
                *(p+i)=*(p+j);
                *(p+j)=k;}
        }
    }

    for(i=0;i<13;i++)
        {printf("%4d",p[i]);}
    printf("\n");


}

TOP

我发现我忘了写注释了,不好意思。
主要就是通过两次循环,给数组排序。

TOP

 14 12
发新话题