C语言分支与循环(上)----分支结构

一、分支语句

1. if 家族

1.1 if语句的语法形式

if语句非常简单,其语法形式如下:

if ()表达式
   语句;

多个语句用{ }括起来,其中表达式为真的时候语句执行,为假的时候语句不执行。

这是0为假,非0为真,当然根据我的实践,这里就算是你的表达式结果恰好为0,那也是假的,语句将不执行比如:

if(n % 2)
   printf("%d是奇数\n" ,n);

1.2 else 语句

      上面单个的 if 语句还不能看作是分支结构,充其量就是一个条件语句,要想获得真正的分支结构,就得引入else语句配合着 if 语句使用, 其语法形式如下:

if (表达式)
   语句;
else
   语句;

这里用样的,如果是多个语句,也要用{ }括起来

else语句通俗点说就是当不满足上面 if 执行的条件时 ,else下面的语句才会被执行,例如:

if(n % 2)
   printf("%d是奇数\n" ,n);
else
   printf("%d是偶数\n" ,n);

​

1.3 else if 语句

那如果我想要的分支有很多种情况而非只有两种情况怎么办呢?if 家族还有else if 语句,其语法形式如下:

if (表达式1)
   语句;
else if (表达式2)
   语句;
else if (表达式3)
   语句;
else
   语句;

同样的,只有当表达式为真的时候,所对应的语句才会执行,举个栗子:

if (age < 3)
   printg("婴儿\n");
else if (age > 3 && age < 12)
   printg("儿童\n");
else if (age > 12 && age < 18)
   printg("青年\n");
else if (age > 18 && age < 60)
   printg("成年\n");
else if (age > 60 && age < 80)
   printg("老年\n");
 else if (age > 80)
   printg("老寿星\n");

以上就是 if 家族的用法,下面是一个技巧

众所周知,在C语言中 = 为赋值符,而 == 才是相等符,因此我们的 if 语句判断的表达式中不能吧赋值符当成相等的意思来使用,在VS2022 中,如果你错把赋值符当成相等的意思来用,编译不会报错,因为赋值成功 所以 if 下面的语句正常执行,例如:

if ( a = 5 )
   语句;

这里不会报错!因为成功的把5赋值给了a,所以语句会被执行

正确的应该是这样的:

if ( a == 5 )
   语句;

所以为了避免我们错用了赋值符而不知道,所以老司机一般这样写:

if ( 5 == a )
   语句;

​

把常量放在前面。就算真的错用了辅助符,编译器也会报错的

2、switch 语句

2.1 switch语法形式:

switch(表达式)
{
   case 常量1 :语句;
   case 常量2 :语句;
   case 常量n :语句;
   default:语句;
}

注意:switch后的表达式必须为整型表达式!!!字符类型也可以,因为字符类型也属于整型家族(ASCII表),而case后面的常量也必须为整型(必须是常量)

举个例子:

  switch (day) //day为用户输入的整型数字
{
    case 1:
      printf("星期一\n");
      break;
    case 2:
      printf("星期二\n");
      break;
    case 3:
      printf("星期三\n");
      break;
    case 4:
      printf("星期四\n");
      break;
    case 5:
      printf("星期五\n");
      break;
    case 6:
      printf("星期六\n");
      break;
    case 7:
      printf("星期日\n");
      break;
    default:
      printf("输入错误:请输入 1 到 7 之间的数字。\n");
      break;
  }

想必大家都发现了break吧,为什么每个case后边都要添加break呢?

在switch家族中,语句的执行是从第一个符合条件的case开始执行的,而那一个符合条件的case语句后面所有的case语句都会被执行,那怎么办呢,那就添加break语句,跳出这个分支结构,注意:用不用break取决于具体情况,并不是每一个case后面都要添加break!

2.2 其他:

default与case没有先后顺序

default是一个case也没有被触发时才会被执行的

二、循环语句

告别重复,解放双手

循环结构是编程中不可或缺的一部分,它允许我们重复执行一段代码,从而避免编写大量重复的语句。在C语言中,循环结构主要有三种: for 循环、 while 循环和 do while 循环。

1.  for 循环:固定次数的利器

1.1 for 循环语法结构:

for (初始化;条件;调整)
  {
     语句;
  }

初始化 :在循环开始前执行一次,通常用于初始化循环变量。
条件 :每次循环开始前都会判断条件是否为真。如果为真,则执行循环体;如果为假,则退出循环。
调整:每次循环体执行完毕后,循环变量进行调整

示例:

#include <stdio.h>

int main() 
{
  int i;
  for (i = 0; i < 10; i++) 
  {
    printf("%d ", i);
  }
  return 0;
}

这段代码会打印出 数字1~9

1.2 for 循环注意事项

*    for 循环的三个部分都可以省略,但分号不能省略。例如  for (;;)  表示一个无限循环。
*   可以在初始化部分声明循环变量,例如  for (int i = 0; i < 10; i++) ,但这种声明方式的作用域只在 for 循环内部。
*   注意循环条件的判断,避免出现无限循环。

 2.  while 循环:条件为王的循环

 while 循环在每次循环开始前判断条件是否为真,如果为真,则执行循环体;如果为假,则退出循环。

2.1 while 循环的基本语法结构

while (表达式)
   语句;

  int i = 0;
  while (i < 10)
  {
    printf("%d ", i);
    i++; // 必须要有更新语句,否则会陷入无限循环
  }
  

这段代码会打印出 数字1~9

2.2 while 注意事项:

(1)while 循环需要手动初始化循环变量,并在循环体内更新循环变量的值,否则容易陷入无限循环。
(2)while 循环适用于循环次数不确定的情况,只要条件满足,循环就会一直执行。

3.  do while 循环:至少执行一次的循环

do while 循环先执行循环体,然后再判断条件是否为真。如果为真,则继续执行循环;如果为假,则退出循环。这意味着 do while 循环至少会执行一次。

3.1 do while 的基本语法形式

do
  语句;
while(表达式);

举个栗子:

 do
 {
    printf("%d ", i);
    i++;
 } while (i < 10);
 

这段代码会打印出 数字1~9 

3.2 do while 注意事项

(1)do while 循环的循环体至少会执行一次。                                                                         (2)do while 循环需要在循环体内更新循环变量的值,否则容易陷入无限循环。
(3)do while 循环的结尾需要加上分号。

 4. 循环控制语句:break 和 continue

C语言提供了 break 和 continue 语句来更灵活地控制循环的执行。

break 语句:用于立即退出当前循环。
continue  语句:用于跳过当前循环的剩余部分,直接进入下一次循环。

break 语句只会退出当前循环,如果循环嵌套,只会退出最内层的循环。

练习题:

1.  使用循环结构计算 1 到 100 的和。
2.  使用循环结构打印一个九九乘法表。
3.  使用循环结构判断一个数是否为素数。

希望这篇博客文章对您有所帮助!如果您需要更详细的解释或有其他问题,请随时提出。
 

<think>嗯,用户想要了解C语言中的分支循环结构的使用指南,特别是前言部分。首先,我需要回顾一下用户提供的引用内容,看看有没有相关的信息可以利用。 引用1提到分支语句和循环语句,用分号分割语句,类似于自然语言中的句号。这可能涉及到基本语法结构,需要强调分号在C语句中的重要性。引用2和引用3都提到了具体的循环例子,比如do-while循环和for循环,还有处理输入缓冲区的问题。引用4展示了for循环的变种,比如多个变量的初始化。引用5看起来是硬件相关的代码,可能不太相关,但暂时先忽略。 用户的问题包括分支循环的概念、使用场景、语法结构,可能还需要前言部分引导读者。需要结构清晰,分点讲解。前言部分应该概述这两个结构的重要性,以及它们在程序控制中的作用。 用户可能作为初学者,需要明确的概念解释和实例。要确保术语准确,同时用易懂的中文。另外,用户提供的示例代码中有一些需要注意的地方,比如使用do-while来处理可能的0值,这可以作为一个例子说明循环的选择。 需要检查是否有覆盖所有基本结构:if、switch、while、do-while、for,以及它们的变种。同时,使用场景部分需要举例说明何时选择哪种结构,比如已知次数用for,至少执行一次用do-while等。 可能的问题点:用户提到的输入缓冲区清理,在分支循环中的应用,需要结合引用3中的内容,说明在读取输入时如何处理异常情况,比如使用循环来清空缓冲区。 还要注意生成相关问题,比如比较不同循环结构,或者错误处理案例。需要确保问题相关且能引导进一步学习。 最后,确保回答符合系统指令,数学公式用$...$,代码块正确,引用标注正确。检查是否有遗漏的结构或常见错误,比如忘记break在switch中的使用,或者循环中的无限循环风险。</think># C语言分支循环结构使用指南(前言) ## 一、基础概念解析 在C语言中,**分支结构**用于根据条件执行不同代码块,**循环结构**用于重复执行特定代码。它们共同构成了程序的三种基本控制结构(顺序、分支循环)中的核心组成部分[^1]。 ### 1. 分支结构类型 | 结构类型 | 语法特点 | 适用场景 | |---------|---------|---------| | `if`语句 | 单条件判断 | 简单条件分支 | | `if-else` | 双分支选择 | 非此即彼的判断 | | `switch` | 多分支选择 | 离散值匹配场景 | ### 2. 循环结构类型 | 循环类型 | 执行特点 | 典型应用场景 | |---------|---------|-------------| | `while` | 先判断后执行 | 不确定循环次数 | | `do-while` | 先执行后判断 | 至少执行一次 | | `for` | 明确循环次数 | 已知迭代范围 | ## 二、核心语法规范 ### 分支结构示例 ```c // if-else 结构 if(x > 0) { printf("正数"); } else if(x == 0) { printf("零"); } else { printf("负数"); } // switch 结构 switch(grade) { case 'A': printf("优秀"); break; case 'B': printf("良好"); break; default: printf("不合格"); } ``` ### 循环结构示例 ```c // while清空输入缓冲区[^3] while((ch = getchar()) != '\n' && ch != EOF); // for循环变种[^4] for(int i=0, j=10; i<j; i++, j--) { printf("%d vs %d\n", i, j); } ``` ## 三、开发实践建议 1. **循环控制优先级**:优先选择`for`处理计数循环,`while`处理条件循环,`do-while`用于必须执行场景 2. **分支结构优化**:超过3个条件时优先考虑`switch`结构,注意必须添加`break`防止穿透 3. **复杂度控制**:单个循环体代码行数建议不超过屏幕可见范围(约20行) ## 四、典型应用场景 - **用户输入验证**:通过`do-while`确保至少执行一次输入检测 ```c do { printf("输入1-100:"); scanf("%d", &num); } while(num < 1 || num > 100); ``` - **数据遍历处理**:使用`for`实现数组遍历 ```c int arr[5] = {1,2,3,4,5}; for(int i=0; i<sizeof(arr)/sizeof(arr[0]); i++) { printf("%d ", arr[i]); } ``` - **状态机实现**:通过`switch`处理多状态转换 ```c switch(currentState) { case IDLE: handle_idle(); break; case RUN: handle_run(); break; case ERROR: handle_error(); break; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值