目录
前言
分支合循环首先就是要有良好的代码风格,缩进得当,要不然真的很乱很不好理解,而且容易出现错误。在练习代码的时候或者平时写代码的时候还是要注意代码风格的问题。
1.什么是语句?
在进行学习本篇之前要先了解一下语句的概念
C语言语句可以分为以下五类:
1.表达式语句
2.函数调用语句
3.控制语句
4.复合语句
5.空语句
本次学习的就是控制语句。
控制语句 用于控制程序的执行流程,以实现程序的各种结构方式,(C语言支持三种结构:顺序结构,选择结构,循环结构),他们由特定的语句定义符组成,C语言共有九种控制语句。
可以分为以下三类:
1.条件判断句也叫分支语句;if语句、switch语句;
2.循环执行语句:do while语句、while语句、for语句;
3.转向语句:break语句、goto语句、continue语句、return语句。
C语言是一门结构化的程序设计语言,C语言可以支持三种结构:顺序结构,选择结构,循环结构,生活中所有的事情都可以用这三种结构表示出来。顾名思义顺序结构就是按照顺序从上到下依次运行程序,选择结构就是程序运行的时候可以有选择,循环结构就是到达某个条件或者开始就开始循环,反复执行程序。
2.分支语句(选择语句)
以下就是一个抽象的分支语句逻辑:
就像你出生于罗马,但你没有选择好好学习,将来就会因为某些原因破产,但你要是选择好好学习,不管你出没出生在罗马,你都能有一个独一无二的美好的未来。
2.1 if 语句
//单分支
if(表达式)
语句1:
单分支语句 ,表达式要是成立(为真)就执行语句1。
//双分支
if(表达式)
语句1:
else
语句2;
这就是双分支语句,表达式要是成立(为真)就执行语句1,反之,就执行语句2 。
//多分支
if(表达式1)
语句1:
else if(表达式2)
语句2;
else
语句3;
这是多分支语句,表达式1要是成立(为真)就执行语句1,如果表达式2成立,就执行语句2,如果都不成立,就执行语句3,三选一的方式。
我们可以通过一个年龄代码块来判断:
int mian( )
{
int age =0;
scanf("%d",&age);
if(age>=18)
printf("成年\n"); //单分支
if(age>=18)
printf("成年\n");
else
printf("未成年\n"); //双分支
if(age<16) //多分支
printf("少年\n");
else if(age>=16 && age<30)
printf("青年\n");
else if(age>=30 && age<40)
printf("中年\n");
else if(age>=40 && age<56)
printf("壮年\n");
else if(age>=56 && age<80)
printf("老年\n");
else
printf("老寿星\n");
}
上述代码就分别表示了单、双、多分支结构的if-else语句,同时if-else是可以进行嵌套的。
如果一个if-else语句内执行多个语句,那么就需要加上一个大括号,语句放在同一个大括号(代码块)里面:
if(表达式)
{
语句1;
语句2;
}
如果不加上大括号那么久只能运行一句,因为 if 在C语言里面默认是只能运行一个语句的,同时不管if成不成立,语句2都会执行,因为if不包括语句2,同时代码是顺序执行的(一句一句执行),所以语句2一定会执行到。
2.2if书写格式形式的对比
在这里出现一串代码,可以先读完之后自己判断一下输出的到底是什么:
int main( )
{
int a =0;
int b =0;
if(a == 1)
if(b == 2)
printf("123\n");
else
printf("456\n");
return 0;
}
有可能会说这明明输出的是123,我在看的时候也错了,那么是456吗,实际上,什么也不输出,这段代码将其复制到编译器上就会发现它的会书写格式就会发生变化:
int main( )
{
int a =0;
int b =0;
if(a == 1)
if(b == 2)
printf("123\n");
else
printf("456\n");
return 0;
}
可见代码风格的重要,哪里缩进,哪里换行,都非常的重要。其中 else 是与最近的 if 进行匹配(当没有括号限制的时候)。
在这里再给出两段代码来进行分析:
//代码1
if(condition){
return x;
}
return y;
//代码2
if(condition)
{
return x;
}
else
{
return y;
}
代码1是否是如果条件成立返回x,否则返回y,是的,这就是这个意思,但是代码1非常容易让人误解,而在看代码2,非常容易理解,看起来容易理解。
当我们在写一个程序来判断比较一个常量和一个变量是否相等的时候,把常量写在左边比较好,例如:
int main( )
{
int num = 5;
if(10 == num)
{
printf("OK\n");
}
return 0;
}
如果我们把num写在左边,中间忽略了一个等号的时候,相当于把num赋值,这样编译器还会执行里面的语句,就很难定位错误出现在哪里。而把常量写在左侧,当中间是一个等号的时候,编译器会告诉你哪里出现了错误。这样写比较好。代码风格比较优。注意是变量和常量比较的时候,如果是表达式和常量比较,那么放哪里都是一样的。
2.3 if 练习
输出1-100之间的奇数
可以自己在编译器上进行练习,首先要想这个程序需要用到什么?、
1、循环产生1-100的数字
2、判断产生数字是否为奇数
3、是奇数就打印
这样分布流程逻辑思维清楚,代码就好写。
int main( )
{
int i =1;
while(i<=100)
{
if(i%2 == 1)
{
printf("%d\n",i);
}
i++;
}
return 0;
}
定义一个整形变量i,初始值为1,从1开始循环,每次用i对2取余,如果余数是1,那么它就就是一个奇数,就打印出来,不管是不是,i都加1,直到i变成100后程序才结束,这样所有的奇数也就打印出来了。用其他的写法也可以,每次差2,就可以从1每次加2,还是奇数,这样就可以不用判断,所以后者更高效一些。
2.4 switch 语句
switch 也是一种分支语句,常常用于多分支结构。
比如:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日
如果用if...else来写的话,比较麻烦,形式比较复杂,但是用switch来写的话,就比较清晰明了。
int main( )
{
int day =0;
scanf("%d",&day);
switch(day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期日\n");
break;
default:
printf("错误\n");
break;
}
return 0;
}
这里定义一个变量day,当输入数字的时候就会传入switch()里面,从而执行下面case对应的语句,符合哪个就运行哪个,这里每一个case后面都有break,可以试着把break删掉再运行看看,没有错误,只是输出不符合我们的预期,如果一个break没有,那么程序就会顺序执行,也就是每个语句都执行一遍,这里break就是起到了一个限制的作用;当我吗输入的数在case里没有对应值的时候,我们想要输出一个错误来说明没有这个数的对应值,就可以用 default来写,当输入的数不在这个范围内,那么程序就会直接运行 default里面的语句,放在最后的可以不写break,效果都一样,这就是switch语句。
switch(整形表达式)
{
语句项:
}
case 整形常量表达式:
语句项;
这里注意,switch里面需要是整形表达式,case后面一定是整形而且还是常量才可以。
case后面根据实际情况来加break,例如下面:
int main( )
{
int day =0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("错误\n");
break;
}
return 0;
}
这里目的就是输入1-5中的一个数,就输出工作日,而输出6或者7就输出休息日,其它的数字就输出错误 。这时候break就可以不用每个写,当输入1的时候,程序顺序执行,一直到break出现的时候才停止执行,而case1到case4没有任何操作,当到case5的时候才输出工作日,之后break。同理,休息日也是这个逻辑。所以break按需要来加。
switch是可以允许嵌套使用的。
2.5 switch 练习
下面是一个switch简单小代码,可以来进行分析:
int main( )
{
int n =1;
int m =2;
switch(n)
{
case 1: m++;
case 2: n++;
case 3:
switch(n)
{
case 1: n++;
case 2:
m++;n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d , n = %d\n",m,n);
return 0;
}
最后结果是 m = 5, n = 3 , 一步一步分析就可以。break会跳出它所在的case范围,不会跳出好几个。
总结
以上就是今天要讲的内容,本文讲了分支语句的使用,以及一些分支语句的包含。