穿堂风309 2022-03-30 17:08 采纳率: 66.7%
浏览 94
已结题

若有两个以按升序排列的数列,数列a:“1,7,9,11,13,15,17,19”和数列b:“2,4,6,8,10”,现将两个数列合并插入到c数列中,插入后的c数列仍按升序排列,要求通过指针完成

#include<stdio.h>
int main()
{
    int a[8] = { 1,7,9,11,13,15,17,19 }, b[5] = { 2,4,6,8,10 }, c[13];
    int * pb=b, * pc=c;
    int i, j, k=0,m;
    for (i = 0; i < 8; i++)
    {
        c[i] = a[i];
    }
    for (j = 0; j < 5; )
    {
            if (b[j] > c[k])
            {
                k++;
                if (b[j] < c[k])
                {
                    for (m = 12; m > k; m--)
                        c[m] = c[m - 1];
                    c[k] = b[j];
                }
                else
                    k++;
            }
    }
        for (i = 0; i < 13; i++)
            printf("%d,", c[i]);
}


8数字插不进去,差一个循环,但我不知道这个循环怎么写

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2022-03-30 22:53
    关注

    题目要求用指针写,修改如下,供参考:

    #include<stdio.h>
    int main()
    {
        int a[8] = { 1,7,9,11,13,15,17,19 }, b[5] = { 2,4,6,8,10 }, c[13];
        int *pa = a, * pb=b, * pc=c;
        while (pa < a + 8 && pb < b + 5)
        {
            if (*pa <= *pb){
                *pc++ = *pa++;
            }
            else{
                *pc++ = *pb++;
            }
        }
        while (pa < a + 8) *pc++ = *pa++;
        while (pb < b + 5) *pc++ = *pb++;
        for (int i = 0; i < 13; i++)
                printf("%d,", c[i]);
        return 0;
    }
    
    

    题主的代码,修改如下,供参考:

    #include<stdio.h>
    int main()
    {
        int a[8] = { 1,7,9,11,13,15,17,19 }, b[5] = { 2,4,6,8,10 }, c[13];
        int * pb=b, * pc=c;
        int i, j, k=0, m;
        for (i = 0; i < 8; i++)
        {
            c[i] = a[i];
        }
        for (j = 0; j < 5; j++)//继续接上 b[]数组
        {
            c[i++] = b[j];
        }
        for (i = 0; i < 13 - 1; i++){ //数组c[]排序
             for (j = 0; j < 13 - 1 - i; j++){
                  if (c[j] > c[j+1]){
                      m = c[j];c[j] = c[j+1];c[j+1] = m;
                  }
             }
        }
                //if (b[j] > c[k])
                //{
                //    k++;
                //    if (b[j] < c[k])
                //    {
                //        for (m = 12; m > k; m--)
                //            c[m] = c[m - 1];
                //        c[k] = b[j];
                //    }
                //    else
                //        k++;
                //}
                //}
        for (i = 0; i < 13; i++)
                printf("%d,", c[i]);
        return 0;
    }
    
     
    //8数字插不进去,差一个循环,但我不知道这个循环怎么写
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月8日
  • 已采纳回答 3月31日
  • 创建了问题 3月30日

悬赏问题

  • ¥50 求解vmware的网络模式问题
  • ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳
  • ¥15 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥30 请帮我解决一下下面六个代码
  • ¥15 关于资源监视工具的e-care有知道的嘛
  • ¥35 MIMO天线稀疏阵列排布问题
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?