为了账号安全,请及时绑定邮箱和手机立即绑定

请问,这个外层的for循环,把i--改成i++就运行失败了,为什么呢?我觉得只要j<=i这个满足了,i自加还是自减没什么意义啊。求大佬解答,指出我的错误

#include <stdio.h>
int main()
{
    double arr[]={1.78, 1.77, 1.82, 1.79, 1.85, 1.75, 1.86, 1.77, 1.81, 1.80};
    int i,j;
    printf("\n************排队前*************\n");
    for(i=0;i<10;i++)
    {
        if(i != 9)  
            printf("%.2f, ", arr[i]);  //%.2f表示小数点后精确到两位
        else
            printf("%.2f", arr[i]);    //%.2f表示小数点后精确到两位
    }
    for(i=8; i>=0; i++)
    {
        for(j=0;j<=i;j++)
        {
            if(      arr[j] >arr[j+1]    )      //当前面的数比后面的数大时
            {
                double temp;    //定义临时变量temp
                temp=arr[j] ;   //将前面的数赋值给temp
                arr[j] =arr[j+1]  ;         //前后之数颠倒位置
                arr[j+1]    =temp;       //将较大的数放在后面   
            }                
        }               
    }
    printf("\n************排队后*************\n");
    for(i=0;i<10;i++)
    {
        if(i != 9)  
            printf("%.2f, ", arr[i]);  //%.2f表示小数点后精确到两位    
        else
            printf("%.2f", arr[i]);    //%.2f表示小数点后精确到两位
    }
    return 0;   
}

正在回答

2 回答

你for(i=8;i>=0;i++),i永远大于等于0,无线循环了,你先去理解一下冒泡排序法再来看这段代码。

1 回复 有任何疑惑可以回复我~
#1

仍_是少年 提问者

奥对,谢谢了
2019-10-04 回复 有任何疑惑可以回复我~
#2

仍_是少年 提问者

奥对,谢谢了
2019-10-04 回复 有任何疑惑可以回复我~

如果想用自增的话可以这样写:

for(i=0; i<9; i++)

    {

        for(j=0;j<9-i;j++)

        {

            if(arr[j]>arr[j+1])      //当前面的数比后面的数大时

            {

                double temp;    //定义临时变量temp

                temp=arr[j];

                //将前面的数赋值给temp

                arr[j]=arr[j+1];              //前后之数颠倒位置

                arr[j+1]=temp;              //将较大的数放在后面    

            }                 

        }                

    }


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

请问,这个外层的for循环,把i--改成i++就运行失败了,为什么呢?我觉得只要j<=i这个满足了,i自加还是自减没什么意义啊。求大佬解答,指出我的错误

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信