控制流

1.1 else-if语句:

    if(表达式)

       语句1;

    else 

       语句2;

     其中else部分是可选的,可有可无。该语句进行执行时首先计算表达式的值,如果结果为真,则执行   语句1,如果为假,并且该语句含有else部分,则执行语句2。

     其次,if语句后面只能有一个语句,如果要使用多条语句(复合语句),必须使用{};使用大括号有   百利而无一害。当然if语句也可以有多种形式,例如

    if(表达式1)

       语句1;

    else if(表达式2)

       语句2;

    else if(表达式3)

       语句3;

        ……

     else

       语句;

  其中的表达式将进行一次求职值,一但表达式为真则执行相对应语句,并终止整个语句的执行。

1.2 举例说明if语句的用法

   折半查找 ;

    在折半查找时,首先将输入值 x与数组v的中间 元素进行比较。如果x小于中间元素的值,则在该数组  的前半部分查找;否则,在该数组的后半部分进行查找。在这两种情况下,下一步都是将X与所选部分的    中间元素进行比较。这个过程一直进行下去,直到找到指定的值或查找范围为空。

2.2 switch语句;

    多路判定语句,他测试表达式是否与一些常量整数值中的某一个值匹配,并执行相应的分支动作。

  switch(表达式)

  { 

case 常量表达式:语句序列

case 常量表达式:语句序列

……

default:语句序列

  }

     每一个分支都由一个或多个整数值常量或常量表达式标记,如果某个分支与表达式的值匹配,则从该   分支开始执行。如果所有的表达式都不能匹配成功,则执行default分支或者不执行任何动作。

2.2 统计各个数字,空白符及其他所有字符出现的次数;

 

#include 
#include 
int main() { int letter = 0, digital = 0, space = 0, other = 0, i; char c; printf("请输入一些字符:");/*这里删除scanf("%c",&c); */ while ((c = getchar()) != '\n') { if (c >= '0'&&c <= '9') i = 0; //数字 else if ((c >= 'a'&&c <= 'z') || (c >= 'A'&&c <= 'Z')) i = 1;        //字母 else if (c == ' ') i = 2;      //空格,这里用== else if (32
<48 || 57
<65 || 90
<97 || 122
<127) i = 3;      //其他字符 switch (i) { case 0:digital++; break; case 1:letter++; break; case 2:space++; break; case 3:other++; break; } } printf("数字有%d个,字母有%d个,空格有%d个,其他字符有%d个。\n", digital, letter,  space, other); system("pause"); return 0;}

  switch语句中,case的作用只是一个标号,因此某个分支执行结束之后程序将进入下一个分支继续执行,除非在程序中显式的跳转。使用break或return语句;break可以强制控制从while,for,do循环语句中跳出。并且在正常情况下为了防止直接进入下一个分支执行,每个分支后必须以一个break语句结束。尽量减少从一个分支直接进入下一个分支执行的用法。最后在default后加上break降低错误的可能性。

3.1 while循环与for循环;

  while(表达式)

        语句;

  

  for(循环语句);

  for(表达式1;表达式2;表达式3)

  {

     语句;

  }

   for循环语句中的表达式都可以省略,但是分号不能省略,可以有形式

       for(;;)

       {

          ……

       };是一个无线循环语句,借助break,return语句才能结束;

3.2.1 编写atoi函数将字符串数字转换为对应的数字;

#include  
#include 
int my_atoi(char s[10]){ int ret = 0; int flag = 1;    char *p = s; if (*p == '-') { flag = -1; } if (*p == '+' || *p == '-') { p++; } while (*p != '\0') { if (*p <= '9' && *p >= '0' && *p !=' ') { ret = ret * 10 + *p - '0'; p++; } else p++; } return flag*ret;}int main(){ char input[10]; gets(input); int ret = my_atoi(input); printf("%d\n", ret); system("pause"); return 0;}

3.2.2 打印输出9*9乘法口诀表

#include 
int  main(){ int i, j; for (i = 1; i<10; i++) { for (j = 1; j <= i; j++) { printf("%d*%d=%2d ", i, j, i*j); } printf("\n"); } system("pause"); return 0;}

   当然,while,for都可以进行嵌套循环,两者也可以放在一起进行嵌套循环;

4.1 do-while循环;

     该循环在循环体执行一次后测试终止条件,循环体至少执行一次。

    语法形式:

     do

        语句

     while(表达式);

5.1 break语句与continue语句;

    break语句课用于从switch,佛如,do-while等循环中提前退出;

    continue语句与break是相关联的,continue适用于for,while,do-while语句开始下一次循环的执行。在while,do-while语句中,continue语句的执行意味着立即执行测试部分;在for语句中则意味着使控制转移到递增循环变量部分。continue只用于循环语句,不用于switch语句。

   例如处理数组a中的非负元素,则跳过

     

  for(i0;i
<0)          continue;          ……   }

6.1 goto语句 ;

     goto语句可以一次跳出2层或多层循环,这种情况下使用goto可以达到目的;例如下面的程序:

     

for(……){     for(……)     {         ……         if(disaster)            goto error;      } error:}