由希尔排序算法实现引起的for循环执行过程及i++和++i异同的提问——打打基础

来源:互联网 发布:商城制作软件 编辑:程序博客网 时间:2024/06/03 22:52

昨天对希尔排序的算法讨论中出现了两个问题,一个是对这个算法实现的不理解;另一个是对for循环的执行过程和i++及++i在其中运用的不理解。

前者主要是大家对c语法有些陌生,将程序分块来看就会容易些!代码及实现过程如下图所示:

4

5

从上图代码很容易看出希尔排序的思想实现主要是在序号1的while循环中完成的。序号1循环控制的是增量序列的变化,序号2控制的是在某个增量值下交换待排序序列的每一组,序号3、4控制的是每组值是应该交换及交换运算!

对于for循环及执行过程如下图所示:

7

而对于其中的i++换成++i及其所放位置在for循环中是一样的!它们不同用法之一是在计算问题中使用时!验证过程如下所示:

#include"stdio.h"void main(){int i;//验证for循环的执行过程和i++及++i的所放位置及用法异同//使用i++,在条件中for(i=0;i<2;i++){printf("%d/n" , i);getchar();}printf("i++ in condition is ok");printf("/n","");getchar();//使用++i,在条件中for(i=0;i<2;++i){printf("%d/n",i);getchar();}printf("++i in condition is ok");printf("/n","");getchar();//使用++i,在循环体内for(i=0;i<2;){printf("%d/n",i);getchar();++i;}printf("++i in loop-body is ok");printf("/n","");getchar();//使用i++,在循环体内for(i=0;i<2;){printf("%d/n",i);getchar();i++;}printf("i++ in loop-body is ok");printf("/n","");getchar();//======================//验证i++和++ii=0;int count=0;count=1+i++;printf("count值是:%d/n",count);printf("i值是:%d/n",i);printf("i++ is ok");printf("/n","");getchar();i=0;count=0;count=++i+1;printf("count值是:%d/n",count);printf("i值是:%d/n",i);printf("++i is ok");getchar();}

 

执行结果如下图所示:

 

1 

通过讨论不仅能够带动参与人积极思考,而且还能学到一个人看书所不能看到学到的知识!

基础还很欠缺,要多思考多讨论多练习……

 

//代码证明补充2010-10-26

i++(即上述运算执行步骤中的3)在循环完之前运行了一次,中途中断的话不会运行i++了

结果:

 

 

 

 

原创粉丝点击