| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1696 人关注过本帖
标题:c语言 数组的合并 内存不能应用。。。
只看楼主 加入收藏
nightwar
Rank: 2
等 级:论坛游民
帖 子:32
专家分:13
注 册:2012-3-25
结帖率:66.67%
收藏
已结贴  问题点数:65 回复次数:7 
c语言 数组的合并 内存不能应用。。。
程序代码:
//两个数组合并
#include "stdio.h"
int d;  //用于记录数组c的大小,和数组c的输出类的一些操作
void main()
{
    int a[50],b[50],c[100];
    int i,j,k;           //i表示a数组的大小  j表示b数组的大小  k用于数组的输出
    printf("数组a的输入,输入一个数,表明你要输入多少个数到数组a中\n");
    scanf("%d",&i);
    for(k=0;k<i;k++)
        scanf("%d",a[k]);
    printf("数组b的输入,输入一个数,表明你要输入多少个数到数组b中\n");
    scanf("%d",&j);
    for(k=0;k<j;k++)
        scanf("%d",b[k]);
    void px(int *p,int n);  //声明 排序 冒泡法
    px(a,i);               //调用
    px(b,j);               //调用
    void prin(int *p,int n);  //声明 数组的输出函数
    prin(a,i);
    prin(b,j);
    void hb(int *o,int *p,int *q,int m,int n); //声明 两个数组的合并函数  前提:这俩个数组必须是排好序的
    hb(c,a,b,i,j);
    prin(c,i+j);
}

void px(int *p,int n)     //自定义函数   排序  冒泡法
{int i,j,t,leap;       

 for(i=0;i<n-1;i++)      //外层循环n-1次,一次循环沉淀一个数
 {
  leap=0;                //leap作为标记,是否两数相换
  for(j=0;j<n-i-1;j++)   //内循环n-i-1次
  {
      if(p[j]>p[j+1])    //比较两个数
      {
          t=p[j];        
          p[j]=p[j+1];
          p[j+1]=t;       //来两个数交换
          leap=1;         //交换了,标记leap=1
      }
  }
  if(leap==0) break;      //经历了一个内for循环,leap==0的话,表明排序成功了,不需要接下来在排序了。
 }
}

void prin(int *p,int n)   //自定义函数  数组输出函数
{
  int k,sum=0;
  for(k=0;k<n;k++)
   {
    printf("%d ",p[k]);
    sum++;
    if(sum%10==0) printf("\n");
   }
  printf("\n");
}

void hb(int *o,int *p,int *q,int m,int n)     //m为p指向数组的大小   n为q指向数组的大小  指针o指向合并的数组
{
    int i=0,j=0,k;                         //i为p指向数组的大小   j为q指向数组的大小
    while(1)
    {
        if(p[i]<q[j])
        {
            o[d]=p[i];
            i++;
        }
        else
        {
            o[d]=q[j];
            j++;
        }
        d++;
        if(i==m||j==n) break;
    }
    if(i==m)
    {
        for(k=j;k<n;k++)
        {
            o[d]=q[k];
            d++;
        }
    }
    if(j==n)
    {
        for(k=i;k<m;k++)
        {
            o[d]=q[k];
            d++;
        }
    }
}
求大神帮忙啊
搜索更多相关主题的帖子: color c语言 内存 
2012-09-25 09:44
ldzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:64
专家分:339
注 册:2012-7-30
收藏
得分:50 
    for(k=0;k<i;k++)
        scanf("%d",a[k]);
for(k=0;k<j;k++)
        scanf("%d",b[k]);
有警告的。

2012-09-25 11:48
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:5 
楼上说的对
2012-09-25 11:53
nightwar
Rank: 2
等 级:论坛游民
帖 子:32
专家分:13
注 册:2012-3-25
收藏
得分:0 
求解怎样输入。。
2012-09-25 14:15
liusujuan080
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-9-25
收藏
得分:0 
本人研究生在读,有个国外的一个团队,在群论的基础上研究出了矩阵相乘的新的快速的方法,源程序好像是C++之类的语言,我同学以前下载过,但是现在找不到了,恳请大家帮忙啊!重谢啊!我的邮箱liusujuan0808@ 感激啊!

坏女孩
2012-09-25 14:41
爱闹的娃
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:265
专家分:975
注 册:2011-10-23
收藏
得分:10 
回复 4楼 nightwar
二楼已经说得够清楚了啊.....
 for(k=0;k<i;k++)
        scanf("%d",&a[k]);//加取地址符......
for(k=0;k<j;k++)
        scanf("%d",&b[k]);
2012-09-25 15:04
nightwar
Rank: 2
等 级:论坛游民
帖 子:32
专家分:13
注 册:2012-3-25
收藏
得分:0 
表示自己SB了。。
2012-09-25 16:35
nightwar
Rank: 2
等 级:论坛游民
帖 子:32
专家分:13
注 册:2012-3-25
收藏
得分:0 
程序代码:
//两个数组合并
#include "stdio.h"
int d=0;  //用于记录数组c的大小,和数组c的输出类的一些操作
void main()
{
    int a[50],b[50],c[100];
    int i,j,k;           //i表示a数组的大小  j表示b数组的大小  k用于数组的输出
    printf("数组a的输入,输入一个数,表明你要输入多少个数到数组a中\n");
    scanf("%d",&i);
    for(k=0;k<i;k++)
        scanf("%d",&a[k]);
    printf("数组b的输入,输入一个数,表明你要输入多少个数到数组b中\n");
    scanf("%d",&j);
    for(k=0;k<j;k++)
        scanf("%d",&b[k]);
    void px(int *p,int n);  //声明 排序 冒泡法
    px(a,i);               //调用
    px(b,j);               //调用
    void prin(int *p,int n);  //声明 数组的输出函数
    prin(a,i);
    prin(b,j);
    void hb(int *o,int *p,int *q,int m,int n); //声明 两个数组的合并函数  前提:这俩个数组必须是排好序的
    hb(c,a,b,i,j);
    prin(c,d);
}

void px(int *p,int n)     //自定义函数   排序  冒泡法
{int i,j,t,leap;      
for(i=0;i<n-1;i++)      //外层循环n-1次,一次循环沉淀一个数
{
  leap=0;                //leap作为标记,是否两数相换
  for(j=0;j<n-i-1;j++)   //内循环n-i-1次
  {
      if(p[j]>p[j+1])    //比较两个数
      {
          t=p[j];       
          p[j]=p[j+1];
          p[j+1]=t;       //来两个数交换
          leap=1;         //交换了,标记leap=1
      }
  }
  if(leap==0) break;      //经历了一个内for循环,leap==0的话,表明排序成功了,不需要接下来在排序了。
}
}

void prin(int *p,int n)   //自定义函数  数组输出函数
{
  int k,sum=0;
  for(k=0;k<n;k++)
   {
    printf("%d ",p[k]);
    sum++;
    if(sum%10==0) printf("\n");
   }
  printf("\n");
}

void hb(int *o,int *p,int *q,int m,int n)     //m为p指向数组的大小   n为q指向数组的大小  指针o指向合并的数组
{
    int i=0,j=0,k;                         //i为p指向数组的大小   j为q指向数组的大小
    while(1)
    {
        if(p[i]<q[j])
        {
            o[d]=p[i];
            i++;
            d++;
        }
        else
        {
            o[d]=q[j];
            j++;
            d++;
        }
        if(i==m||j==n) break;
    }
    if(i==m)
    {
        for(k=j;k<n;k++)
        {
            o[d]=q[k];
            d++;
        }
    }
    if(j==n)
    {
        for(k=i;k<m;k++)
        {
            o[d]=p[k];
            d++;
        }
    }
}
这是完好的代码
2012-09-25 17:31
快速回复:c语言 数组的合并 内存不能应用。。。
数据加载中...
 
   



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

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