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

前言:

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


一、常量

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

1. 字面常量

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

// 整数字面常量
12, 23, 34

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

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

2. const 修饰的常量

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

const int a = 10;
// a = 20; //  编译错误,const 变量不可修改

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

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

#define MAX 100
// 使用 MAX 的地方会被替换为 100

4. 枚举常量

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

enum color {
    red,    // 0
    blue,   // 1
    green   // 2
};

注意事项

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

二、强制类型转换

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

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

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

三、基础运算示例

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

#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 读取用户输入。

#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

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

if (表达式)
{
    语句块;
}

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

2. 双分支 if-else

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

if (表达式)
{
    语句块1;
}
else
{
    语句块2;
}

3. 多分支 if-else if-else

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

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

五、关系运算符

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

六、逻辑运算符

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

七、实战代码示例

示例1:if-else 条件判断

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

#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 来存储比较结果。

#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 语言中不同数据类型的定义和使用。

#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 码

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

#include <stdio.h>

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

    return 0;
}

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

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

#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 逐步与每个数比较,找出最大值。

#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:逻辑运算符直接比较)

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

#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 码差值实现字符大小写互转。

#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 码规律可以轻松实现大小写转换等操作。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值