为什么让数组元素后移没实现?

 

你第二层的for循环不能用正序了,得用倒序,不然会互相覆盖的啊。而且a[i]=number后要break跳出循环

#include <stdio.h>

int main()
{
	int a[11] = {1,4,6,9,13,16,19,28,40,100};
	int number ,i,j;
	for(i=0;i<10;i++)
		printf("a[%d]=%d\n",i,a[i]);
	printf("\n");
	printf("任意输入一个数:\n");
	scanf("%d",&number);
	printf("\n");
	if(a[9] <= number)
		a[10] = number;
	else
	{
		for(i=0;i<10;i++)
		{
			if(a[i] > number)
			{
				for(j=10;j>i;j--)
					a[j] = a[j-1];
				a[i] = number;
				break;
			}
		}
	}
	printf("打印新的数组:\n");
	for(i=0;i<11;i++)
		printf("a[%d]=%d\n",i,a[i]);

	return 0;
}

 

内循环不能再用i了,改为j,内循环要用倒序,数组长度要定义为12,最后一值为0;把if语句删除,只留2个循环就可以了。

for(j=11;j--;j>=i){

    a[j+1]=a[j];

}
a[j] = number;

 

if(a[i]>number)这个代码块里的数据交换有问题,修改如下:

int j ;  //这个变量放在最前面

//if语句修改如下,需要从最后一个开始,原来的逻辑会把旧值覆盖掉
if (a[i] > number)
{
	for(j= 10 ;j > i; j--)
		a[j] = a[j-1];
	a[i] = number;
}

 

你把代码贴出来,我帮你修改一下。

您的问题已经有小伙伴解答了,请点击【采纳】按钮,采纳帮您提供解决思路的答案,给回答的人一些鼓励哦~~

ps:开通问答VIP,享受5次/月 有问必答服务,了解详情↓↓↓

【电脑端】戳>>>  https://vip.csdn.net/askvip?utm_source=1146287632
【APP 】  戳>>>  https://mall.csdn.net/item/52471?utm_source=1146287632