网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 软件工程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
本月文章推荐
.揭开.NET消息循环的神秘面纱.
.Apache中的表格实现剖析(2).
.“6 Sigma”品质管理的研究.
.SOA: 规则先行.
.BEA新任亚太区总经理 曾任惠普软.
.Java从老虎变野马 好事还是坏事?.
..NET框架中基于角色的安全性.
.测试ActiveX EXE.
.Vista开发人员的故事:DirectX.
.在Avalon中建立数据识别的应用程.
.XMI与UML合力推动产品开发(1).
.使用UML为EAI建模.
.Linux BOOTLOADER全程详解(Arm S.
.Visual Studio 2005中的新DataSe.
.Ruby On Rails与Jdon Framework架.
.VS2005让软件开发回归软件工程.
.图形编程:绝对值函数Abs()的妙用.
.一位老工程师的终告.
.IT项目管理向沟通要效率.
.“实现能力”与“设计能力”.

图形编程:绝对值函数Abs()的妙用

发表日期:2008-3-23


   在学习ANSI C, Pascal, Java等编程语言时,经常会碰到一些具有”对称”性质的图形,要求运用所学的知识编出这些图形的小程序.绝大多数人都会想到通过数学知识,来找出图形具有何种规律,进而得出问题的解.但是,往往找规律,
得颇费一番工夫.在学习ANSI C时,碰到如右所示的一道题,要求打印下面种形式的n * n的方阵:

  当时,同学们都对绞尽脑汁来寻找规律,最后得出了多种解决方案,但最好的一种是用了1个for语句的三层嵌套, 利用覆盖的方法来解决. 事后,我在想,是否存在一种更简单的算法呢?忽然,我发现就此题而言,3正好是5 * 5方阵的轴对称中心.若以它为原点,作出一个xoy平面的垂直坐标,对各个整数点的坐标分析,又发现它们的横坐标与竖坐标各自的它们的横坐标与竖坐标各自的绝对值相加,正好是2.何不用绝对值函数Abs()或者Fabs()来试试?所以我定义了二个整型的变量i和j,分别用来定位整数点的横,竖坐标,初值均为–2,步长为1,控制条件是2,用了2个for语句的嵌套。当满足abs(i)<=abs(j)时,作如下循环:printf(“%3d”,3-abs(i)); 否则,printf(“%3d”,3-abs(j))。没想到在Windows98 Turbo C 环境下调试,通过!好,这又激发了我的思路,能不能给出这种方阵的一般算法呢?

  n * n的方阵 :

  1 1 1 1 1
  1 2 2 2 1
  1 2 3 2 1
  1 2 2 2 1
  1 1 1 1 1

  思来想去,首先必须满足整数n为奇数这一条件,然后看循环控制条件是否满足abs(i)<=abs(j),分别作不同的输出.在Turbo C环境下调试, 琢磨了好一阵子,又通过了。现在给出这种方阵的一般算法如下:

  #include
  #include
  void func(int n) /* n must be an odd number and n must be greater than zero*/
  { int i,j,temp;
  temp=n/2+1;
  for(i=-n/2;i<=n/2;i++)
  {for(j=-n/2;j<=n/2;j++)
  if(abs(i)>=abs(j))
     printf("%3d",temp-abs(i));
   else
     printf("%3d",temp-abs(j));
     printf("\n");
  }
  }

  main()
  { int n;
  printf("\nInput an integer number n:");
  scanf("%d",&n);
  func(n);
  }

  所以,在以后的学习过程中,碰到类似的要求打印具有“对称”性质的图案时,我们可以试着利用Abs()来解答,它能丰富我们编程的思路,达到意想不到的效果。(CSDN)

上一篇:添加聪明角色 让网页动起来 人气:529
下一篇:IBM的MARS加密算法实现(8) 人气:670
浏览全部软件工程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐