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

我感觉有些语句是多余的

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

    {

        if(i != 9)   

            printf("%.2f, ", arr[i]);  //%.2f表示小数点后精确到两位

        else

        printf("%.2f", arr[i]);    //%.2f表示小数点后精确到两位

    }

这一个循环语句中,为什么if(i!=9)和else语句并没有起到任何作用,将他们去掉保留printf("%.2f, ", arr[i]);这句话,输出结果依然是正确的。

还有就是,有一个地方不太懂,

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;    //将较大的数放在后面    

            }                 

        }                

    }

这个循环中, for(j=0;j<=i;j++)这里不是已经把0~9的数字都比较晚了嘛,那为什么前面的for(i=8; i>=0; i--),不能改成if语句?

正在回答

3 回答

额 上面第二个问题我说错了

第一个for是进行9组比较,每进行完一组比较就固定一个数

比如进行完第一组比较,最大的数字就排在最后一位了

第二个for是用来实现两两交换的,大的数字往后排

i+1是每组比较中的需要进行的两两比较的次数

这是由于第一个for中已经固定好了8-i个数   


进行9组比较需要构成一个循环,而用if的话只能判断一次

所以得用for,当然也可以用while,那么i--就在{}中了,

但是用for的话是最简洁的。



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

第一个问题是为了保证第十个数字后面没逗号咯 要仔细看看输出内容噢

不太明白你的第二个问题

我的理解是

第一个for是遍历这10个数字

第二个for是为了使第一个for中相应序数的数字与后面的数字都一一比较一下

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

我先说下面一个问题。

i的值决定了总循环的次数,且用for比if更加方便阅读的人理解。

第一个问题看起来好像是打错了

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

举报

0/150
提交
取消

我感觉有些语句是多余的

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