论坛: 编程破解 标题: zzzaaa老先生请进 复制本贴地址    
作者: kenter1643 [kenter1643]    论坛用户   登录
昨天有个C菜鸟来问我
#include<stdio.h>
void main()
{int i,b,c,a[]={1,10,-3,-21,7,13},*pf,*pe;
b=c=1;pf=pe=a;
for(i=0;i<6;i++)
{
if(b<*(a+i)){b=*(a+i);pf=&a[i];}
if(c>*(a+i)){c=*(a+i);pe=&a[i];}
}
i=*a;*a=*pf;*pf=i;i=*(a+5);*(a+5)=*pe;*pe=i;
printf("%d,%d,%d,%d,%d,%d\n",a[0],a[1],a[2],a[3],a[4],a[5]);
典型的条件交换程序;(在第一个if语句中指针pf指向最后一个地址&a[5],第二个*pe指向a[3],然后将a[0]和a[5]交换,再将a[5]和a[3]交换)
小弟是一个文盲,表达能力有限;
希望zzzaaa老先生写一个详细的解释(你的理论基础知识好点)



地主 发表时间: 08/23 10:53

回复: 286 [unique]   版主   登录
#include<stdio.h>
void main()
{
  int i,b,c,a[]={1,10,-3,-21,7,13},*pf,*pe;
  b=c=1;//b存储的最小值,c存储最大值.
  pf=pe=a;//pf指向最小值,pe指向最大值.
  for(i=0;i<6;i++)
  {
     if(b<*(a+i))
     {//如果有值小于当时最小值,就把它设为新的最小值.并让pf指向.b=最小值。
        b=*(a+i);
        pf=&a[i];
      }
      if(c>*(a+i))
      {//最大值,原理同上.
          c=*(a+i);
          pe=&a[i];
       }
     }
     //最小值的位置与第0个位置交换。
     i=*a;
     *a=*pf;
     *pf=i;
      //最大值的位置与最后一个位置交换。
      i=*(a+5);
      *(a+5)=*pe;
      *pe=i;
       //打印
       printf("%d,%d,%d,%d,%d,%d\n",a[0],a[1],a[2],a[3],a[4],a[5]);
}

该程序有几个不足之处:
1。b,c是多余的,不用也可。
2。b,c前面的假设都等于1是危险的,如果数组中的数都大于1或都小于1,将造成最后数据出错。
当然,作为自己练习的小程序,是没什么问题的。

B1层 发表时间: 08/25 13:06

回复: kenter1643 [kenter1643]   论坛用户   登录
哈哈~~~~~~~~编程老手就是老手,连严密性都考虑的这么周到!
这是一个菜鸟从练习中找来问我的题,他妈的他也太菜了,我解释半天他都不明白,286你的解释也详细。不过我要的是那些通俗易懂的口语来解释的。因为那家伙刚学编程,逻辑思维差到死。我虽然会,但语文极差,很难表达出意思。无论如何我都多谢286你的好意!!

B2层 发表时间: 08/28 10:18

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号