| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2579 人关注过本帖
标题:数组编程题求解,需要指针
只看楼主 加入收藏
aibing7
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-5-19
收藏
 问题点数:0 回复次数:14 
数组编程题求解,需要指针
题目:数组a:"1,7,9,11,13,15,17,19"; 数组b:"2,4,6,8,10"
      两个数组合并为数组c,按升序排列。
想不出来循环怎末写
搜索更多相关主题的帖子: 指针 求解 
2008-05-08 10:42
sxn0508
Rank: 1
等 级:新手上路
帖 子:120
专家分:0
注 册:2008-1-24
收藏
得分:0 
我想你可以先合并,再排个序~
不需要指针。
学到数组就可以做
数组那章讲了冒泡排序了吧?!

[[it] 本帖最后由 sxn0508 于 2008-5-8 11:04 编辑 [/it]]
2008-05-08 11:03
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#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;
}

学习需要安静。。海盗要重新来过。。
2008-05-08 11:14
sxn0508
Rank: 1
等 级:新手上路
帖 子:120
专家分:0
注 册:2008-1-24
收藏
得分:0 
这是C版块,你用new  delete ,不知道LZ是否能懂得啊~
2008-05-08 12:34
炽天使
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-5-8
收藏
得分:0 
用动态数组是不知道数组长度,如果明确了就不需要了...或者用malloc()也一样
2008-05-08 12:49
aibing7
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-5-19
收藏
得分:0 
谢谢3楼,不过不是很明白,我要好好看看
2008-05-08 13:32
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
程序代码:
/************************************************************************
        数组编程题求解,需要指针

        题目:数组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();
}


                        
2008-05-08 15:40
lnhaing
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2008-1-30
收藏
得分:0 
LS
应该减下肥!

我来自偶然! bitter C
2008-05-08 15:44
aibing7
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-5-19
收藏
得分:0 
谢谢广陵绝唱,如果你真是扬州人,那就更好了。因为我也是。。
这个程序,我用很无赖的方法编写出来了,自己很不满意。看完指针,正好在看函数。可以一起学习一下。尽管你的程序看起来实在是很繁琐,仍然很感谢
我的很无赖的方法
#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");


}
2008-05-08 18:16
aibing7
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-5-19
收藏
得分:0 
我发现我忘了写注释了,不好意思。
主要就是通过两次循环,给数组排序。
2008-05-08 18:18
快速回复:数组编程题求解,需要指针
数据加载中...
 
   



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

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