4.流程控制语句

C语言(4.流程控制语句)

目录

  • 一、语句
    • 1.语句分类
    • 2. 流程控制语句
  • 二、分支语句
    • 1. if 语句
      • 1.1 语句格式
      • 1.2 else匹配
      • 1.3 代码风格
    • 2. switch 语句
      • 2.1 语句格式
      • 2.2 case击穿
      • 2.3 代码风格
  • 三、循环语句
    • 1. while循环
      • 1.1 语句格式
      • 1.2 代码风格
    • 2. for循环
      • 2.1 语句格式
      • 2.2 代码风格
    • 3. do\-while循环
      • 3.1 语法格式
      • 3.2代码风格
  • 四、转向语句
    • 1. break语句
      • 1.1 break在switch中
      • 1.2 break在循环中
    • 2. continue语句
    • 3. goto语句
      • 3.1 语句格式
      • 3.2 goto标签语句的使用规范
    • 4. return语句

一、语句

1.语句分类

​ C 语言中,语句共分为5类

  1. 表达式语句
  2. 函数调用语句
  3. 控制语句
  4. 复合语句
  5. 空语句

2. 流程控制语句

​ 流程控制语句就是控制程序执行顺序和是否执行的语句,共分为3类

  1. 条件判断语句(分支语句):if、switch
  2. 循环执行语句:do while、while、for
  3. 转向语句:break、goto、continue、return

​ 英语翻译:(这么理解就行了)

  • expression:表达式
  • statement:语句

二、分支语句

1. if 语句

1.1 语句格式

  1. if 格式

​ 条件判断:expression为真则执行statement,为假不执行

if (expression)
{
    statement;
}
  1. if - else 格式

​ 条件判断:expression为真执行statement_1,为假执行statement_2

if (expression)
{
	statement_1;
}
else
{
	statement_2;
}
  1. 多分支 if 语句

​ 多分支条件判断:expression_1为真执行statement_1,否则判断expression_2,为真执行statement_2,否则执行statement_3

if (expression_1)
{
    statement_1;
}
else if (expression_2)
{
    statement_2;
}
else
{
    statement_3;
}

1.2 else匹配

  1. 若if条件判断后没有大括号,但是有多条语句,则第一条语句是if的语句,如下只有statement_1受if语句控制
if (expression)
	statement_1;
statement_2;
statement_3;
  1. 若有多个if语句,但是只有一个else,则else匹配最近的if,如下else匹配的是表达式为expression_3的if语句
if (expression_1)
	statement_1;
if (expression_2)
    if(expression_3)	//和else匹配
        statement_2;
else
    statement_3;

1.3 代码风格

  1. if关键字与表达式之间有个空格,目的是为了突出if关键字,看着醒目
  2. 表达式后要跟大括号,即使只有一个语句,不容易混淆
  3. else要单独占一行,也是突出关键字,并且也要大括号
  4. 过长的表达式可以分行书写
if (expression_1 &&		//if后跟空格
    expression_2 &&		//过长的表达式分成3行书写,整齐有序
    expression_3)
{				   //跟大括号
    statement_1;
}
else			   //单独占一行
{				   //此处依然要大括号
    statement_2;
}

2. switch 语句

2.1 语句格式

  • 整形表达式:结果只能是整型或字符型
  • case常量:只能是整型或字符型
switch (整型表达式)
{
    case 整型常量表达式1:
        statement_1;
    case 整型常量表达式2:
        statement_2;
    default:
        statement_3;
}

2.2 case击穿

  1. case击穿:执行到case语句时,会将case后的所有case语句和default语句执行完,如:
switch (n)				//若n为2
{
    case 1:
        statement_1;
    case 2:				//从statement_2开始执行
        statement_2;
    case 3:				//由于case击穿,case 2后的所有case和default语句都会执行
        statement_3;	 //statement_3执行
    default:			//statement_4执行
        statement_4;
}
  1. break语句:可以跳出switch语句,用来打破case击穿,通常搭配使用实现多分支判断语句功能
switch (n)				//若n为2
{
    case 1:
        statement_1;
        break;
    case 2:				
        statement_2;	 //从statement_2开始执行
        break;			//break打破switch的执行,跳出语句,后面不会执行
    case 3:
        statement_3;	 //statement_3不会执行
        break;
    default:			
        statement_4;	 //statement_4不会执行
        break;
}
  1. case的执行顺序:与case后的常量没有关系,只与case在switch中的先后顺序有关
switch (n)				//若n为2
{
    case 2:				//从statement_2开始执行
        statement_2;
    case 1:				//由于case击穿,case 2后的所有case和default语句都会执行
        statement_1;
    default:		
        statement_4;	 //statement_4执行
    case 3:				
        statement_3;	 //statement_3执行
    
}

2.3 代码风格

switch (n)				//switch和表达式之间留空隔
{
    case 1:				//case语句起下一行再写语句
        statement_1;
        break;
    case 2:				
        statement_2;	
        break;	
    case 3:
        statement_3;
        break;
    default:			//default每个都写上,即使没有内容也写
        statement_4;
        break;			//break带不带都一样,但是建议带上
}

三、循环语句

1. while循环

1.1 语句格式

​ 表达式为非0执行,表达式为0不执行

while (expression)
{
    statement;
}

1.2 代码风格

​ while后加空格,突出关键字,表达式过长分行书写

while (expression1 &&	//while后空格
       expression2 &&	//表达式过长就分行书写
       expression3)	
{
	statement;
}

2. for循环

2.1 语句格式

for (expression1; expression2; expression3)
{
    statement;
}
  1. expression1:为初始化部分,循环开始前只执行一次
  2. expression2:条件判断部分,为0时终止循环
  3. expression3:调整部分,循环体执行结束后执行该语句,用于调整循环的条件

​ for循环中3个表达式均可以省略,如以下3个for循环都没有语法错误

for (; expression2; expression3)
{
    statement;
}

for (; ; expression3)
{
    statement;
}

for ( ; ; )
{
    statement;
}

2.2 代码风格

  1. for关键字后跟空格,突出关键字
  2. 分号后加空格,条理清晰
  3. 初始化表达式建议不要定义变量,在一些支持老旧标准的编译器下不能编译
  4. 不要再循环体内修改循环变量,防止循环失去控制
  5. 建议for循环使用前闭后开的写法
int i = 0;
for (i=0; i<10; i++)	//合理运用空格,前闭后开
{
    printf("%d ", i);
}

3. do-while循环

3.1 语法格式

​ 先执行循环体,如果表达式为0则跳出循环

do
{
    statement;
}
while (expression);

​ 使用场景有限,并不是很常用

3.2代码风格

  1. do和while关键字要单独占一行
  2. 循环体要用{}包裹
  3. while后跟空格
do
{
    statement;
}
while (expression);

四、转向语句

1. break语句

1.1 break在switch中

​ 用来打破case击穿的,使switch语句实现分支功能

1.2 break在循环中

​ 跳出循环,执行循环外的下一个语句,但是只能跳一层循环

int i = 0;
for (i=0; i<10; i++)
{
    int j = 0;
    while (j<10)
    {
        ++j;
        break;	//执行此语句时跳出while循环
    }
}

2. continue语句

​ 跳过本次循环,执行下一次循环,不终止整个循环

int i = 0;
for (i=0; i<5; i++)
{
    if (i == 2)
    {
        continue;		//跳过本次循环,进入下一次循环,i==2时跳过了本次循环内容
    }
    printf("%d ", i);	//打印结果为0,1,3,4,5。
}

3. goto语句

3.1 语句格式

goto A;	//定义标签A,跳转到A标签
...
A:	//A标签
...

3.2 goto标签语句的使用规范

  1. goto语句的滥用会导致代码结构混乱,阅读难度大大增加,所以不建议使用goto语句
  2. goto语句标签不能跨函数使用,标签是有作用范围的
  3. 只有一种场景适合goto语句,多层循环的跳出
for (...)
    for (...)
    {
        for (...)
        {
            for (...)
            {
                if (expression)
                {
                    goto Exit;	//跳出循环
                }
            }
        }
    }

Exit:	//执行以下语句
...

4. return语句

​ 结束函数执行,返回一个值给函数调用者

int test(void)
{
    return 3;
}

注意

  1. return的返回值要与函数返回值类型一致,不一致的会发生自动类型转换或者直接报错
  2. 无返回值类型的函数,可以使用return语句结束函数,不用返回数值
void test(void)
{
    return;
}

你可能感兴趣的:(C语言,开发语言,c语言)