1.开始
C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。我们可以使⽤ if 、 switch 实现选择结构,使⽤ for 、 while 、 do while 实现循环结构
2.分支语句
2.1if语句
2.1.1if语句的实现与运行方式
if语句的语法形式如下
if(表达式)
语句;
在c语言中,非0为真,0为假。
如果表达式为真,则运行语句,若为假,则不运行语句。
2.1.2else语句的实现与运行方式
else与if相配,是选择结构的另一条分支。
如一个正整数,不是奇数,就是偶数。
else的语法形式:
if(表达式)
语句1;
else
语句2;
2.1.3分支中的多条语句
在c语言中,if与else默认是只跟一条语句的,如:
if(表达式)
语句1;
语句2;
语句2不受表达式的控制,此时无论表达式是否正确,语句2一直都会执行。
若要使if控制多条语句,需要加上“{}”,else同理。
if(表达式)
{
语句1;
语句2;
}
2.1.4嵌套if(else if)
在if else语句中,else可以与另一个if连用形成多重判断。
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
注:在if else语句中,从上到下运行,若遇见满足条件的表达式,则其他分支不会执行。
2.1.5悬空else问题
在if与else语句中可能会有多个if和else出现,而无论怎样,else总是与最邻近的if匹配。
if(表达式1)
if(表达式2)
语句1;
else
语句2;
如图,else是与第二个if相匹配,而不是第一个。
2.2switch语句
2.2.1switch语句的语法形式
除if语句外,switch也可以实现分支结构。
且与if相比,用switch来实现多重分支更加的便捷。
switch(整形表达式)
{
case 整形常量表达式1:
语句1;
break;
case 整形常量表达式2:
语句2;
break;
default:
语句2;
break;
}
举个例子,如输入数字1-3,打印对应的星期几。
#include <stdio.h>
int main()
{
int day=0;
scanf("%d",&day);
switch(day)
{
case 1:
printf("星期一");
break;
case 2:
printf("星期二");
break;
case 3:
printf("星期三");
}
return 0;
}
此时输入1,则会打印星期一;输入2,则会打印星期二。此后同理。
注意:
1.switch()的括号内必须是整形表达式。
2.case语句后面必须是整形常量表达式。
2.2.2switch中的break
与if else语句不同的是,当switch中遇到了满足条件的表达式时,会直接从那条case直接往下运行,知道遇到break或者时switch语句结束,此时可能会运行到别的case语句中的代码,所以运用break在switch语句中显得尤其重要。
唯有合理的运用break语句,才能在switch语句中实现真正的分支。
拿上题的例子,如果case语句中未加break
#include <stdio.h>
int main()
{
int day=0;
scanf("%d",&day);
switch(day)
{
case 1:
printf("星期一");
case 2:
printf("星期二");
case 3:
printf("星期三");
}
return 0;
}
则输入1,就会打印“星期一星期二星期三”,输入2,就会打印“星期二星期三”
如此便不能满足题目的要求,可见break在switch语句中的重要性。
2.2.3switch的default
在switch中,default的功能类似于if else语句中的else,在有不满足switch中所有case的情况出现,则可以运用default。
还是那个例子,输入数字1-7,打印对应的星期几。
若有出现超出数字7的情况,则我们就可以提示:“输入错误,请重新输入”。
#include <stdio.h>
int main()
{
int day=0;
scanf("%d",&day);
switch(day)
{
case 1:
printf("星期一");
break;
case 2:
printf("星期二");
break;
case 3:
printf("星期三");
case 4:
printf("星期四");
break;
case 5:
printf("星期五");
break;
case 6:
printf("星期六");
break;
case 7:
printf("星期天");
break;
default:
printf("输入错误,请重新输入");
}
return 0;
}
2.2.4switch中case与default的顺序问题
在switch中,其实case与default的顺序并没有要求,可随便排序。
不过我们一般将default语句排在最后。
3.循环语句
3.1while循环
while的语法形式为
while(表达式)
语句;
它与if的运行模式很相似,若括号内表达式为0则循环结束,不为0则循环继续。
3.2for循环
for循环的语法形式为
for(循环变量初始化;循环结束条件判断;循环变量调整)
语句;
3.3do-while循环
与while循环和for循环不同的是,do-while循环时先循环再判断
它先进入循环体执行命令,后再依据表达式判断是否继续进行循环
do
{
语句
}while(表达式);
4.break和continue语句
4.1关于break和continue
在循环中有两个重要的关键字——break和continue,它们的作用时用来提前终止循环。
break是用来永久的终止循环,当break被执行,就会跳出循环,执行下面的代码。
注:break只能跳出一层循环,若要跳出多层循环需要用到多个break。
continue的作用是用来跳过循环中continue后面的代码,快速进入下一次循环的判断。
5.goto语句
C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。 从理论上 来说goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。 但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程,例如一次跳出两层或多层循环。