當前位置:編程學習大全網 - 編程語言 - 哪位大佬能幫看看這道c語言?

哪位大佬能幫看看這道c語言?

按題意,既利用指針將b中每個元素按照升序插入到a數組對應位置。

思路:

a,b都是默認輸入升序的數(題目沒要求驗證,我的代碼也不驗證,請按升序輸入,如需驗證升序輸入,只需定義壹個變量記錄輸入的數字,並在下次循環輸入時比大小。)

所以,定義2個指針分別指向a,b最後壹個輸入的元素地址,嵌套循環,分別往前移動,同時比較兩數組元素,每次找到對應位置就將a移位並插入b的位置。

ps:由於存在b小於a的所有元素這種特殊情況,循環外還有a數組全部後移的情況。故位移寫成單獨函數,符合編程習慣。

下面是代碼:

#include <stdio.h>

void move1(int *bp,int a[],int len)//從bp開始往後移動1位

{

int *ep=&a[len-1];

if(bp>=a && bp<=ep)

while(ep>bp)//a當前元素之後的元素向後移1位

{

*ep=*(ep-1);

ep--;

}

}

int main()

{

int i=0,m=50,a[50],b[3],*pa=NULL,*pb=&b[2],flag;

while(m>47) printf("請輸入m值(>=47):"),scanf("%d",&m);

printf("請給a數組輸入%d個整數(確保升序排列,輸入無驗證!):\n",m);

i=m;

while(i--) scanf("%d",&a[m-i-1]);

printf("請給b數組輸入3個整數(確保升序排列,輸入無驗證!):\n"),scanf("%d%d%d",&b[0],&b[1],&b[2]);

while(pb>=b)//從b最大數開始

{

pa=&a[m-1];//初始指向a最大數

while(pa>=a)//從a最大數開始

{

flag=0;

if(*pa<=*pb)//找到第壹個a小於等於b,就把b元素插入到a元素後面(a移位)

{

flag=1;

move1(pa+1,a,50);//a當前元素之後的元素向後移1位

?*(pa+1)=*pb;

break;

}

pa--;

}

if(!flag)//如未發生位移,說明該b元素小於所有a元素,插入再a數組開始位置,a所有元素後移1位

move1(a,a,50),a[0]=*pb;

pb--;

}

pa=a;

printf("合並後的a數組為:\n");

while(pa<=&a[m+3-1]) printf("%d ",*pa++);

return 0;

}

  • 上一篇:Python編程中的3大挑戰是什麽?
  • 下一篇:機器人屬於什麽學科
  • copyright 2024編程學習大全網