瑞星卡卡安全论坛

首页 » 技术交流区 » 系统软件 » 【求助】C理解问题
过客2007 - 2007-6-15 16:54:00
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);

      }


我再理解一个小时先~
网络骑士HKC - 2007-6-16 0:51:00

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]);
  }
}
网络骑士HKC - 2007-6-16 0:54:00
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]不加空格它会当成斜体的标记显示不出来
过客2007 - 2007-6-16 20:28:00
呵呵,我挺笨的
过客2007 - 2007-6-16 20:29:00
看了好几遍,也没理解透.我把他打印出来了,想不通的时候就慢慢理解~~
过客2007 - 2007-6-16 20:29:00
先谢谢骑士啦
过客2007 - 2007-6-16 20:34:00
最近理解问题遇到的还真不少~~

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:我也说不太清楚,就是循环语句搞不懂了。

卡喀卡喀 - 2007-6-17 10:15:00
引用:
【过客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语句包含在一起形成了一个语句块哦
过客2007 - 2007-6-17 10:17:00
哦,呵呵,明白一些了.
过客2007 - 2007-6-17 10:20:00
for(i=0;i<=10;i++)
if(i<=5)
printf("%d<5",i);
if(i<10)
printf("%d<10",i);

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

以为是先FOR 再IF 再运行第二个IF呢,经过楼上们这么一教,我的问题也理解得差不多鸟。可以去试着改写那个代码了~~
DZWcr - 2007-6-18 8:51:00
楼主,你要养成良好的习惯
写for的时候要用到{ }这个大括号,这样才好看清楚你的for循环是从哪里到哪里,检测错误也会容易些
过客2007 - 2007-6-18 13:43:00
哦,记得了,谢谢提醒!
月光狼 - 2007-8-16 17:54:00
楼主好爱学习啊,顶...
1
查看完整版本: 【求助】C理解问题