12   1  /  2  页   跳转

【求助】C理解问题

【求助】C理解问题

main()

{

  int i,j,p,q,s,n,a[11]={127,3,6,28,54,68,87,105,162,18};

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

      { p=i;q=a;

    for(j=i+1;j<10;j++)

    if(q<a[j]) {p=j;q=a[j];}/*这一条是干么?*/

    if(p!=i)

    {

      s=a;

      a=a[p];

      a[p]=s;

    }/*这个呢?是怎么个赋值原理?*/

    printf("%d ",a);

      }


我再理解一个小时先~
最后编辑2007-08-16 17:44:14
分享到:
gototop
 


main()
{

  int i,j,p,q,s,n,a[11]={127,3,6,28,54,68,87,105,162,18};
  for(i=0;i<10;i++)//从头开始
  {
    p=i;
    q=a[ i];
//q用来保存当前循环中的最大值,刚开始当然就是本身大了
//p用来保存当前最大值的位置

    for(j=i+1;j<10;j++)//把第i个元素跟它后面的对比
      if(q<a[j]) //如果在后面发现比当前最大值
      {
        p=j;//保存新的最大值所在的位置
        q=a[j];//q里保存的是新的最大值
      }
/*
等上面的这个二级循环完成了,
p里面的应该就是从i起后面的数里最大数的位置
而q里保存的应该是最大值
*/
    if(p!=i)
    {
/*
如果p不等于i,
则说明已经执行过p=j这句,
说明a[ i]不是剩下的数里最大的
下面三句是交换当前值和最大值的保存位置(其实这代码可以改进的)
保证大的数在前面
*/
      s=a[ i];
      a[ i]=a[p];
      a[p]=s;
    }

    printf("%d ",a[ i]);
  }
}
gototop
 

main()
{

  int i,j,p,q,a[11]={127,3,6,28,54,68,87,105,162,18};
  for(i=0;i<10;i++)//从头开始
  {
    p=i;
    q=a[ i];
//q用来保存当前循环中的最大值,刚开始当然就是本身大了
//p用来保存当前最大值的位置

    for(j=i+1;j<10;j++)//把第i个元素跟它后面的对比
      if(q<a[j]) //如果在后面发现比当前最大值
      {
        p=j;//保存新的最大值所在的位置
        q=a[j];//q里保存的是新的最大值
      }


    if(p!=i)
    {
      a[p]=a[ i];
      a[ i]=q;
    }

    printf("%d ",a[ i]);
  }
}
这样就省了一个s变量,n变量好像从头到尾都没用上!
汗!a[ i]不加空格它会当成斜体的标记显示不出来
gototop
 

呵呵,我挺笨的
gototop
 

看了好几遍,也没理解透.我把他打印出来了,想不通的时候就慢慢理解~~
gototop
 

先谢谢骑士啦
gototop
 

最近理解问题遇到的还真不少~~

1、是不是一个循环for(i=0;i<=10;i++)
                printf("%d",i);

要执行完这十次,才会执行下一个语句?

2、嵌套循环是啥意思?

for(i=0;i<=10;i++)
if(i<=5)
printf("%d<5",i);
if(i<10)
printf("%d<10",i);

这个语句,他是怎么运行的呢?
是不是先i++到10再运行下一句,还是两个if都会同时运行十次?

PS:我也说不太清楚,就是循环语句搞不懂了。

gototop
 

引用:
【过客2007的贴子】最近理解问题遇到的还真不少~~

1、是不是一个循环for(i=0;i<=10;i++)
                printf("%d",i);

要执行完这十次,才会执行下一个语句?

2、嵌套循环是啥意思?

for(i=0;i<=10;i++)
if(i<=5)
printf("%d<5",i);
if(i<10)
printf("%d<10",i);

这个语句,他是怎么运行的呢?
是不是先i++到10再运行下一句,还是两个if都会同时运行十次?

PS:我也说不太清楚,就是循环语句搞不懂了。


………………


1.是11次

2.这样的就是一个嵌套循环哦  很简单的一个例子
for(i=0;i<10;i++)
for(j=0;j<10;j++)
{

}


for(i=0;i<=10;i++)
if(i<=5)
printf("%d<5",i);
if(i<10)
printf("%d<10",i);

这个语句从for开始 
然后就是if(i<=5) 
再循环 
当i=10的时候就会跳出循环
执行下一条哦(也就是第二条if语句)

语句这样写就是你说的第二种执行方法哦
for(i=0;i<=10;i++)
{
if(i<=5)
printf("%d<5",i);
if(i<10)
printf("%d<10",i);
}
一个大括号把两个if语句包含在一起形成了一个语句块哦
gototop
 

哦,呵呵,明白一些了.
gototop
 

for(i=0;i<=10;i++)
if(i<=5)
printf("%d<5",i);
if(i<10)
printf("%d<10",i);

起初,我还以为是循环都是要被执行的呢。

以为是先FOR 再IF 再运行第二个IF呢,经过楼上们这么一教,我的问题也理解得差不多鸟。可以去试着改写那个代码了~~
gototop
 
12   1  /  2  页   跳转
页面顶部
Powered by Discuz!NT