穿堂风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日

悬赏问题

  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应