C语言学习笔记三(流程控制句话)

1.流程图

椭圆形:表示流程的开始或结束,通常标注"Start"或"End"
矩形:表示处理步骤或操作,如变量赋值、数学运算等
菱形:表示条件判断或分支结构,对应C语言的if/switch语句
箭头线:表示控制流方向,连接各个操作步骤
平行四边形:表示输入/输出操作,如scanf/printf语句

2.顺序结构

顺序结构是程序设计中最简单的控制结构,代码按照从上到下的顺序依次执行,每一条语句执行且仅执行一次,没有分支或循环。它是所有程序的基础组成部分。

顺序结构的特点

    • 线性执行:语句按书写顺序逐条执行,前一条语句执行完毕后才会执行下一条。
    • 无跳转:没有条件判断或循环,执行路径固定。
    • 示例代码片段
      a=5;
      b=10;
      sum=a+b;
      printf("%d",sum);

 3.分支结构if

if语句用于条件判断,基本语法如下:

if (condition) {
    // 条件为真时执行的代码
}
 

if-else语句

当需要处理条件不成立的情况时,可以使用if-else结构:

if (condition) {
    // 条件为真时执行的代码
} else {
    // 条件为假时执行的代码
}
 

else if多条件判断

对于多个条件的判断,可以使用else if:

if (condition1) {
    // 条件1为真时执行的代码
} else if (condition2) {
    // 条件2为真时执行的代码
} else {
    // 其他情况执行的代码
}
 

嵌套if语句

if语句可以嵌套使用,处理更复杂的逻辑:

if (condition1) {
    if (condition2) {
        // 两个条件都为真时执行的代码
    }
}
 

条件表达式必须用括号括起来,即使只有一条语句也建议使用大括号增加可读性。在嵌套if-else时需注意else与最近的if匹配问题,可通过合理使用大括号避免歧义。

 4.分支结构Switch

Switch语句是一种多分支选择结构,用于根据表达式的值跳转到不同的代码块执行。基本语法如下:

switch (表达式) {
    case 常量1:
        语句1;
        break;
    case 常量2:
        语句2;
        break;
    // 更多case...
    default:
        默认语句;
}
 

表达式与case的匹配规则

Switch的表达式必须是整型或枚举类型(如intchar)。
Case标签必须是常量表达式,且值必须唯一。表达式结果会与case标签依次比较,匹配成功后执行对应代码块。

Break语句的作用

Break用于退出当前Switch结构。若缺少break,程序会继续执行下一个case的语句(称为“穿透”现象),直到遇到break或Switch结束。

switch (x) {
    case 1:
        printf("1");
        // 无break,继续执行case 2
    case 2:
        printf("2"); // x=1时会输出"12"
        break;
}
 

Default分支的用法

Default分支是可选的,当所有case均不匹配时执行。通常用于处理非法或意外输入。

switch (grade) {
    case 'A':
        printf("优秀");
        break;
    case 'B':
        printf("良好");
        break;
    default:
        printf("无效成绩");
}
 

穿透现象的应用

故意省略break可实现多个case共享同一段代码。例如处理连续范围的值:

switch (score / 10) {
    case 10:
    case 9:
        printf("A");
        break;
    case 8:
        printf("B");
        break;
    // 其他分段...
}
 

注意事项

  • Case标签不能是变量或非常量表达式(如case x+1:无效)。
  • Switch嵌套时,内层Switch的break仅退出当前层。
  • 避免在case内定义变量(需用花括号形成块作用域)。
switch (a) {
    case 1: {
        int b = 10; // 必须用花括号
        printf("%d", b);
        break;
    }
}
 

5.循环结构for

for循环的语法结构如下:

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

初始化表达式在循环开始前执行一次,通常用于设置循环变量的初始值。条件表达式在每次循环迭代前进行判断,如果为真则执行循环体。更新表达式在每次循环迭代后执行,通常用于更新循环变量。

for循环的执行流程

  1. 执行初始化表达式,设置循环变量的初始值。
  2. 判断条件表达式是否为真,若为真则进入循环体,否则退出循环。
  3. 执行循环体中的代码。
  4. 执行更新表达式,改变循环变量的值。
  5. 回到第2步,继续判断条件表达式。

for循环的嵌套

for循环可以嵌套使用,用于处理多维数据或多重循环逻辑。例如:

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

for循环的变体

for循环的三个表达式可以灵活调整,甚至省略。例如,初始化表达式可以放在for循环之前:

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

条件表达式也可以省略,但需在循环体内设置退出条件以避免无限循环:

for (int i = 0; ; i++) {
    if (i >= 5) break;
    printf("%d\n", i);
}
 

for循环与数组遍历

for循环常用于遍历数组,通过循环变量作为数组索引:

int arr[] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
    printf("%d\n", arr[i]);
}
 

for循环的注意事项

  1. 循环变量的作用域仅限于for循环内部(C99及以上版本支持)。
  2. 避免在循环体内修改循环变量,否则可能导致逻辑错误。
  3. 注意循环条件的边界情况,防止数组越界或无限循环。

6.循环结构while

while循环的语法结构:

while (condition) {
    // 循环体语句
}
 

condition为循环条件,当条件为真(非零)时执行循环体。循环体可以是单条语句或代码块。

while循环的执行流程

程序先判断condition是否为真。如果为真,执行循环体语句,执行完毕后再次判断condition。这个过程重复进行,直到condition为假(零)时跳出循环。

while循环的特点

while循环是一种入口条件循环,意味着循环体可能一次都不执行(如果初始条件即为假)。循环体中通常包含改变循环条件的语句,否则可能造成无限循环。

while循环的常见应用场景

适用于不确定循环次数的情况,例如读取用户输入直到满足特定条件、处理链表等数据结构、实现游戏主循环等。

while循环的注意事项

要确保循环条件最终能变为假,避免无限循环。在循环体中应有改变循环条件的语句。对于需要至少执行一次的情况,可考虑使用do-while循环。

例:

#include <stdio.h>
int main() {
    int count = 0;
    while (count < 5) {
        printf("Count is %d\n", count);
        count++;
    }
    return 0;
}
 

此示例会输出0到4的数字,每次循环增加count的值,直到不满足count<5的条件。

while与for循环的对比

while循环更适用于不确定循环次数的情况,而for循环更适合明确循环次数的情况。两种循环可以相互转换,但各有其适用的场景。

7.跳转语句

C语言中的跳转语句允许程序控制流无条件转移到指定位置,主要包括breakcontinuegotoreturn四种。这些语句在特定场景下优化代码结构或实现特定逻辑。

break语句

break语句用于立即终止所在循环(forwhiledo-while)或switch语句的执行,控制流跳转到循环或switch之后的代码。

for (int i = 0; i < 10; i++) {
    if (i == 5) {
        break; // 当i等于5时跳出循环
    }
    printf("%d ", i);
}
// 输出:0 1 2 3 4
 

continue语句

continue语句跳过当前循环的剩余部分,直接进入下一次循环的条件判断(forwhiledo-while)。

for (int i = 0; i < 5; i++) {
    if (i == 2) {
        continue; // 跳过i等于2时的循环体
    }
    printf("%d ", i);
}
// 输出:0 1 3 4
 

goto语句

goto语句无条件跳转到同一函数内定义的标签处。需谨慎使用,避免破坏代码结构。

int i = 0;
start:
    printf("%d ", i);
    i++;
    if (i < 5) goto start; // 跳转到标签"start"
// 输出:0 1 2 3 4
 

return语句

return语句终止当前函数的执行并返回指定值(若函数有返回值)。若无返回值,可单独使用return;

int add(int a, int b) {
    return a + b; // 返回两数之和
}
 

注意事项

  • breakcontinue仅作用于最内层循环。
  • goto可能导致代码难以维护,通常推荐使用结构化控制语句替代。
  • return的返回值类型需与函数声明匹配。

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值