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 语言全套精讲!

相关推荐
不会C语言的男孩1 分钟前
C++ Primer Plus 第8章:函数探幽
开发语言·c++
方也_arkling8 小时前
【Java-Day08】static / final / 枚举
java·开发语言
风吹夏回8 小时前
Python 全局异常处理:从“满屏 try-except”到优雅兜底
开发语言·python
Chengbei118 小时前
一站式源码安全检测工具、云安全 / APP / 小程序源码敏感信息递归多层目录扫描AK、JWT、手机号、身份证等敏感信息
java·开发语言·安全·web安全·网络安全·系统安全·安全架构
llz_1128 小时前
web-第一次课后作业
java·开发语言·idea
kkeeper~8 小时前
0基础C语言积跬步之数据在内存中的存储
c语言·数据结构·算法
小熊Coding8 小时前
Python爬取当当网二手图书项目实战!
开发语言·爬虫·python·beautifulsoup·requests·二手图书
秋98 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
xiaoshuaishuai89 小时前
C# 内存管理与资源泄漏
开发语言·c#
lsx2024069 小时前
SVN 检出操作
开发语言