C语言下for循环的一点技巧总结

for循环是普遍应用与各种计算机语言的一种循环方式。

一般情况下,

for循环规则:for(条件一;条件二;条件三)

条件一为满足条件,也就是条件一为1时,进入这个for循环。条件二为循环条件,也就是说当条件二不满足时继续循环。条件三为循环递增条件,里面罗列循环节递增的方式。for循环在实际运行的时候是:首先判断条件一是否为1,为1时进入循环内的下一步,为0跳过整个for循环。其次判断条件二是否为1,为1时进入否循环下属的({}包围部分的内容)循环节,不论循环节语句是否存在,运行完毕后运行条件三,然后再次运行条件二,一直到条件二为0.

技巧:1)三个都可以省略,只要保证括号()里有足够两个分号;就可以。省略默认条件是1,继续执行。极端条件下的语句for(;;)等同于while(1),为无条件进入循环。

          2)条件一,不但可以用于设定循环变量的初始值,也可以用于设定循环开始前的变量的初始值。比如:i=m=0,j=n=1作为条件一,这样就为开始进入循环设定了4个变量,而其中的循环变量只是其中某一个,或者几个。

          3)条件二,是退出循环的条件。条件二正常情况下是一个判断条件,当判断结果为1,或者说符合要求时,继续循环。今天在网友帮助下,认识到当条件二不是一个判断,而是一个返回值的时候,如果返回值是0,同样会退出循环。这样就提供了某些情况下的特殊退出方法。

举例:

 1 #include<stdio.h>
 2 
3
4
5 int main() 6 7 { 8 9 char ch , a[1024] ; 10 11 int i , j , k , m , n ; 12 13 14 15 printf("请输入一个英文句子:") ; 16 17 for(i = m = 0 , j = n = 1 ; (ch = getchar()) != '\n' ;) { 18 19 if(ch != ' ') { 20 21 if(j == 1) m ++ ; 22 23 a[i ++] = ch ; 24 25 a[i] = '\0' ; 26 27 j ++ ; 28 29 if(j > n) n = j ; 30 31 } else { 32 33 if(j > 1) { // 只有字符串之间的单个空格有效 34 35 j = 1 ; 36 37 i ++ ; // 保护上个字符串末尾的 '\0' 38 39 } 40 41 } 42 43 } 44 45 char result[m][n] ; 46 47 for(i = k = 0 ; i < m ; i ++) for(j = 0 ; (result[i][j ++] = a[k ++]) ;) ; // 这里绝不可以只是简单地按照每个字符串 n 个字符进行分割和复制 48 49 printf("分割结果已存放到result[%d][%d]的二维数组中。。。。。\n" , m , n) ; 50 51 printf("现在依次打印每个单词:\n") ; 52 53 for(k = 0 ; k < m ; k ++) printf("%s\n" , result[k]) ; 54 55 }

 

上面代码中第47行,内循环的条件二是一个赋值语句:result[i][j++]=a[k++],当被如遇的值a[k]=’\0’的时候,会退出循环。

        4)在上一个代码举例里,使用4次for循环,其中2次循环都没有使用条件三循环增量,所有的循环都是在其他部位进行计算过程中实现的变量增量。

Tags: