|
巧用循环实现输入数倒置
在C语言中程序流程控制是实现很多复杂任务的基础,这一点相信学习过C语言的人都知道。但是如何高效率使用for,while,do…while来完成任务可能有些人并没有在意,特别是刚刚开始学习C语言的菜鸟们, 也许根本没意识到要成为一名合格的程序员很多细节是要弄清楚的。
先来看看do…while语句的基本结构: do statement / *statement是单条语句或复合语句*/ while (test); /*其中test是表达式*/
do…while语句在指定的条件test为真时不断的执行语句块statements。循环在每次循环结束后检测条件,不像for和while语句在循环开始前检测条件。do…while循环中的语句块至少执行一次,这是由于检测条件是在每次循环结束后才执行的,所以它最适合在循环中语句块至少需要执行一次的情况下使用。虽然你可以用while语句来完成这样的任务,但是使用do…while会更加简单明了。
看下面的例子,在VC++6.0下调试: int main() { long int i,r; printf("Please input an integer:>\n"); scanf("%d",&i);
do{ r = i % 10; printf("%d",r); }while ((i/=10)!=0); printf("\n");
return 0; } 运行结果 Please input an integer:> 1234567890 0987654321 语句r = i % 10求最后一位的余数,然后用printf输出。在语句的test部分,先执行i /=10 因为i是整形,与10相除的结果取整,然后判断剩下的部分是否为0,为0时表示所有的位转换完毕,循环就结束,如果不为0表示转换没有全部完成,循环就继续执行。由于使用的是do…while循环,不论输入的数是多少都至少执行一次转换,这是因为输入的数至少有一位,而做一次颠倒是不会出问题的比如当输入数0时,转换后输出的仍然是0。
同样也可以用while语句来完成上面的任务,在VC++6.0下调试: int main() { long int i,r; printf("Input an integer\n"); scanf("%d",&i); if(i==0) printf("%d",i); while(i!=0) { r=i%10; printf("%d",r); i/=10; } printf("\n"); return 0; } 其中if语句用来处理i为0时的情况。如果没有这一句,当输入的数为0时 ,将没有数输出,比较一下以上两个例子用do…while语句显然要比用while语句更方便也更自然。
在下期我们将讨论数组使用的一些小技巧,敬请关注。
|