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

------- 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


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

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

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.当一个变量与常量进行==或者!=时,通常把常量写在前面。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");

}

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

    推荐阅读