您的位置:首页 > 编程语言 > C语言/C++

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

2015-11-02 16:11 274 查看
------- 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{
 
      如果表达式1,2,3都为假,会执行此处代码块
    }
 
 5.if语句的使用注意
  1)if(a==3); 这是空语句,什么也没有干。
  2)如果if之后的代码块,只有一句话,则可以省略大括号。也就是说,if条件语句如果没有大括号,只会影响紧挨着if的一句话。
  3)永真式和永假性 
    if(1)大括号中永远执行
    if(0)大括号中永远不会执行
  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).表达式类型:可以放一个整型的变量(switch(num))  
                          可以放一个整型常量(switch(10))
                          可以放一个返回值是整型的表达式(switch(5+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;
              .....
 
  }当前循环
ca23
:当条件满足的时候,再去执行循环体。
 
        2)使用方法:while中的条件一开始就不成立,那么循环体中的语句永远不会被执行。条件成立,就会执行大括号里面的内容。然后再次判断条件,重复上述过程,直到条件不成立就结束while循环。
      3)死循环:就是一直都执行循环体中的代码,不会退出。
      4)产生随机数:导入头文件stdlib.h,然后调用随机函数,产生随机数。
                   arc4rand_uniform(n-m+1)+m
 
      5)使用注意
 a.死循环
   while(-1){
 printf{"死循环"};
 }:只要条件不是0,就会一直执行下去,因为任何数值都有真假性,除了0,不管正负数都是真。
 b.当一个变量与常量进行==或者!=时,通常把常量写在前面。while(3==num){

 }
c.while后面只有一条语句,{}可以省略,但是while()后面不可以直接加分号;要是加了,就是死循环,下面的都不执行了。
d.while大括号{}中定义的变量不可以在代码块外边访问。
e.作用域的紊乱。如同if
f.while(1)简单死循环
 
2.do...while 循环
 do{
 语句1;
 语句2;
 ....
 }while(条件);直到型循环:先执行循环体,然后判断条件,条件成立,在执行循环体中的语句,在判断条件,重复上述,直到条件为假就结束。
 do...while特点:不管条件是否成立,循环体中的语句至少会被执行一遍。
              
语句结束之后,必须有“;”
 
 while和do...while的对比
 a.当循环控制条件第一次的判断不为假时,while和do...while循环体执行的次数相同。
 b.当循环控制条件第一次的判断为假时,while循环的循环体执行0次。do...while循环体执行1次。
 
3.for循环
1)格式:for(表达式1;表达式2;表达式3){
    语句;
 }
2)构成循环的条件:控制条件 循环体 能够让控制条件为假的操作
3)执行流程:先求解表达式1定义一个变量
          在判断表达式2,为真(非0)则执行{}里面的内容,然后在执行表达式3,若为假,结束循环,
          再从表达式2执行起,为真(非0)则执行{}里面的内容,然后在执行表达式3,若为假,结束循环。
注意:其中表达式1只会执行一次,当条件不满足时,循环就结束。
 
4)for循环的其他形式:省略形式
 第一种
 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");
        
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: