黑马程序员———C语言 分支语句和循环语句

来源:互联网 发布:旅游数据统计方式 编辑:程序博客网 时间:2024/06/03 13:06

------- Java培训、Android培训、iOS培训、.Net培训 、期待与您交流 --------


 一 分支语句:

 1.if语句

            格式:if(表达式,常量,变量){

                           语句块1;

  }

      原理:先计算小括号中表达式的值,为真(1)会执行大括号中的语句,为假(0)不会执行大括号中的语句。

 2.if...else...分支语句

             格式:if(表达式){

               表达式为真,执行此处代码

       }else{

                表达式为假,执行此处代码

     }

      注:不管表达式为真为假,都会执行一个分支。

 

3.if语句的嵌套

 

           格式:if(表达式1{

                 表达式1为真,执行此处代码


       }else{

                表达式1为假,执行此处代码

             if(表达式2{

 

                表达式1为假,表达式2为真,执行语句块2

         }else{

 

                表达式1为假,表达式2为假,执行语句块3

       }

 

       }


 4.if语句的高级用法

      if(表达式1){

 

      如果表达式1为真,则执行语句块1,后面的语句块都不执行了

 

      }else if(表达式2){

 

      如果表达式1为假,表达式2为真,则执行语句块2,后面的语句块都不执行了

 

      }else if(表达式3){

 

      如果表达式1,表达式2为假,表达式3为真,则执行语句块3,后面的语句块都不执行了

 

      }else{

 

      如果表达式123都为假,会执行此处代码块

    }

 

 5.if语句的使用注意

  1)if(a==3); 这是空语句,什么也没有干。

  2)如果if之后的代码块,只有一句话,则可以省略大括号。也就是说,if条件语句如果没有大括号,只会影响紧挨着if的一句话。

  3)永真式和永假性 

    if1)大括号中永远执行

    if0)大括号中永远不会执行

  4)if语句结合return语句 在一个函数中,return之后的语句都不会执行。

    int a=3;

    if(a>3)

    return 0;

    printf("a>3\n");此处虽然位于return语句之后,但然会执行,因为a>3是假的,相当于没有return这句话。

 

  5)if的作用域

 if(a==3){

 int num=10;

 }

 printf("%d",num);//此处会报错,因为是在代码块内部定义的变量


 6)作用域的紊乱

 if(a==3)

 int num=10;//定义了一个num,什么也没有做

 printf("%d",num);


 二 switch语句:也就是开关语句

1.格式:switch(表达式){

                case 常量表达式1:语句1;

                case 常量表达式2:语句2;

                ...

                case 常量表达式n:语句n;

                default:语句n+1

 }

    语义:计算表达式的值,逐个与后面常量表达式的值比较,当表达式的值与常量表达式的值相等,执行其后语句,不在进行判断,继续执行后面所有case后的语句,如果表达式的值与常量表达式的值都不相等,则执行后default的语句。

 

2.case语句的穿透:某个case语句执行完成后,并没有结束,而直接向下执行其他的case语句,这就是case的穿透。

  如何预防?在每一个case语句之后加上一个:break;作用是结束switch语句。

 

3.if语句和switch语句的选择

  分支比较多而且无穷尽或者进行大量列举时用if,分支数量不多,但是用if代码量比较大时,用switch。也可以嵌套使用。

 

 4.使用注意:

1).表达式类型:可以放一个整型的变量(switchnum))  

                          可以放一个整型常量(switch10))

                          可以放一个返回值是整型的表达式(switch5+5),num=5+5

                          可以放一个转换为int类型的表达式(switch'a')或者switch'a')+'b'))其中字符可以转换成ascii码值。

2).case语句可以任意写多句,可加{},也可不加{}

3).break语句可选择的,可以加,也可以不加。


 5.case语句的注意事项:

1).格式:case 常量表达式:空格和表达式不能省略。

2).可以是常量 case 10:

3).只能是常量表达式 case 5+5:

4).default的位置可以任意放

5).case的传统也适用于default

6).如果default语句放到switch语句的最后,可以不加break,但是加在中间,不加break,也会发生穿透。所以必须加上break.

7).case后面不能是实数

8).case语句之后,默认的第一句话不能定义变量,非要定义,严格加上{},去掉{}的话,在第二句定义也是可以的

9).编译器的bug


三 循环语句

循环结构:在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定条件叫循环条件,反复执行的程序段称为循环体。简单的来说,循环是一次又一次的执行相同的代码块。

分类:while  do-while  for

循环的构成:循环控制条件,循环体,能够让循环结束的语句(递增,递减,真,假)。

 

 1.while循环

       1) 格式:while(条件){

              语句1;

              语句2;

              .....

 

  }当前循环:当条件满足的时候,再去执行循环体。

 

        2)使用方法:while中的条件一开始就不成立,那么循环体中的语句永远不会被执行。条件成立,就会执行大括号里面的内容。然后再次判断条件,重复上述过程,直到条件不成立就结束while循环。

      3)死循环:就是一直都执行循环体中的代码,不会退出。

      4)产生随机数:导入头文件stdlib.h,然后调用随机函数,产生随机数。

                   arc4rand_uniform(n-m+1)+m

 

      5)使用注意

 a.死循环

   while-1{

 printf{"死循环"};

 }:只要条件不是0,就会一直执行下去,因为任何数值都有真假性,除了0,不管正负数都是真。

 b.当一个变量与常量进行==或者!=时,通常把常量写在前面。while3==num{


 }

c.while后面只有一条语句,{}可以省略,但是while()后面不可以直接加分号;要是加了,就是死循环,下面的都不执行了。

d.while大括号{}中定义的变量不可以在代码块外边访问。

e.作用域的紊乱。如同if

f.while(1)简单死循环

 

2.do...while 循环

 do{

 语句1

 语句2

 ....

 }while(条件);直到型循环:先执行循环体,然后判断条件,条件成立,在执行循环体中的语句,在判断条件,重复上述,直到条件为假就结束。

 do...while特点:不管条件是否成立,循环体中的语句至少会被执行一遍。

               语句结束之后,必须有“;”

 

 whiledo...while的对比

 a.当循环控制条件第一次的判断不为假时,whiledo...while循环体执行的次数相同。

 b.当循环控制条件第一次的判断为假时,while循环的循环体执行0次。do...while循环体执行1次。

 

3.for循环

1)格式:for(表达式1;表达式2;表达式3){

    语句;

 }

2)构成循环的条件:控制条件 循环体 能够让控制条件为假的操作

3)执行流程:先求解表达式1定义一个变量

          在判断表达式2,为真(非0)则执行{}里面的内容,然后在执行表达式3,若为假,结束循环,

          再从表达式2执行起,为真(非0)则执行{}里面的内容,然后在执行表达式3,若为假,结束循环。

注意:其中表达式1只会执行一次,当条件不满足时,循环就结束。

 

4for循环的其他形式:省略形式

 第一种

 int i=0

 for(;i<5;i++){

 printf("");

 }

 第二种

 int i=0

 for(;i<5;){

 printf("");

 i++;

 }

 第三种

 int i=0

 for(;;){

 if(i<5){

 printf("");

 i++;

 }else{

 break;

 }

 

 }

 

5)for循环可以嵌套嵌套两层,如以下打印图形:

for (int i=0; i<5; i++) {

        for (int j=0; j<5; j++) {

    

            printf("*\t");

        }

        

        printf("\n");

        

    }



0 0
原创粉丝点击