前言:
C语言是一门结构化的程序设计语言;C语言的目的是为了解决生活中的方方面面的事情,因此衍
生了三种结构:①、顺序结构 ②、选择结构 ③、循环结构。下文主要对选择(分支)语句和循环
语句进行简述。
分支语句:①、if 语句 ②、switch 语句
循环语句:①、while 语句 ②、for 语句 ③、do while 语句
一、什么叫语句 ?
语句的分类:①、表达式语句 ②、函数调用语句 ③、控制语句 ④、 复合语句 ⑤、空语句
本文主要介绍控制语句:控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言
支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种
控制语句,可以分为三大类:
1. 条件判断语句也叫分支语句:if语句、switch语句;
2. 循环执行语句:do while语句、while语句、for语句;
3. 转向语句:break语句、goto语句、continue语句、return语句。
二、分支语句(选择语句)
2.1、if语句
2.1.1、语法结构:
①、if(表达式)
语句;
②、if (表达式)
语句1;
else
语句2;
③、if(表达式1)
语句1;
else if (表达式2)
语句2;
else
语句3;
举例1:
#include <stdio.h>
int main()
{
int age = 10;
if (age < 18)
printf("未成年\n");
return 0;
}
分析:if语句括号内的如果为真,则执行下面的语句,为假则不执行。
举例2:
#include <stdio.h>
int main()
{
int age = 20;
if (age < 18)
printf("未成年\n");
else
printf("成年\n");
return 0;
}
分析:if else语句适合非此即彼的情况
注:一条if 和 else语句默认只能控制一条语句,如果要控制多条语句需要加{ }。
#include <stdio.h>
int main()
{
int age = 20;
if (age < 18)
{
printf("未成年\n");
printf("不能饮酒");
}
else
{
printf("成年\n");
printf("适量饮酒\n");
}
return 0;
}
举例3:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if (age < 18)
printf("少年\n");
else if (age >= 18 && age <= 30)
printf("青年\n");
else if (age >= 31 && age <= 45)
printf("中年\n");
else if (age >= 46 && age <= 60)
printf("壮年\n");
else if (age >= 61 && age <= 90)
printf("老年\n");
else
printf("老寿星\n");
return 0;
}
分析:多分支情况
注:在C语言中0表示假,非0表示真 !!!
2.1.2、悬空 else
在if else语句中 else 是和距离最近的 if 语句进行匹配
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
分析:上面一段代码无结果,下面一个 else 与第二个 if 相匹配,由于第一个 if 为假则直接结束。
2.2、switch语句
switch语句也是一种分支语句。 常常用于多分支的情况。
下面通过一个一个例子进行说明:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
if (1 == day)
printf("星期1\n");
else if (2 == day)
printf("星期2\n");
else if (3 == day)
printf("星期3\n");
else if (4 == day)
printf("星期4\n");
else if (5 == day)
printf("星期5\n");
else if (6 == day)
printf("星期6\n");
else if (7 == day)
printf("星期天\n");
return 0;
}
这事一个用 else if 语句来显示星期几的代码。但用switch case 语句可以怎么写呢?
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch (day)
{
case 1:
printf("星期1\n");
break;
case 2:
printf("星期2\n");
break;
case 3:
printf("星期3\n");
break;
case 4:
printf("星期4\n");
break;
case 5:
printf("星期5\n");
break;
case 6:
printf("星期6\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}
注意:switch语句中switch括号内必须是整型表达式,case后必须是整型常量表达式。
在某些情况下switch case语句更加简介明了:
#include <stdio.h>
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;
}
注:default处理非case语句的情况,写在任何一个 case 标签可以出现的位置。 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。
编程好习惯 :在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个break 。
三、循环语句
分类: ①、while循环 ②、for循环 ③、do while循环
3.1 while 循环
接下来以一个例子来进行说明:在屏幕上打印1-10的数字。
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
printf("%d\n",i);
i++;
}
return 0;
}
3.1.1、while语句中的break和continue
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (5 == i)
break;
printf("%d\n",i);
i++;
}
return 0;
}
分析:在while语句中加入break,只要遇到break,就停止后期的所有的循环,直接终止循环。
因此:while中的break是用于永久终止循环的。
#inciude <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (5 == i)
continue;
printf("%d\n",i);
i++;
}
return 0;
}
分析:continue是用于跳过本次循环后面的部分,也就是本次循环中continue后边的代码不会再执
行, 而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
3.2、for循环
3.2.1格式:
for (表达式1;表达式2;表达式3)
循环语句;
表达式1:表达式1为初始化部分,用于初始化循环变量的。
表达式2:表达式2为条件判断部分,用于判断循环时候终止。
表达式3:表达式3为调整部分,用于循环条件的调整。
由于在for循环之中初始化、判断、调整三个是在同一步之中,所以for循环是优于while循环的。
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
printf("%d\n",i);
}
return 0;
}
3.2.2、在 for 循环中的 break 和 continue
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
break;
printf("%d\n",i);
}
return 0;
}
分析:可以看到程序只到4就停止了
#include <stdio,h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
continue;
printf("%d\n",i);
}
return 0;
}
3.2.3 for语句的循环控制变量
两点建议:
1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
3.2.4 for循环的一些变种
for循环中的初始化部分,判断部分,调整部分是可以省略的。但是省去判断部分就意味着判断恒为真。