// ===== CodeLab: C 数据类型与变量 =====
// 来源: https://aoerliang.dpdns.org/articles/c-data-types
// 以下代码片段按文章出现顺序拼接, 共 5 段

// ----- 片段 1 (c) -----
#include <stdio.h>

int main(void) {
    int age = 18;              // 声明并初始化
    float price = 3.99f;       // 浮点字面量加 f 后缀
    double pi = 3.14159265358979;
    char grade = 'A';          // 字符用单引号

    printf("age=%d, price=%.2f, pi=%.15f, grade=%c\n",
           age, price, pi, grade);
    return 0;
}

// ----- 片段 2 (c) -----
#include <stdio.h>
#include <limits.h>

int main(void) {
    printf("int 范围: %d ~ %d\n", INT_MIN, INT_MAX);
    printf("long long 范围: %lld ~ %lld\n", LLONG_MIN, LLONG_MAX);
    printf("unsigned int 最大: %u\n", UINT_MAX);
    printf("char 大小: %zu 字节\n", sizeof(char));
    return 0;
}

// ----- 片段 3 (c) -----
#include <stdio.h>

int main(void) {
    double sum = 0.1 + 0.2;
    printf("0.1 + 0.2 = %.20f\n", sum);  // 0.30000000000000004441
    if (sum == 0.3) {
        printf("相等\n");
    } else {
        printf("不相等!比较浮点数要用差值判断\n");
    }
    return 0;
}

// ----- 片段 4 (c) -----
#include <stdio.h>

#define PI 3.14159

int main(void) {
    const int DAYS = 7;
    // DAYS = 8;  // 错误:const 不可修改

    double r = 2.0;
    double area = PI * r * r;          // 隐式转换
    int n = (int)area;                 // 显式转换:截断小数
    printf("面积=%.2f, 取整后=%d\n", area, n);
    return 0;
}

// ----- 片段 5 (c) -----
#include <stdio.h>

int main(void) {
    char c = 'A';
    printf("'A' 的 ASCII 码: %d\n", c);   // 65
    printf("小写: %c\n", c + 32);         // 'a'
    return 0;
}
