你第二层的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