欢迎光临
我们一直在努力

Linux基础 C语言基础 流程控制部分,以及部分运算符以及运算符优先级,辅助控制语句,以及GDB调试工具

在c语言中流程控制分为3种结构,分别是顺序,分支,循环结构,c语言当中任何程序都是由这3种结构组成

注意:c语言中没有bool类型,所以用真1和假0替代

并且运算符的优先级不代表优先执行,而是相当于优先带个括号,运算时还是按照从左向右或者从右向左进行运算,

顺序结构

首先介绍顺序部分

这个很好理解,程序从main函数第一行开始运行,从上到下顺序依次执行

#include <stdio.h>

int main(void)
{
int a = 10;
int b = 20;
int c = a – b;

int a = 15
printf("%d",a);

return 0;
}

看上面的代码c的结果是10,因为在a的值发生改变之前,c已经通过之前的a,b值计算出结果,因为这是顺序结构,不会返回再进行计算,只会顺序依次运行,如下图流程图所示

分支(选择)结构

分支结构,就是根据某个给定的条件进行判断,当执行结果为真1或假0时,分别执行相应的分支(选择)的语句,分为if语句和switch语句

提到对结果进行判断真1和假0,就想到相应的运算符

运算符

关系运算符

这个就不用过多赘述

< 小于
> 大于
<= 小于等于
>= 大于等于
== 判断是否等于
!= 判断是否不等于

逻辑运算符

逻辑运算符有逻辑与,逻辑或和非

&& 逻辑与:一假为假,一真为真(乘法关系)
|| 逻辑或:一真为真,全假为假(加法关系)
! 取非:真取非得假,假取非得真

这是真码表

&&和||具有截断特性

&&:若左边为假值,便不再执行右边表达式

||:若左边为真值,便不在继续处理左边表达式

注意:优先级&& > ||

三目运算符

即:逻辑表达式 ?表达式1:表达式2

    ?   :

当逻辑表达式结果为真时,执行表达式1,若结果为假时,执行表达式2

注意:有3中运算符的执行顺序的从右向左的其余便是从左向右的

分别是:单目运算符!

三目运算符  ?  :

赋值运算符 == 等等

运算符优先级

运算符优先级决定了表达式中运算符的执行顺序

括号()> 单目运算符 > 双目运算符 > 三目运算符 > 赋值运算符 > 逗号

注意:在逻辑运算符中 与> 或

if语句

if语句的执行流程如图下所示

1.简单分支(if _else语句)

if (逻辑表达式)   写逻辑表达式时,将常量在左边,例如:(1 == a)

{                          并且 if 后面必须加逻辑表达式,但是else后面不能有表达式

语句块1;           if语句可以单独使用,不加else,但是else语句不可以单独使用

}

else

{

语句块2;

}

2.阶梯分支(即if_else if _else 语句)

if ()           如果上面的语句执行,便不会对后面的语句继续进行判断执行

{

}

else if ()

{

}

else

{

}

3.嵌套结构

if ()

{

        if ()

        {

                if ()

                {

                }

         }

}

什么时候用if语句呢

1.进行逻辑判断时

2.同一类数据进行不同操作时

switch语句

1.简单分支

注意事项:

1.switch后面表达式必须是整型表达式,不能为浮点型

2.case 后面的值,必须为常量,不能是变量表达式,不能是常量表达式

3.switch,只与case后的值比较一次,然后顺序向下执行

2.嵌套结构

里层switch结束后使用break跳出外层switch,如果没有break,外层switch会顺序向下

执行。

循环结构

C语言提供了三种主要的循环结构:for循环、while循环和do-while循环

循环结构的用处:

1.处理有规律的代码

2.重复执行一段代码

for循环

for循环通常用于已知循环次数的情况,其语法如下:

基本结构

for (初始化表达式; 条件表达式; 更新表达式)
{
// 循环体
}

初始化表达式在循环开始前执行一次,条件表达式在每次迭代前检查,更新表达式在每次迭代后执行

初始化表达式:变量在循环中的初始值

条件表达式:循环条件满足条件执行,不满足条件则循环结束

更新表达式:每次循环完毕要执行的代码

嵌套结构

循环可以嵌套使用,即在一个循环体内包含另一个循环。示例:

for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("i=%d, j=%d\\n", i, j);
}
}

注意:有一个特点,外层执行一次,内层执行一遍(可以根据此特性确定代码中变量在嵌套循环中的位置)

while循环

基本格式

while循环在条件为真时重复执行循环体

while (条件表达式) {
// 循环体
}

do while循环

do-while循环与while循环类似,但循环体至少执行一次

do {
// 循环体
} while (条件表达式);

注意:循环中的内容先执行一次再进行,在进行判断,所以不能跟while,for进行替换

死循环

while格式

do {
// 循环体
} while (条件表达式);

for结构

for( ; ; )
{
循环体
}

goto语句

Goto语句是一种无条件跳转指令,允许程序直接跳转到代码中的指定标签位置执行。它打破了结构化编程的顺序流程。

Goto语句的典型用途

  • 错误处理:在多层嵌套循环或条件中,goto可以快速跳转到统一的错误处理代码块,避免重复的退出逻辑。

    if (error_occurred) {
    goto cleanup;
    }
    cleanup:
    free(resources);

  • 跳出多重循环:在需要立即终止多层循环时,goto比逐层break更简洁。

    for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
    if (condition) goto exit_loops;
    }
    }
    exit_loops:

  • Goto语句的争议与风险

  • 代码可读性:滥用goto会导致“面条代码”(Spaghetti Code),逻辑跳跃难以追踪,降低可维护性。
  • 结构化编程原则:现代编程更推荐使用函数、循环和条件语句等结构替代goto,以保持代码的模块化。
  • 作用域问题:goto不能跨函数跳转,且跳转时可能绕过变量初始化,引发未定义行为。
  • 辅助控制语句

    辅助控制语句是编程中用于改变程序执行流程的语句,通常与主控制结构(如条件、循环)配合使用,增强程序的灵活性和效率。常见的辅助控制语句包括 break、continue、return 等

    break 语句

    break 用于立即终止当前循环(for 或 while),跳出循环体并执行后续代码。

    for i in range(5):
    if i == 3:
    break # 当 i=3 时终止循环
    print(i)
    # 输出:0 1 2

    continue 语句

    continue 跳过当前循环的剩余部分,直接进入下一次迭代。

    for i in range(5):
    if i == 2:
    continue # 跳过 i=2 的本次循环
    print(i)
    # 输出:0 1 3 4

    return 语句

    return 用于函数中,终止函数执行并返回指定值。若无返回值,函数返回 None。

    def check_even(num):
    if num % 2 == 0:
    return True
    return False
    print(check_even(4)) # 输出:True

    典型应用场景

    • break:搜索满足条件后提前退出循环。
    • continue:过滤不符合条件的迭代项。
    • return:根据条件提前返回函数结果。

    通过合理使用辅助控制语句,可以优化代码逻辑并提升执行效率。

    GDB调试工具

    GDB(GNU Debugger)是Linux下的命令行调试工具,用于分析程序运行时的行为,定位崩溃、死锁或逻辑错误。

    1.编译代码时,允许GDB调试

                    gcc filename.c -g

    2.使用GDB调试代码

                    gdb a.out

    3.使用指令去调试代码

            1.  l      查看代码

            2.  b 行号/函数名     设置断点

            3.  r    执行代码

            4.  n    单步执行

            5.  p 变量      查看变量中的值

            6.  q    退出调试

            7.  c     运行到下一处断点

    赞(0)
    未经允许不得转载:171主机测评 » Linux基础 C语言基础 流程控制部分,以及部分运算符以及运算符优先级,辅助控制语句,以及GDB调试工具
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址