C语言学习笔记(二)——流程控制【重点】

来源:互联网 发布:bootcamp助理下载 mac 编辑:程序博客网 时间:2024/04/28 03:59

 第二章  流程控制【重点】

 




If的用法


if(表达式):对真假的处理


注意:if后括号内的表达式结果只有两种,truefalse,为布尔型,即成立或不成立。


if默认的只能控制一个语句的执行


如果想控制多个语句的执行或不执行,就必须用{}括起来


if (表达式)


{


  语句A


  语句B


}


 


注意elseif的对应,elseif的对应是从中向两头的对应。


即:


if ()


    if()


             if()


             else


    else


else


 


else只能对应上面离它最近的一个if语句


如:


    if(1)


             if(2)


                      3;


             else          //else对应的是if(2)语句。且此段代码整体上是一个语句,因为if...else...是一个语句。


                      4;


 


    if(1)


    {


             if(2)


                      printf("哈哈!\n");


    }


    else


             printf("呵呵!\n"); //要想else对应第一个if,则必须在本应与其对应的if语句上加大括号,使其单独成句。


 


if... else if... else语句即便有多个表达式成立,也只会执行第一个成立的表达式


if... else if... else语句必须相连在一起,中间不能用任何语句隔开。


 


floatdouble都不能保证可以精确地存储一个小数。


循环中的自增(自减)变量(更新变量)不能定义为浮点数,因为浮点数可能是一个近似值,不能被准确存储。


如:


        floatx = 66.6;


 


        printf("%f\n",x);


输出结果为:x = 66.599998


 


试题:看一个浮点数是否为零


float i =0;


 


        /*if(0 == 0)


                  printf("是零!\n");


        else


                  printf("不是零!\n"); //此方法错误!*/


        


        if(|i-0.000001| <= 0.000001) //正确!


                  printf("是零!\n");


        else


                  printf("不是零!\n");


 


# include <stdio.h>


 


int main(void)


{


        floati = 5.321;


 


        if(i == 5.321)


                  printf("\n");


        else


                  printf("不是\n");


 


        return0;


}


 


/*


结果为不是,浮点数实质上存储的是一个近似值!


*/


 


循环


循环中的执行顺序一定要清楚


for (i=1;i<=100;++i) //for循环控制sum = sum + i;语句,执行顺序:1. i=1; 2. i<=100; 3. sum = sum+ i; 4. ++i;


sum = sum + i;              ++i标志着一次循环结束) 5. i<=100


 


do...while不等价于 while...for...其最大区别在于:do...while至少会执行一次。


do...while常用于人机交互。


 


while可以用于无限循环,用break来终止。


如:    while(true)


    {


             printf("我爱你!\n"); //只能通过加入if语句,break,来终止此循环。


    }


 


for (i=0, j=6; i<j; ++i, --j) //这样写也可以,分号为三段分隔,逗号为内部分隔,逗号运算符,不算作一个语句。但这样写有些麻烦,可以使用while


i = 0;


j = 6


while (i < j)


{


    ...;


    ++i;


    --j;


}


for循环与while循环可以相互转换:


for循环的逻辑性更强,更不容易出错,推荐多使用for循环。


    for(1;2;3)


             A;


等价于:


    1;


    while(2)


    {


             A;


             3;


    }


 


breakcontinue


 


break:用于终止并跳出循环或switch语句,不能直接用于if语句,除非if语句是循环或switch语句中的一部分。


虽然breakif内部语句,但break用于终止for循环语句,而不是if语句。同理,continue也只会对离它最近的循环生效。


 


    注意:1.for (1; 2; 3) //breakcontinue的区别。


                     {


                                if(表达式)


                                         break;//执行break后会跳出for循环去执行printf语句。


                                if(表达式)


                                         continue; //执行continue后会继续下次循环,执行语句3


                     }


                     printf("");


 


         2.


                     do


                     {


                      if(表达式)


                     {


                                continue;//当执行continue时,程序会跳到while (表达式),去执行下一次循环。


                     }


                      }while(表达式)


 


3.


                     int x = 1;


                     int y = 0;


                     int a = 0;


                     int b = 0;


 


                     switch (x) //第一个switch


                     {


                               case 1:


                                        switch (y) //第二个switch


                               {


                                        case 0:


                                                 a++;


                                                 break; //此处break终止的是离它最近的switch,即第二个switch,输出结果为a = 1 b =        


                                        case 1:         100;若终止的是第一个switch,则会输出a = 1 b = 0;


                                                 b++;


                                                  break;


                               }


                               b = 100;


                               break;


                               case 2:


                                        a++;


                                        b++;


                                        break;


                     }


 


                      printf("a = %d b =%d\n", a, b);


 


 1  for(i=0;i<3;++i)


    {


             if(3>2)


                      break;         //虽然breakif内部语句,但此处break用于终止for循环语句,而不是if语句。下


                      printf("哈哈!\n"); 面的printf语句不会再执行,输出为空。


    }


 


 2     for(i=0; i<3; ++i) //多个for循环的嵌套。


    {


             for(j=1; j<4; ++j)


                      break;      //输出结果为三个“呵呵!”,即在多重循环中,break只能终止它所在语句中离它最近的一个循环。


                      printf("呵呵!\n");  同理,在多重switch语句中,break也只能终止它所在语句中离它最近的一个switch语句。


    }


 


注意:break终止的是它所在的语句的循环或switch语句,而不可能终止与它并列的循环或switch语句。


如:


    for(1; 2; 3)


    {


             while(4;)


                      5;


             break;//break终止的是它所属于的for循环,而不是与它并列的while循环,虽然while离它近。


    }


 


switch...case...default语句不同于if...else if...else语句。


 


    switch...case语句中,case只起标记作用,以确定程序在哪开始执行,不起条件判断选择作用。break用于终止switch语句。如果



不加break,将会继续执行下面的语句。


    而在if语句中,即使有多个if语句同时成立,也只会执行第一个成立的语句,剩下的成立语句不会执行。


 


switch格式:


             switch(形参或表达式)           //后跟参数值或表达式,用于找到入口。


                      case参数值或表达式:   //注意一定要加冒号“:” case只起标记作用,不起条件判断选择作用。


                                语句A 


                                break //break用于终止switch语句。如果不加break,将会继续执行下面的语句。


                      case参数值或表达式:


                                语句B


                                break


                      default        //default相当于else,用于前面情况不符合时,执行此语句。


                                语句C  注意:default一定要写上,虽不会出现语法错误,但会以为你忘掉了。


                                break


注意:switch语句是选择,不是循环,不能出现continue,除非switchforwhile循环中的一部分。


 


    printf("您想继续吗?(Y/N\n");


             scanf("%c", &ch);  //ch前必须加一空格(空白符问题!)


    }while('y' == ch || 'Y' == ch);


continue:用于终止本次循环余下的语句,转去判断是否需要执行下次循环,即跳过本次循环。


    例:        for(i=0; i<3; i++)


    {


             A;


             B;


             continue;//continue会将本次循环余下语句C;D;跳过,去执行i++,继续下次循环。


             C;


             D;    


    }


 


    j= 0


    while(j<3)


    {


             A;


             B;


             j++; //更新部分j++不会被跳过,否则将成为死循环。


             continue;//continue会将本次循环余下语句C;D;跳过,去执行i++,继续下次循环。


             C;


             D;


    }


 


应用:        inti, j;


            char ch;


    


            printf("请输入i的值:");


            scanf("%d", &i);


            printf("i = %d\n", i);

    

            while ((ch=getchar()) != '\n') //i后的非法字符进行处理。 getchar()是取字符函数,'\n'即是回车。


                     continue;

 

            printf("请输入j的值:");


            scanf("%d", &j);


            printf("j = %d\n", j);





0 0
原创粉丝点击