标签:
今天主要学习了,if语言和switch语句,下面直接进入正题。
C语言为我们提供了3种流程控制结构,分别为:顺序结构,选择结构,循环结构。
顺序结构:默认的流程结构。按照书写顺序执行每一条语句。
选择结构:对给定的条件进行判断,根据不同的结果执行不同的代码断。
循环结构:对给定条件成立的情况下,反复执行某一代码断。
3种流程图如下:
一、顺序结构
1 int main(){ 2 3 printf("hello world!\n"); 4 5 printf("I like iOS!\n"); 6 7 return 0; 8 9 }
以上程序的运行结果如下:
二、选择结构
C语言中选择结构的实现方式有两种:if语句和switch语句。先来看下if语句的使用,而if语句的形式是有好多种的。
先来看看if语句最简单的形式
if ( 条件 ) { 语句1; 语句2; .... }
如果if右边小括号()中的条件成立,也就是为“真”时,就会执行第2~6行大括号{}中的语句;如果条件为假,就不执行大括号{}中的语句。这里的if是关键字。
例如:
1 int main(){ 2 3 int a = 7; 4 5 if ( a ){ 6 printf("条件a成立\n"); 7 printf("a的值为真"); 8 } 9 10 }
C语言规定所有非0值都为“真”,而a的值是7,因此第3行的条件是成立的,接着就会执行第5、6行代码。输出结果如下:
条件a成立
a的值为真
如果将a的值改为0,那么第3行的条件就不成立,就不会执行第5、6行代码
1 int main(){ 2 3 int a = 7; 4 5 if ( a > 0 ){ 6 7 printf("a的值大于0\n"); 8 9 if ( a<9 ){ 10 11 printf("a的值小于9"); 12 } 13 } 14 }
第3行的a>0是成立的,因此会按顺序执行第4~11大括号中的代码。执行到第7行的时候,a<9也是成立的,因此会执行第9行代码。输出结果:
有些人习惯写完一行代码就在后面加个分号";",于是写if语句的时候,他们可能会这样写:
1 int main(){ 2 3 int a = 6; 4 if ( a>8 ); 5 { 6 printf("a大于8"); 7 } 8 }
如果第4行尾部的分号,其实一个分号也是一条语句,这个叫做“空语句”。第4行的a>8不成立,所以不会执行后面的“空语句”。而后面的大括号{}跟if语句是没有联系的,因此会正常执行,于是会看到输出:
a大于8
所以要非常小心,千万不要在if的小括号后面添加分号。
第5~7行的内容是一个独立的“代码块”:
下面的写法从语法的角度看是对的0:
1 int a = 10; 2 3 if (a = 0) { 4 printf("条件成立"); 5 } else { 6 printf("条件不成立"); 7 }
上述代码是完全合理的,编译器不会报错,只是个警告而已。因为a为0,所以为"假",输出结果是:"条件不成立"
这里隐藏着很大的陷阱在:
假设你本来是想判断a是否为0,那么本应该写if (a == 0),若你误写成了if (a = 0),那将是一件非常可怕的事情,因为编译器又不报错,这样的BUG就难找了。因此,像a==0这样的表达式,最好写成0==a,若你误写成0=a,编译器会直接报错的。
// 不推荐 if (a == 0) { } // 推荐 if (0 == a) { }
在C语言中,可以不保存关系运算的结果。因此,下面的写法是合法的:
1 int a = 10; 2 a > 10; 3 a == 0;
这里又是一个陷阱,假设你的本意是想给a赋值为0,那么本应该写a = 0; ,若你误写成a == 0; ,那将又是一个非常难找的BUG,因为编译器根本不会报错。在1993年的时候,这个BUG差点让一桩价值2000万美元的硬件产品生意告吹,因为如果这个BUG不解决,这个产品就没办法正常使用。
if还可以跟关键字else一起使用
1 if ( 条件 ) 2 { 3 语句1; 4 } 5 else 6 { 7 语句2; 8 }
如果条件成立,就会执行if后面大括号{}中的语句;如果条件不成立,就会执行else后面大括号{}中的语句。总之,两个大括号中一定会有1个被执行,而且只能执行的1个。
为了减少代码行数,你也可以写成下面的格式:
if (条件){ 语句1; } else { 语句2; }
当然,也可以省略大括号,写成下面的格式:
1 if (条件) 2 语句1; 3 else 4 语句2;
如果条件成立,就执行if后面的第1条语句;如果条件不成立,就执行else后面的第1条语句。但还是不建议省略大括号{}。
例如
1 int a = 10; 2 if ( a==0 ) { 3 printf("a等于0"); 4 } else { 5 printf("a不等于0"); 6 }
第2行的a==0不成立,所以会执行第5行代码,输出结果:
a不等于0
if和else还有一种比较复杂的用法
1 if ( 条件1 ) 2 { 3 语句1; 4 } 5 else if ( 条件2 ) 6 { 7 语句2; 8 } 9 else if ( 条件3 ) 10 { 11 语句3; 12 } 13 ... 14 else 15 { 16 其他语句; 17 }
注意:这么多大括号中,只有1个大括号内的代码会被执行。跟之前一样,所有的大括号都可以省略,但是不建议省略。必要的时候,最后面的else那一段(第14~17行)是可以省略的。
1 int main(){ 2 3 int a = 10; 4 if ( a==0 ) { 5 printf("a等于0"); 6 } else if( a>0 ) { 7 printf("a大于0"); 8 } else { 9 printf("a小于0"); 10 } 11 return 0; 12 }
第4行中的a==0不成立,接着会检查第6行。第6行的a>0成立,因此会执行第7行代码。输出结果:
a大于0
如果a的值是负数,那么第4、6行的条件都不成立,于是就会执行第9行代码。
选择结构2-switch语句
1 switch(整型表达式) 2 { 3 case 数值1: 4 语句1; 5 break; 6 case 数值2: 7 语句2; 8 break; 9 ... ... 10 case 数值n: 11 语句n; 12 break; 13 default : 14 语句n+1; 15 break; 16 }
1 int main(){ 2 3 int inputNum = 4; 4 5 switch (inputNum) { 6 case 1: 7 printf("Spring\n"); 8 break; 9 case 2: 10 printf("summer\n"); 11 break; 12 case 3: 13 printf("autumn\n"); 14 break; 15 case 4: 16 printf("winter\n"); 17 break; 18 19 default: 20 break; 21 } 22 }
因为inputNum的值刚好等于第15行case后面的4,所以会执行第16行代码,输出结果:
winter
break关键字的作用是退出整个switch语句。默认的格式中,每个case后面都有个break,因此执行完case中的语句后,就会退出switch语句。
1> 如果某个case后面没有break,意味着执行完这个case中的语句后,会按顺序执行后面所有case和default中的语句,直到遇到break为止
1 int a = 0; 2 3 switch (a) { 4 case 0: 5 printf("这是一个0\n"); 6 case 5: 7 printf("这是一个5\n"); 8 case 10: 9 printf("这是一个10\n"); 10 break; 11 default: 12 printf("什么也不是\n"); 13 break; 14 }
这是一个0 这是一个5
这是一个10
如果把a的值改为5,输出结果为:
这是一个5 这是一个10
2> 在某些时候,我们确实没有必要在每一个case后面添加break。下面举一个例子:判断分数的优良中差等级(100分满分)。
1 int score = 77; 2 3 switch (score/10) { 4 case 10: 5 case 9: 6 printf("优秀"); 7 break; 8 9 case 8: 10 printf("良好"); 11 break; 12 13 case 7: 14 case 6: 15 printf("中等"); 16 break; 17 18 default: 19 printf("差劲"); 20 break; 21 }
有时候,我们可能会想在case中定义一些变量,这个时候,就必须用大括号{}括住case中的所有语句。
1 int a = 10; 2 int b = 4; 3 4 char op = ‘-‘; 5 6 switch (op) 7 { 8 case ‘+‘: 9 { 10 int sum = a + b; 11 printf("a+b=%d\n", sum); 12 break; 13 } 14 15 case ‘-‘: 16 { 17 int minus = a - b; 18 printf("a-b=%d\n", minus); 19 break; 20 } 21 22 default: 23 printf("不能识别的符号"); 24 break; 25 }
在第10、17分别定义两个变量。输出结果:
a-b=6
标签:
原文地址:http://www.cnblogs.com/wlios/p/4474089.html