1.分支语句和循环语句
本章学习重点分支语句和循环语句的使用
分支语句 if Switch
循环语句 while for do while
goto语句
什么是C语言语句?
c语言中由一个;隔开的叫一条语句
C程序的执行部分是由语句组成的。 程序的功能也是由执行语句实现的。
从程序流程的角度来看,程序可以分为三种基本结构, 即顺序结构、分支(选择)结构、循环结构。
C语句可分为以下五类:
表达式语句
标签语句
循环语句
复合语句
跳转语句
分支语句(选择结构)
空语句
下面分别作详细说明:
1. 表达式语句
表达式语句由表达式加上分号“;”组成。
其一般形式为:表达式;执行表达式语句就是计算表达式的值和执行副作用。
例如: x=y+z; a=520;赋值语句;
y+z;加法运算语句,但计算结果不能保留,无实际意义;
i++; 自增1语句,i值增1。
i++; 是先运算i后再加1。
++i; 是先把i值增1后运算。
包括空语句,函数调用语句在内都属于表达式语句。
2.标签语句
标签语句有3种:
标签名:语句
case 常量表达式:语句
default:语句
说明:其中case语句和default语句只出现于switch语句中。
注意,同一个switch中case后的表达式只能出现一次
switch(exp) { case 2:; case 1+1:; } //ERROR
标签名:语句用于goto,作用范围是函数内部,无法跨函数,并且需要保证同函数内部的标签名唯一。
3. 循环语句
循环语句有4种,分别是
while ( expression ) statement
do statement while ( expression ) ;
for ( expression(opt) ; expression(opt) ; expression(opt) ) statement
for ( declaration expression(opt) ; expression(opt) ) statement
循环语句用于实现程序的循环流程。
4. 复合语句
用括号{}括起来组成的一个语句称复合语句。 在程序中应把复合语句看成是单条语句,而不是多条语句,例如
{ x=y+z; a=b+c; printf(“%d%d”,x,a); }
是一条复合语句。
5. 跳转语句
跳转语句有4种,分别是
goto 标签 ;
continue ;
break ;
return 表达式(可选) ;
跳转语句控制程序跳转到另一处执行。
6. 分支语句(选择结构)
选择语句有3种,分别是
if ( expression ) statement
if ( expression ) statement else statement
switch ( expression ) statement
1. if 语句
语法结构(3种): if (表达式) 语句; if(表达式) 语句1; else 语句2; //多分支 if(表达式1) 语句1; else if(表达式2) 语句2; else 语句3;
代码示例:
#include"stdio.h" int main() { int age = 20; if (age < 18) printf("未成年\n"); else if (age >= 18 && age < 28) printf("青年\n"); else if (age >= 28 && age < 50) printf("壮年\n"); else printf("老年\n"); /*if (age >= 18) printf("成年"); else printf("未成年");*/ return 0; }
注:C语言中表示真假”
0表示假,非0表示真
如果条件成立,要执行多条语句,使用代码块
一对{}就是一个代码块
#include"stdio.h" int main() { int main() { if (表达式) { 语句列表1; } else { 语句列表2; } return 0; }
代码示例:
int week [] = { 1,2,3 }; scanf_s(" %d\n",&week); if (week == 0) { printf("好好学习\n"); printf("完成作业\n"); } else if (week == 1) { printf("出门锻炼\n"); printf("强身健体\n"); } else { printf("吃喝玩乐\n"); printf("风花雪月\n"); }
2. Switch语句
Switch语句也是一种分支语句,常常用于多分支的情况
比如:
输入1, 输出星期一 输入2, 输出星期二 输入3, 输出星期三 输入4, 输出星期四 输入5, 输出星期五 输入6, 输出星期六 输入7, 输出星期日
#include"stdio.h" int main() { int week=0; scanf_s(" % d", &week); switch (week) { 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("输入有误"); break; } return 0; }
case 整形常量表达式:
语句;
3.while语句
while语句的一般形式为:
while(表达式) 语句
其中表达式是循环条件,语句为循环体。
while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。其执行过程可用下图表示。
用while语句计算从1加到100的值。用传统流程图和N-S结构流程图表示算法,见图:
#include <stdio.h> int main(void){ int i,sum=0; i=1; while(i<=100){ sum=sum+i; i++; } printf("%d\n",sum); return 0; }
总结:break在while循环中的作用
循环中只要遇到break,就停止后期所有的循环,直接终止循环
continue在while循环中的作用
continue就是终止本次循环也就是说本次continue后边的代码不会再执行,而是直接跳转到while语句的判断部分,进行下一次循环的入口判断
循环语句
for 循环
和 while 一样,for 循环也是一个顶部驱动的循环,但是它包含了更多的循环逻辑,如下所示:
for ([表达式1];[表达式2];[表达式3])
语句
在一个典型的 for 循环中,在循环体顶部,下述三个动作需要执行:
(1) 表达式 1:初始化
只计算一次。在计算控制表达式之前,先计算一次表达式 1,以进行必要的初始化,后面不再计算它。
(2) 表达式 2:控制表达式
每轮循环前都要计算控制表达式,以判断是否需要继续本轮循环。当控制表达式的结果为 false,结束循环。
(3) 表达式 3:调节器
调节器(例如计数器自增)在每轮循环结束后且表达式 2 计算前执行。即,在运行了调节器后,执行表达式 2,以进行判断。
#include <stdio.h> int main(){ int i, sum=0; i = 1; //语句① while(i<=100 /*语句②*/ ){ sum+=i; i++; //语句③ } printf("%d\n",sum); return 0; }
for 循环的一般形式为:
for(表达式1; 表达式2; 表达式3){
语句块
}
它的运行过程为:
1) 先执行“表达式1”。
2) 再执行“表达式2”,如果它的值为真(非0),则执行循环体,否则结束循环。
3) 执行完循环体后再执行“表达式3”。
4) 重复执行步骤 2) 和 3),直到“表达式2”的值为假,就结束循环。
上面的步骤中,2) 和 3) 是一次循环,会重复执行,for 语句的主要作用就是不断执行步骤 2) 和 3)。
“表达式1”仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句。“表达式2”一般是一个关系表达式,决定了是否还要继续下次循环,称为“循环条件”。“表达式3”很多情况下是一个带有自增或自减操作的表达式,以使循环条件逐渐变得“不成立”。
for循环的执行过程可用下图表示:
do...while 循环
do...while 循环是一种底部驱动的循环:
do 语句 while (表达式);
在控制表达式被第一次计算之前,循环体语句会首先被执行一次。与 while 和 for 循环不同,do...while 循环会确保循环体语句至少执行一次。如果控制表达式的值为 true,那么另一次循环就会继续;如果是 false,则循环结束。
do-while语句的一般形式为:
do
语句
while(表达式);
这个循环与while循环的不同在于:它先执行循环中的语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。其执行过程可用下图表示。