小标
2018-11-01
来源 :
阅读 1290
评论 0
摘要:本文主要向大家介绍了C/C++知识点之C语言学习第二天,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍了C/C++知识点之C语言学习第二天,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
今天主要学习了,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行代码
语句嵌套if
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行代码。输出结果:
使用注意1
有些人习惯写完一行代码就在后面加个分号";",于是写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行的内容是一个独立的“代码块”:
使用注意2
下面的写法从语法的角度看是对的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) {
}
使用注意3
在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成立,就执行条件1后面大括号{}中的内容:第2~4行
如果条件1不成立,条件2成立,就执行条件2后面大括号{}中的内容:第6~8行
如果条件1、条件2都不成立,条件3成立,就执行条件3后面大括号{}中的内容:第10~12行
第13行的...表示可以有无限个else if
如果所有的条件都不成立,就会执行else后面大括号{}中的内容:第15~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”时,就会执行“语句1”,后面的break表示退出整个switch语句,也就是直接跳到第16行代码;
当整形表达式的值等于“数值2”时,就会执行“语句2”;后面的以此类推。如果在数值1~数值n中,没有一个值等于整型表达式的值,那么就会执行default中的语句n+1。
由于所有的case后面都有个break,因此执行完任意一个case中的语句后,都会直接退出switch语句
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
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 }
由于变量a的值等于第4行case后面的0,因此肯定会执行第5行代码。
由于case 0中没有break语句,就不会退出switch语句,继续往下执行代码。
由于a的值已经等于第4行case的值,接着不会再判断a的值是否等于其他case的值了,直接按顺序执行第7、9行代码。在第10行有个break,接着就会退出switch语句。
输出结果为:
这是一个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 }
当score的范围是90~100,score/10的值为10或9时,就会执行第6行代码,然后退出switch语句;
当score的范围是80~89,score/10的值为8时,就会执行第10行代码,然后退出switch语句;
当score的范围是60~79,score/10的值为7或6时,就会执行第15行代码,然后退出switch语句;
当score的范围并不是60~100,score/10的值并不在6~10范围内时,就会执行第19行代码,然后退出switch语句;
score的值是77,所以score/10的值是7,输出结果:中等
4.在case中定义变量
有时候,我们可能会想在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
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
喜欢 | 1
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号