C语言03--控制流

1.二路分支

  • 逻辑:程序中某段代码需要在满足某个条件时才能运行
  • 形式:
    1. if 语句:表达一种 如果-则 的条件执行关系
    2. if-else 语句:表达一种 如果-否则 的互斥分支关系

语法:

if ( 判断表达式 )
{    
     // 代码块    
}

解析:

如果判断表达式的值为真(非零) ,那么代码块中的代码将会被执行,相反如果判断表达式为假则代码块不会被执行。

if( 判断表达式 )
{
    // 代码块  1
}
else
{
    // 代码块  2
}

解析:

如果判断表达式为真则执行代码块1 , 否则执行代码块2 。 因此两个代码块只会二选一执行一个。

if( 判断表达式1 )
{
    // 代码块  1
}
else if ( 判断表达式2 )
{
    // 代码块  2
}
else if( 判断表达式3 )
{
    // 代码块 3
}
.....
.....
else if ( 判断表达式 N )
{
    // 代码块N
}
else  // 表示以上的所有条件都不满足
{
    
}

解析:

以上代码框架可以在N个代码块中根据实际条件来选择执行其中的某一个代码块。

注意在使用if或if-else 语句的时候可以省略大括号,但是需要注意,当省略掉大括号后,if 语句或if-else 语句中只能出现一个逻辑语句,如果有多个逻辑语句则会打断if-else 语句的连招。

如下 第三行代码会打破if-else-if 的连续性,编译器会直接报错。

if (Num < 100 ) 
    printf("Num小于100\n");
    printf("恭喜你找到了正确的学习方法...\n"); 
else if (Num > 100 )
    printf("Num大于100\n");
else
    printf("Num等于100\n");
  • 注意:
    1. if 语句可以单独使用,else 语句不可以,else 语句必须跟if语句配套使用
    2. 不管是 if 语句还是 else 语句,代码块都必须使用大括号{}括起来,否则只有首个逻辑语句有效

2.多路分支

  • 逻辑:根据不同的条件执行不同的代码片段
  • 语法:
switch ( 整型表达式 )
{
    case 预估值1 :
        // 代码块1 
        break;

    case 预估值2 :
        // 代码块2 
        break;

    case 预估值3 :
        // 代码块3 
        break;
    
    case 预估值N :
        // 代码块N 
        break;
    
    default :
        // 代码块N + 1
        break ;
}
switch(n)
{
case 1:
    printf("one\n");
    break;

case 2:
    printf("two\n");
    break;
  
case 3:
    printf("three\n");
    break;
  
default:
    printf("其他数字\n");
}
  • 要点解析:
  1. switch(n) 语句中的 n 必须是一个整型表达式,即 switch 判断的数据必须是整型
  2. case 语句只能带整型常量,包括普通整型或字符,不包括 const 型数据。
  3. break 语句的作用是跳出整个 swtich 结构,没有 break 程序会略过下一个case的判断往下执行,直到遇到break为止
  4. default 语句不是必须的,一般放在最后面(因此不需要 break)
  5. if-else 语句与switch 语句有很多相似的地方,但是有一个最大的不同,if-else 的每一个判断表达式之间可以没有任何联系,但是switch-case 语句中中所有的case都用于判断是否等于switch语句中的整型值。

3.const

  • 逻辑:使一个变量不可修改(常量)
  • 作用:
    • 修饰普通变量,使之不可修改 (并不常见)
    • 修饰指针变量,使之不可修改或者使其指向的目标不可修改 (非常常见一般用于保护内存不被意外修改)
  • 示例:
int const a = 100; // 定义了一个不可修改的变量a
const int b = 200; // 定义了一个不可修改的变量b

a = 101; // 错误
b = 202; // 错误

4.while与 do…while循环

  • 逻辑:使得程序中某一段代码可以重复循环地运行
  • 形式:
    • while 循环:先判断,再循环
    • do-while 循环:先循环,再判断

语法:

// while 只要布尔表达式的值为真,则会不停地循环执行代码块的内容 :
while ( 布尔表达式 ) 
{
    // 代码块
}

// do-while  先执行代码块,然后再对表达式进行判断,如果为真则循环执行,否则跳出
do
{
    // 代码块
}while( 布尔表达式 ) ;
  1. 语法点:
    1. while 循环先进行判断,条件为真后才执行循环体,因此循环体可能一遍也不执行。
    2. do-while 循环先执行循环体,再进行判断,因此循环体至少会执行一遍。
    3. do-while 循环中的 while 语句后面有分号; 而 while中需要注意不要随便添加;否则会进入逻辑问题中。

5.for循环

  • 逻辑:与 while 循环类似,但更加紧凑,for 循环将控制循环的变量集中在一行
  • 语法:
for ( 表达式1  ;  表达式2  ; 表达式3  )
{
    // 需要循环的代码块
}

表达式1: 一般用于初始化循环控制的变量 , 比如 int i = 0

只有满足C99 的编译规则才允许在该语句下定义变量,

如果报错则可以:

把定义语句写到for循环外面(前面)

编译命令中指定使用C99编译规则: gcc xx.x -std=c99

表达式2: 一般是判断条件, 用于判断循环控制变量是否在某一个范围 比如 i < 100 ;

表达式3: 一般是循环控制变量的迭代语句 比如 i ++

  • 示例:
// 循环输出一系列整数,直到100为止
int a;
for(a=30; a<=100; a++)
{
    printf("%d\n", a);
}

语法点:

    • 循环头的标准语法是: for(表达式1 ; 表达式2 ; 表达式3)
    • 表达式1一般用来初始化循环控制变量,它只有在第一个进入循环体的时候执行一次。
    • 表达式2一般用来作为循环判定条件,为真则进入循环,为假则跳出循环, 在每一次执行代码块之前执行该语句
    • 表达式3一般用来更新循环控制变量 , 在每一次代码块执行结束之后,下一次判断之前被执行
    • 三个表达式均可以省略,但分号不能省略

6.break与continue

  • 逻辑:
    • break:① 跳出 switch 语句; ② 跳出当层循环体
    • continue:结束当次循环,进入下次循环(while / for )

switch(n)
{
case 1:
    printf("one\n");
    break;  // 跳出 switch 语句
case 2:
    printf("two\n");
    break;        
}

while(1)
{
    int n = scanf("%d", &a);
    if(n == 0)
        break; // 跳出当层 while 循环体
}

for(int i=1; i<=100; i++)
{
    if(i%7 == 0)
        continue; // 跳过所有能被7整除的数
     
    printf("%d\n", i);       
}

7.goto语句

  • 逻辑:无条件跳转
  • 语法:
....
.....
......
标签:
    代码......
    
...
.....

goto 标签;
...
.....
  • 示例:
int main()
{
    printf("%d\n", __LINE__); // 打印第3行 
    
    // 无条件跳转到label处 
    goto label;
    printf("%d\n", __LINE__); // 打印第7行,此处被略过
label:  
    printf("%d\n", __LINE__); // 打印第9行
}
  • 语法:
    • goto语句直接跳转到本代码块中的标签处
    • 标签指的是以冒号结尾的标识符
  • 作用:
    • goto语句的无条件跳转不利于程序的可读性,一般不建议使用
    • goto语句常被用在程序的错误处理中
    int main(void)
    {
        // 初始化蓝牙设别
        if (init == false )
        {
            goto label1 ;    
        }
            
        // 初始化WIFI设备
        if (init == false )
        {
            goto label2 ;    
        }
            
        // 初始化显示器设备
        if (init == false )
        {
            goto label3 ;    
        }
        
        // 初始化空调 
        if (init == false )
        {
            goto label4 ;    
        }   
        
    label4:
        // 卸载、释放空调设别用到的所有资源      
    label3:
        // 卸载、释放显示器设别用到的所有资源         
    label2:
        // 卸载、释放WIFI设别用到的所有资源    
    label1:
        // 卸载、释放蓝牙设别用到的所有资源
        
    }

8.结语

        在本篇博客中,我们深入探讨了C语言中的控制流语句,包括条件语句(如 if 和 switch)、循环语句(如 forwhile 和 do while)以及跳转语句(如 breakcontinue 和 return)。这些控制流结构为程序的决策和重复执行提供了灵活性,使得开发者能够准确地控制代码的执行流程。

        掌握控制流是学习 C语言的关键,它为实现复杂的逻辑和算法奠定了基础。通过合理使用这些结构,我们可以编写出更高效、更清晰的代码。在编写程序时,注重逻辑结构的设计,能够帮助我们更好地应对各种编程挑战。

        希望读者在今后的学习和实践中,能够灵活运用控制流语句,解决实际问题,提升编程能力。感谢您阅读本博客,如果您有任何疑问或建议,欢迎在下方留言讨论!

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值