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

乎语百科 296 0

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 34
 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次循环都没有使用条件三循环增量,所有的循环都是在其他部位进行计算过程中实现的变量增量。

标签:

留言评论

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~