【C语言基础】常量、选择结构与运算符全解析

前言:

C语言的选择结构(if-else)和常量是编程中最基础也最重要的概念之一。本文将结合代码示例,带你系统掌握C语言中的常量类型、选择结构、关系与逻辑运算符,并通过多个实战案例巩固理解。


一、常量

C语言中的常量有多种定义方式,每种方式各有特点:

1. 字面常量

直接写在代码中的数值或字符,无需声明。

cs 复制代码
// 整数字面常量
12, 23, 34

// 字符字面常量(单引号)
'A', 'b', '9'

// 字符串字面常量(双引号)
"hello world"

2. const 修饰的常量

将变量声明为只读,后续不能再赋值。

cs 复制代码
const int a = 10;
// a = 20; //  编译错误,const 变量不可修改

3. #define 定义的标识符常量(宏常量)

预处理阶段进行文本替换,不占内存空间。

cs 复制代码
#define MAX 100
// 使用 MAX 的地方会被替换为 100

4. 枚举常量

批量定义一组命名常量,默认从 0 开始递增。

cs 复制代码
enum color {
    red,    // 0
    blue,   // 1
    green   // 2
};

注意事项

  • 使用 char 类型时,单引号 '' 引单个字符,双引号 "" 引字符串。
  • 如果在算术运算中两边的数据类型不同,则运算结果的数据类型与操作数中具有较大范围的操作数相同。

二、强制类型转换

当需要将一种数据类型转换为另一种时,可以使用强制类型转换。

格式目标变量 = (目标数据类型)(表达式)

cs 复制代码
int c;
c = (int)(12.3 * 12 + 40); // 将浮点运算结果强制转换为整型

三、基础运算示例

功能:基础加法示例,演示变量定义、赋值和基本运算。

cs 复制代码
#include <stdio.h>

int main()
{
    int a, b;
    a = 5;
    b = 6;
    int c;
    c = a + b; // 给 c 赋值为 a + b == 给 c 赋值 5 + 6
    printf("hello world!\n %d + %d = %d", a, b, c);
    return 0;
}

功能 :输入输出加法示例,演示 scanf 读取用户输入。

cs 复制代码
#include <stdio.h>

int main()
{
    int a, b;
    a = 5; // 赋值
    b = 6;
    printf("请输入两个数:");
    scanf("%d %d", &a, &b); // 读取整型数字,并将值存储到变量 a 和 b 的地址中
    int c;
    c = a + b;
    printf("结果是:%d + %d = %d", a, b, c);
    return 0;
}

注意:判断结果返回非 0 为真,返回 0 为假。

四、选择结构之 if 语句

1. 单分支 if

当表达式为真时执行语句块,否则跳过。当语句块只有一句时可以省略 {}

cs 复制代码
if (表达式)
{
    语句块;
}

// 或者(单行时可省略大括号)
if (表达式)
    语句块;

2. 双分支 if-else

表达式为真执行语句块1,否则执行语句块2。

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

3. 多分支 if-else if-else

从上往下依次判断,一旦匹配成功就执行对应语句块,并跳过后续所有分支。

cs 复制代码
if (表达式1)
{
    语句块1;
}
else if (表达式2)
{
    语句块2;
}
// ...
else if (表达式n)
{
    语句块n;
}
else
{
    语句块n+1; // 以上条件都不满足时执行
}

五、关系运算符

|-----|------|
| 运算符 | 含义 |
| == | 等于 |
| != | 不等于 |
| >= | 大于等于 |
| <= | 小于等于 |
| < | 小于 |
| > | 大于 |

六、逻辑运算符

运算符 含义 说明
&& 逻辑与 两边都为非0结果才为1;短路特性:左边为0时右边不再计算
` `
! 逻辑非 操作数为非0结果为0,操作数为0结果为1

七、实战代码示例

示例1:if-else 条件判断

功能:演示基本的条件分支结构,比较两个数的大小。

cs 复制代码
#include <stdio.h>

int main()
{
    int a, b;
    a = 5;
    b = 6;
    printf("请输入两个数:");
    scanf("%d %d", &a, &b);

    if (a >= b) // if 语句从上往下执行,当遇到符合条件的语句,将进入此语句,并且跳过之后的所有 else if 和 else 语句
    {
        printf("大的数是:%d", a);
    }
    else
    {
        printf("大的数是:%d", b);
    }

    return 0;
}

示例2:使用临时变量存储最大值

功能 :演示使用临时变量 max 来存储比较结果。

cs 复制代码
#include <stdio.h>

int main()
{
    int a, b;
    a = 5; // 赋值
    b = 6;
    printf("请输入两个数:");
    scanf("%d %d", &a, &b);

    int max = a; // 提前赋值,方便作比较
    if (b > max) // 如果 b 比原先的 max 大,那 b 就是新的 max
    {
        max = b;
    }

    printf("大的数是:%d", max);

    return 0;
}

示例3:数据类型演示

功能:展示 C 语言中不同数据类型的定义和使用。

cs 复制代码
#include <stdio.h>

int main()
{
    int a;
    a = 2;
    printf("%d \n", a);

    char b; // char 类型本质属于整型大家庭,先有数字,再从 ASCII 表中查找相应的字符
    b = '2'; // char 类型赋值 (字符,不是数字) 要打 '' 符号,否则打印数字
    printf("%c \n", b); // 打印字符

    float c; // 定义浮点型参数
    c = 3.14f; // f 用于强调是 float 类型,以免 c 转换到 double 类型;float 与 double 区别在于 double 的范围更大
    printf("%f \n", c);

    double e;
    e = 3.14;
    printf("%lf \n", e); // double 相当于 long float

    long long int num; // 定义长整型,与 int 相比,其范围更大
    num = 2025233503401;
    printf("%lld \n", num); // int 打印用 %d,long long int 打印用 %lld

    return 0;
}

示例4:字符与 ASCII 码

功能:演示字符和数字之间的转换关系。

cs 复制代码
#include <stdio.h>

int main()
{
    char i;
    i = 65;
    printf("字母是:%c ,数字是:%d \n", i, i);

    return 0;
}

示例5:三重判断(if-else if-else)

功能:演示多分支结构,比较两个数的大小关系。

cs 复制代码
#include <stdio.h>

int main()
{
    int i = 3, j = 4;

    if (i > j) // 三重判断,从上往下依次判断
    {
        printf("大的数是 %d", i);
    }
    else if (j > i)
    {
        printf("大的数是 %d", j);
    }
    else
    {
        printf("两个数相等!");
    }

    return 0;
}

示例6:三个数找最大值(方法1:临时变量逐步比较)

功能 :使用临时变量 max 逐步与每个数比较,找出最大值。

cs 复制代码
#include <stdio.h>

int main()
{
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);

    int max = a;
    if (a > max)
    {
        max = a;
    }
    if (b > max)
    {
        max = b;
    }
    if (c > max)
    {
        max = c;
    }

    printf("最大者是:%d", max);
    return 0;
}

示例7:三个数找最大值(方法2:逻辑运算符直接比较)

功能 :使用 && 逻辑运算符直接判断每个数是否为最大值。

cs 复制代码
#include <stdio.h>

int main()
{
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);

    if (a >= b && a >= c) // && 操作符要求两边同时为真,才表示真,否则为假;从左往右依次判断,一旦左边判断错误,右边将不再进行判断
    {
        printf("最大者是:%d", a);
    }
    else if (b >= a && b >= c)
    {
        printf("最大者是:%d", b);
    }
    else if (c >= a && c >= b)
    {
        printf("最大者是:%d", c);
    }

    return 0;
}

示例8:大小写转换

功能:演示利用 ASCII 码差值实现字符大小写互转。

cs 复制代码
#include <stdio.h>

int main()
{
    char i;
    scanf("%c", &i);

    if (i >= 'a' && i <= 'z')
    {
        // 小写转大写,大写 ASCII 码表 (65~90),小写 ASCII 码表 (97~122)
        printf("%c", i - ('a' - 'A'));
    }
    else if (i >= 'A' && i <= 'Z')
    {
        // 大写转小写
        printf("%c", i + ('a' - 'A'));
    }
    else
    {
        printf("%c", i);
    }

    return 0;
}
总结

本文系统梳理了C语言中的核心基础知识点:

  • 常量:字面常量、const常量、宏常量、枚举常量四种方式各有适用场景。
  • 选择结构:if、if-else、if-else if-else 三种分支形式,灵活应对不同判断需求。
  • 运算符:关系运算符返回 0/1,逻辑运算符具备短路特性,理解它们对写出高效代码至关重要。
  • ASCII 码:字符本质是整数,掌握 ASCII 码规律可以轻松实现大小写转换等操作。

学习建议:多动手敲代码,尝试修改示例中的条件和数值,观察输出变化,加深理解!

相关推荐
AI视觉网奇1 小时前
动作识别 视频理解大模型
开发语言·python·音视频
Suxing91 小时前
C语言基础分享:从“租房”到“拆迁”,C语言动态内存管理
java·数据结构·算法
SomeB1oody2 小时前
【RustyML入门】3.8. 正则化与归一化层
开发语言·后端·机器学习·rust·教程
__zRainy__2 小时前
Node系列 · Node基础:全局变量与全局对象
开发语言·前端·javascript
LuminousCPP2 小时前
单链表专题(四)-刷题复盘篇-LeetCode 138 随机链表复制|原地拷贝法突破复杂指针操作
数据结构·笔记·算法·leetcode·链表
鬼手点金2 小时前
Scrapy + Playwright 完整示例(JS 动态渲染网页)
开发语言·javascript·爬虫·python·scrapy·html·json
Mr. zhihao2 小时前
深度解析:为什么Java序列化需要搭配ByteArrayOutputStream?IO装饰器模式的精妙设计
java·开发语言·装饰器模式
逆境不可逃2 小时前
【LeetCode 912】排序数组——随机化快速排序详解
数据结构·算法·排序算法
Coder-magician2 小时前
《代码随想录》刷题打卡day31:动态规划-背包问题part02
算法·动态规划