qq1053782317 2019-01-09 17:31 采纳率: 50%
浏览 338
已采纳

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

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条回答 默认 最新

  • _ZGq 2019-01-09 17:38
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 c语言,请帮蒟蒻看一个题
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)