读书人

选择排序 小迷惑,该怎么处理

发布时间: 2012-02-10 21:27:42 作者: rapoo

选择排序 小迷惑

C/C++ code
//题目:题目:对10个数进行排序#define N 10#include<stdio.h>void main(){   int i,j,min,tem,a[N];   //输出数据   printf("please input ten num:\n");   for(i=0;i<N;i++)   {     printf(" a[%d]=",i);     scanf("%d",&a[i]);   }    // printf("\n");         printf("输出前的:");     for(i=0;i<N;i++)                                                             printf("%5d",a[i]);                               printf("\n");    [color=#FF0000]//排序    for(i=0;i<N-1;i++)    {                                     min=i;                             for(j=i+1;j<N;j++)                                                                        if(a[min]>a[j])  min=j;                                                tem=a[i];                           a[i]=a[min];               a[min]=tem;         }[/color]     printf("shu chu hou  de :\n");     for(i=0;i<N;i++)     printf("%5d",a[i]);printf("\n");   }


我给弄成这样就不对了 就加了一个{ }
C/C++ code
for(i=0;i<N-1;i++)    {                                     min=i;                             for(j=i+1;j<N;j++)      [color=#FF0000] {[/color]        if(a[min]>a[j])                  min=j;                               tem=a[i];                           a[i]=a[min];               a[min]=tem;     [color=#FF0000]  }[/color]        }

小弟对于排序里面的代码,没很好的理解,我知道for()后面的语句,只能执行一条语句(分号 ;结束),但是这个后面有好几条。
我想知道如果 if(a[min]>a[j]) 成立,那么下面的四条语句会执行吗?
如果if(a[min]>a[j]) 不成立 那么下面又指行几条语句,是交换的那三条吗?
真的给迷惑了。

[解决办法]
你都知道for之后只执行一句。。在for之后加{}执行的就是整个{}里面的句子了
大括号加在if之前就不关if的事,if还是执行到;结束
[解决办法]
成立确实只执行第一条,但顺序结构(即从上到下执行)也会执行后面三句,if不成立只执行后三句。
[解决办法]
写for循环的话,还是要把大括号加上的
for()
{
// 语句
}
你的程序,不管怎样,那三条语句都会执行的,要注意编码规范啊

读书人网 >C语言

热点推荐