2021-08-04

本文详细介绍了C语言中的三大流程控制结构:顺序结构、条件语句(包括if和switch语句)及循环语句(包括while、for和do...while语句)。文中还解释了如何使用break和continue语句来控制循环的执行流程,并介绍了goto语句的用法。
摘要由CSDN通过智能技术生成

程序的三大流程控制结构


  1. 什么是语句?

C语言中由一个分号 ; 隔开的就是一条语句。

1. 顺序结构

就是从上到下一条一条的执行语句,它会执行所有语句,而且只要是已经执会再次执行

2. 条件语句(分支语句if和switch)

C语言提供了if语句和Switch语句来完成根据条件判断的结果选择要执行的程序语句

根据条件判断的结果,选择所要执行的程序语句
if 语句

它根据给定的表达式的值进行判断,以决定执行某个分支程序段

基本格式

if(表达式)语句;

如果表达式的值为真(非0),则执行其后的语句;否则不执行该语句

注意:if关键字之后的表达式通常是逻辑表达式或关系表达式,也可以是其他表达式,如赋值表达式等,甚至可以是变量

if-else语句

if(表达式1)

语句1;

else(表达式2)

语句2;

多分支结构

if-else-if语句

if(表达式1)

语句1;

else if (表达式2)

语句2;

else if(表达式3)

语句3;

else

语句n;

从上到下依次判断表达式的值,当某个表达式为真是,则执行其后面的语句

if 语句的嵌套

所谓嵌套,就是在if语句后面的执行语句中又包含if语句;一般形式入下

if(表达式1)

if(表达式2)

语句1;

else(表达式3)

if(表达式3)

语句2;

Switch语句(多分支语句)

Switch(表达式)

{
case常量表达式1;

语句1;

break;

  case常量表达式2;

语句2;

break;

  case常量表达式3;

语句3;

break;//break语句的实际效果是把语句列表划分为不同的部分

  default;
  
  语句n;

}

编程好习惯
在最后一个 case 语句的后面加上一条 break语句。(之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)。

其执行过程:

首先计算表达式的值,然后将该值与后面的各个case关键字的常量表达式相比较,当表达式的值与某个常量表达式的值相等时,即执行其后与语句,然后不再进行判断,继续执行所有case后的语句,直到遇到break语句退出Switch语句。

如果表达式的值与所有case后的表达式都不等,则执行default语句。

每个switch语句中只能出现一条default子句。
但是它可以出现在语句列表的任何位置,而且语句流会像贯穿一个case标签一样贯穿default子句

注意

1,Switch关键字后面的括号内的表达式的值必须为整型,不能为实型。

2,case关键字的常量表达式后面要添加冒号(😃

3,case 关键后面的值可以是常量,也可以是常量表达式,但表达式中不能有变量,因为case关键字后面的值必须在编译阶段被确定。

4,每个case后面的常量表达式的值要与Switch后面括号内的表达式的类型要一致,且各个case后面的常量表达式必须互不相同。

5,执行完一个case后面的语句,流程控制转移到下一个case继续执行,“case常量表达式”只起语句标号作用,并不是在该处进行条件判断。

因此,如果在执行完当前case语句后需要跳到Switch语句后执行,就需要在改case分支最后加上break语句

6,default分支可以省略,如果省略该分支,则当前常量表达式与Switch后面括号内的表达式的值不相等时,Switch结构中没有语句被执行。

7,Switch语句允许嵌套


#include <stdio.h>

int main()


	int n = 1;
	int m = 2;
	switch (n)
	{
	case 1:
		m++;
	case 2:
		n++;
	case 3:
		switch (n)
		{//switch允许嵌套使用
		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


3.循环语句

有时需要反复操作一个或几个动作,程序进行到某个位置后,又返回执行前面的语句,这种结构成为循环结构。

while

for

do while

while

如果循环体为多条语句,后面跟一个大括号才能执行多条语句,否则默认执行紧挨后面的一条语句。

while语句可用来实现入口条件循环,即当循环条件满足时执行循环体内的语句。

while 语法结构

while(表达式) //表达式结果为真,执行循环语句

循环语句;//为假,跳出循环

表达式为循环条件,语句为循环体,while语句中遇到break是用来终止整个循环

for循环

语法

for(表达式1;表达式2;表达式3)
循环语句;

表达式1:初始化变量

表达式2:条件判断部分

表达式3:调整部分

for语句中的两个分号不能省略,其他可以省略

也可将循环体写到for语句中

注意


  1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
  2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

如 for(i=0;i<10;i++)

//for循环的变种
#include<>

int main ()
{
    int i=0;
    
    for(;;)
    
    {
    printf("呵呵\n");
    
    return 0;
}

//for 循环的初始化,判断,调整三个部分是可以省略的

//判断部分如果省略,意味着判断条件恒为真
建议:不要轻易省略
//

int i=0;
int j=0;
for(;i<10;i++)
{
for(;j<10;j++)


printf("hehe\n");
}


打印10个hehe



//变种2
 int x, y;
    for (x = 0, y = 0; x<2 && y<5; ++x, y++)
   {
        printf("hehe\n");
   }
 return 0; }


do…while()循环


do

循环语句;

while(表达式);

#include <stdio.h>
int main()
{
 int i = 10;
 do
 {
 printf("%d\n", i);
 }while(i<10);
 return 0; }


do while循环中的break和continue
#include <stdio.h>
int main()
{
 int i = 10;
 do
 {
        if(5 == i)
            break;
 printf("%d\n", i);
 }while(i<10);
 return 0; }

#include <stdio.h>
int main()
{
 int i = 10;
 do
 {
        if(5 == i)
            continue;
 printf("%d\n", i);
 }while(i<10);
 return 0; }


转向语句

C语言提供出循环或短路循环的break语句和continue语句

break中断语句

Switch结构中使用break语句,用来中断分支的执行,跳到Switch语句后一条语句执行

当在循环结构中使用break语句时,可使程序终止循环而执行循环后面的语句。

#include <stdio.h>
int main()
{
 int i = 0;
 for(i=1; i<=10; i++)
 {
 if(i == 5)
 break;//终止整个循环
 printf("%d ",i);
 }
 return 0; }

注意

对于多重循环嵌套,使用break语句只能跳出当前循环,而不会跳出所有外循环。

continue条件继续语句

continue语句的作用是跳过本次循环体中剩余的语句,而直接去执行下一次循环。

#include <stdio.h>
int main()
{
 int i = 0;
 for(i=1; i<=10; i++)
 {
 if(i == 5)
 continue;
 printf("%d ",i);
 }
 return 0; }

continue语句只能在for,while,do-while等循环体中使用。

int main()

{

int i = 1;

while(i<=10)

{

i = i+1;

if(i == 5)

continue;

printf("%d ", i);

}

return 0;

}

continue在while循环中的作用就是:

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接
跳转到while语句的判断部分。进行下一次循环的入口判断


标签语句 goto

goto语句的语义是改变程序的流向转去执行语句标号所标识的语句。

它通常与条件语句配合使用,可使用来实现条件转移,构成循环,跳出循环体等功能。

goto也称为无条件转移语句


goto 语句标号;


语句标号是按标识符规定书写的符号,放在某一语句行的前面,标号后面加冒号(:)。语句标号起标识语句作用,与goto语句配合使用。

goto语言真正适合的场景如下

for(...)
    for(...)
   {
        for(...)
       {
            if(disaster)
                goto error;
       }
   }
    …
error:
 if(disaster)
         // 处理错误情况

如果存在深层嵌套的情况goto语句是比较合适的

在程序中定义标号时,整个程序中标号不能重名,例如

loop :if(i<=n)
label:sum+=i;

以上语句分别为两行程序定义标号,使goto语句能跳转到该行程序执行处执行。

不使用for,while,或do-while语句,只使用goto语句也可构造循环结构。

用goto语句编写循环结构代码实例。

#inclue<stdio.h>

int main()
{
int n,i,sum=0;

printf("请输入一个整数:");
scanf("%d",&n);//输入一个累加到的整数的值

i=1;
loop:if(i<=n)  //条件判断i<=n,若成立,则执行下面的代码
{
    sum+=i;
    i++;
    goto loop;  //回到loop出现的位置再进行条件判断
    
}
printf("1到%d所有自然数之和为:%d\n",sum);
getch();

return 0;

}

loop:if(i<=n) 在第11行中定义了标号以后,在程序的任何位置都可以使用goto语句跳转到该行。

提示: 在Switch语句中,case关键字及其后面的常量就是一个标号。

返回语句 return

162页

函数调用的时候计算结果通常是通过返回值带出的,如果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值