C语言之 循环语句:程序运行的核心动力(上)

个人主页:strive-debug

在 C 语言中,分支结构可以通过 `if`、`switch` 语句来实现,循环结构则可以通过 `for`、`while`、`do while` 语句来实现。

`if` 语句

`if` 语句的语法形式如下:

复制代码
if (表达式)
    语句;

如果表达式成立(为真),则执行语句;如果表达式不成立(为假),则不执行语句。在 C 语言中,0 表示假,非0 表示真。因此,如果表达式的结果是0,则语句不执行;如果表达式的结果不是0,则语句执行。

代码演示:

复制代码
#include <stdio.h>
int main()
{
 int num = 0;
 scanf("%d", &num);
 if(num % 2 == 1)
 printf("%d 是奇数\n", num);
 return 0;
}

如果一个数不是奇数,那就是偶数了。为了清楚地判断一个整数是奇数还是偶数,可以使用 `if...else...` 语句。语法形式如下:

复制代码
if (表达式)
    语句1;
else
    语句2;

例子

输入一个整数,判断是否为奇数,如果是奇数打印"是奇数",否则打印"偶数"。

复制代码
#include <stdio.h>
int main()
{
    int num = 0;
    scanf("%d", &num);
    if(num % 2 == 1)
        printf("%d 是奇数
", num);
    else
        printf("%d 是偶数
", num);
    return 0;
}

分支中包含多条语句

默认情况下,`if` 和 `else` 语句中只控制一条语句。例如:

复制代码
#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d", &age);
    if(age >= 80)
    {
        printf("该入土了
");
        printf("可以等着了
");
    }
    else
    {
        printf("你还有时间
");
    }
    return 0;
}

嵌套 `if`

在 `if...else` 语句中,`else` 可以与另一个 `if` 语句连用,构成多重判断。例如:输入一个整数,判断输入的整数是0,正数还是负数。

复制代码
#include <stdio.h>
int main()
{
    int num = 0;
    scanf("%d", &num);
    if(num == 0)
        printf("输入的数字是0
");
    else if(num > 0) // 这里的 if 相当于嵌套在 else 语句中,形成了嵌套结构
        printf("输入的数字是正数
");
    else
        printf("输入的数字是负数
");
    return 0;
}

有了嵌套 `if` 语句,就可以完成更多复杂逻辑的判断。

悬空 `else` 问题

如果有多个 `if` 和 `else`,记住这样一条规则:`else` 总是跟最接近的 `if` 匹配。例如:

复制代码
#include <stdio.h>
int main()
{
    int num = 0;
    scanf("%d", &num);
    if(num == 0)
        printf("输入的数字是0
");
    else if(num > 0) // 这里的 if 相当于嵌套在 else 语句中,形成了嵌套结构
        printf("输入的数字是正数
");
    else
        printf("输入的数字是负数
");
    return 0;
}

通过适当的大括号,可以让代码的逻辑更加清晰,提高可读性。

`switch` 语句

`switch` 语句根据表达式的值使程序跳转到不同的代码段去执行。其语法形式如下:

复制代码
switch (表达式)
{
    case 常量1:
        语句1;
        break;
    case 常量2:
        语句2;
        break;
    // ...
    default:
        语句n;
        break;
}

输入任意一个整数值,计算除3之后的余数

使用 `if` 语句完成:

复制代码
#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    if(n % 3 == 0)
        printf("整除,余数为0
");
    else if(n % 3 == 1)
        printf("余数是1
");
    else
        printf("余数是2
");
    return 0;
}

使用 `switch` 语句改写:

复制代码
#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    switch(n % 3)
    {
        case 0:
            printf("整除,余数为0
"); 
            break;
        case 1:
            printf("余数是1
"); 
            break;
        case 2:
            printf("余数是2
"); 
            break;
    }
    return 0;
}

注意事项:

  1. `case` 和后边的数字之间必须有空格。

  2. 每一个 `case` 语句中的代码执行完成后,需要加上 `break`,才能跳出这个 `switch` 语句。

相关推荐
地平线开发者11 分钟前
CLIP 的零样本分类:一组文本如何变成图像分类器?
算法
京东云开发者1 小时前
从“会生成”到“能生产”:萤火虫 AIGC 平台的 AI Infra 实践
算法·aigc·产品
youshi66681 小时前
PID——算法改进
算法
一只不想敲代码的程序猿2 小时前
如何更高效地拆解问题?
算法
微尘hjx3 小时前
【Deep-OC-SORT 02】多轨迹算法Deep-OC-SORT-相对 OC-SORT 的改进点
人工智能·算法·yolo·目标跟踪·视觉检测·ultralytics·deep-oc-sort
梦帮科技3 小时前
意识启发式量子隧穿退火算法用于全局优化 (CITA) 完整技术指南
网络·人工智能·算法·量子计算·模拟退火算法
一去不复返的通信er4 小时前
排序 + 双指针:力扣15三数之和
算法·leetcode
Pniubi5 小时前
力扣3无重复字符的最长字串(滑动窗口)
算法·leetcode·职场和发展
On The Road :5 小时前
深入理解 JVM 垃圾回收:GC 是什么、如何判定垃圾、四大回收算法全解析
jvm·算法
微尘hjx6 小时前
【Deep-OC-SORT 03】多轨迹算法Deep-OC-SORT-卡尔曼滤波预测过程
算法·yolo·目标跟踪·ultralytics·车跟踪·轨迹算法·deep-oc-sort