qq1053782317
qq1053782317
采纳率50%
2019-01-09 17:31 阅读 337

大家能帮我看看最后面排序输出的时候为什么出错吗

int shuzu=5; //定义了数组元素的个数
int powers[]={11,22,33,44,55};
int shanchu; //需要删除的数字
int xiabiao=-1; //找到删除数字的下标
int charu;
int i ,j; //循环变量
int t;
printf("请输入要删除的数字");
scanf("%d",&shanchu);
// 使用循环找到需要删除后的那个的数字
for (i=0;i<shuzu;i++)
{
if(shanchu==powers[i])
{
//记录下当前的下标
xiabiao=i;
break; //找到了删除的数字就跳出

      }
  }
 //根据判断是否找到
 if(-1==xiabiao)
 {
     printf("没有找到");

 }
 else
 {    //从找到的下标开始,后面一个覆盖前面一个数字
     for(i=xiabiao;i<shuzu-1;i++)
     {
         powers[i]=powers[i+1];
     }
     //删除完后,一定要记得数组的长度-1
     shuzu--;
     printf("删除后的结果为;\n");
     for (i=0;i<shuzu;i++)
   {
    printf("%d\t",powers[i]);
   }
 }

//删除之后进行插入
printf("\n");
printf("输入需要插入的值");
scanf("%d",&charu);
powers[shuzu]=charu;
shuzu++;

for (i=0;i<shuzu;i++)//注意现在的数组长度需要+1
{
printf("%d\t",powers[i]);
}

printf("将数组排序输出:\n");

//将输出的数组排序
for(i=0;i<shuzu-1;i++)
{
    for(j=0;j<shuzu-i-1;j++)
    {
        if(powers[j]<powers[j+1])   //将最小的一个值放在最后面
        {
            t=powers[i];
            powers[i]=powers[i+1];
            powers[i+1]=t;
        }
    }
}

for (i=0;i<shuzu;i++)//注意现在的数组长度需要+1
{
printf("%d\t",powers[i]);
}
图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    weixin_41461277 _ZGq 2019-01-09 17:38

    shuzu就是shuzu,不需要减一。
    ----------------------------------------
    更正:
    排序时j要初始化为i+1,小于shuzu。应该是这里错了。
    ----------------------------------------
    输出中间变量了一遍,终于发现问题了:(第二遍的不要改,我看成选择排序了):
    内层循环里写的是powers[i]和powers[i+1],实际上应该是powers[j]和powers[j+1]。

    点赞 评论 复制链接分享

相关推荐