C语言第3讲:分支和循环

大家好!这篇把分支和循环上下两讲全部整合,从基础语法到实战猜数字小游戏,一篇吃透 C 语言最核心的逻辑结构,新手必看、必练、必收藏!


📑 完整目录

  1. if 语句
  2. 关系操作符
  3. 条件操作符
  4. 逻辑操作符:&&、||、!
  5. switch 语句
  6. while 循环
  7. for 循环
  8. do-while 循环
  9. break 和 continue 语句
  10. 循环的嵌套
  11. goto 语句
  12. 随机数生成(rand/srand/time)
  13. 猜数字游戏(基础版 + 进阶版)
  14. 全套知识点总结

1. if 语句(最常用分支)

1.1 基础 if

复制代码
if(表达式)
    语句;
  • 非 0 为真,执行语句;0 为假,不执行。

1.2 if...else... 二选一

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

1.3 多条语句必须用 {}

if/else 默认只控制一条语句,多语句必须加大括号。

1.4 嵌套 if(多条件判断)

复制代码
if(条件1) ...
else if(条件2) ...
else ...

1.5 悬空 else 问题

else 永远匹配最近的 if ,加 {} 可避免歧义。


2. 关系操作符(比较用)

  • > < >= <= == !=
  • 结果:真 = 1,假 = 0
  • 易错点:
    • 不要把 == 写成 =
    • 不要写 18<=age<=36,应写 age>=18 && age<=36

3. 条件操作符(三目运算符)

格式:表达式1 ? 表达式2 : 表达式3

  • 表达式 1 为真 → 执行表达式 2
  • 表达式 1 为假 → 执行表达式 3
  • 简化 if...else...,代码更简洁。

4. 逻辑操作符(组合条件)

  • ! 逻辑非(真↔假)
  • && 逻辑与(两边都真才真)
  • || 逻辑或(一边真就真)

短路特性

  • &&:左边为假,右边不执行
  • ||:左边为真,右边不执行

5. switch 语句(多分支)

复制代码
switch(整型表达式)
{
    case 常量值:
        语句;
        break;
    default:
        语句;
        break;
}
  • 必须是整型表达式
  • 每个 case 一般要加 break,否则会穿透
  • default 处理意外情况

6. while 循环

复制代码
while(表达式)
{
    循环体;
}
  • 先判断,再执行
  • 条件为假直接退出

7. for 循环(最常用)

复制代码
for(初始化; 判断; 调整)
{
    循环体;
}
  • 初始化只执行 1 次
  • 判断→执行→调整→再判断
  • 结构紧凑,便于维护

8. do-while 循环

复制代码
do
{
    循环体;
}while(表达式);
  • 先执行,后判断
  • 循环体至少执行 1 次

9. break 和 continue

  • break :永久终止本层循环 /switch
  • continue :跳过本次循环剩余代码,直接进入下一次
    • while:跳到判断
    • for:跳到调整(i++)

10. 循环嵌套

一层循环控制范围,内层循环做判断。经典案例:100~200 之间的素数


11. goto 语句

  • 同一函数内跳转到标号
  • 多层循环快速退出很方便
  • 日常尽量少用,避免逻辑混乱

12. 随机数生成(猜数字必备)

12.1 rand () ------ 生成伪随机数

复制代码
int rand(void);

头文件:stdlib.h范围:0 ~ 32767

12.2 srand () ------ 设置随机种子

复制代码
void srand(unsigned int seed);

12.3 time () ------ 用时间做动态种子

复制代码
srand((unsigned int)time(NULL));

头文件:time.h注意:整个程序只调用 1 次!

12.4 随机数范围公式

  • 1~100:rand()%100 + 1
  • a~b:a + rand()%(b-a+1)

13. 猜数字游戏(完整代码)

13.1 基础版

复制代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void game()
{
    int r = rand()%100+1;
    int guess = 0;
    while(1)
    {
        printf("请猜数字:");
        scanf("%d", &guess);
        if(guess < r)
            printf("猜小了\n");
        else if(guess > r)
            printf("猜大了\n");
        else
        {
            printf("恭喜你,猜对了!\n");
            break;
        }
    }
}

void menu()
{
    printf("***********************\n");
    printf("******  1. play   *****\n");
    printf("******  0. exit   *****\n");
    printf("***********************\n");
}

int main()
{
    int input = 0;
    srand((unsigned int)time(NULL));
    do
    {
        menu();
        printf("请选择:");
        scanf("%d", &input);
        switch(input)
        {
        case 1:
            game();
            break;
        case 0:
            printf("游戏结束\n");
            break;
        default:
            printf("选择错误,请重新选择\n");
            break;
        }
    } while(input);
    return 0;
}

13.2 进阶版(限制 5 次机会)

复制代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void game()
{
    int r = rand()%100+1;
    int guess = 0;
    int count = 5;
    while(count)
    {
        printf("\n你还有 %d 次机会\n", count);
        printf("请猜数字:");
        scanf("%d", &guess);
        if(guess < r)
            printf("猜小了\n");
        else if(guess > r)
            printf("猜大了\n");
        else
        {
            printf("恭喜你,猜对了!\n");
            break;
        }
        count--;
    }
    if(count == 0)
        printf("你失败了,正确答案是:%d\n", r);
}

void menu()
{
    printf("***********************\n");
    printf("******  1. play   *****\n");
    printf("******  0. exit   *****\n");
    printf("***********************\n");
}

int main()
{
    int input = 0;
    srand((unsigned int)time(NULL));
    do
    {
        menu();
        printf("请选择:");
        scanf("%d", &input);
        switch(input)
        {
        case 1:
            game();
            break;
        case 0:
            printf("游戏结束\n");
            break;
        default:
            printf("选择错误,请重新选择\n");
            break;
        }
    } while(input);
    return 0;
}

14. 全套知识点总结

  1. 分支:if /if-else/switch 处理多路径选择
  2. 循环:while /for/do-while 处理重复逻辑
  3. 跳转:break 退出、continue 跳过、goto 自由跳转
  4. 实战:随机数 + 分支 + 循环 = 可写小游戏
  5. 规范 :多用 {}、函数拆分、代码清晰易读

✨ 结尾鼓励

分支与循环是 C 语言真正的入门门槛 ,把这篇内容看懂、代码敲会,你就已经具备了写小程序、小游戏的能力!编程没有捷径,多敲多练才是王道~

对你有帮助的话,欢迎点赞、收藏、关注,持续更新 C 语言全套精讲!

相关推荐
ytttr8731 小时前
惯性导航精解算程序(MATLAB实现)
开发语言·matlab
艺杯羹1 小时前
从零搭建CSDN博客爬虫:Python爬虫+多格式导出完整教程
开发语言·爬虫·python·开源·gui·csdn
码农小韩1 小时前
QT学习记录(三)——C++学习基础(三)
开发语言·c++·qt·学习·算法·嵌入式软件
buhuizhiyuci1 小时前
【QT-百日筑基篇】找寻安静的落脚处,选择合适的功法进行修炼-QT深度了解对象树的特性
开发语言·qt
wjs20241 小时前
jQuery Mobile 触摸事件详解
开发语言
承渊政道1 小时前
【动态规划算法】(似包非包以及卡特兰数问题深入解析)
数据结构·c++·学习·算法·leetcode·动态规划·哈希算法
kyriewen111 小时前
你的前端滤镜慢得像PPT?用Rust+WebAssembly,一秒处理4K图
开发语言·前端·javascript·设计模式·rust·ecmascript·powerpoint
小杍随笔1 小时前
【Tauri 2 + Rust 配置 WebView2 缓存数据存储到安装目录】
开发语言·后端·rust·tauri