涵盖了谭浩强C书中的所有语法&&函数用法

发布于:2025-07-03 ⋅ 阅读:(36) ⋅ 点赞:(0)
/*
 * demo.c
 * 覆盖指定教材中所有出现的 C 语言核心语法特性,每项仅使用一次,注释为中文。
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* 宏定义与常量 */
#define PI 3.14
#define MAX(x, y) ((x) > (y) ? (x) : (y))
/*宏是简单的文本替换。为了防止在宏展开时因为运算符优先级问题导致错误,
宏定义中的**每个参数** (**`x`**, **`y`**) 和**整个替换体**都用括号包裹起来至关重要。*/

/* 枚举、结构体、共用体、typedef */
typedef enum { RED, GREEN, BLUE } Color;
typedef struct { int x, y; } Point;
union Value { int i; float f; };

/* 函数声明 */
int add(int a, int b);
int fact(int n);

/* 函数定义 */
int add(int a, int b) {
    return a + b;
}

int fact(int n) {
    if (n <= 1) return 1;
    return n * fact(n - 1);
}

/* 主函数 */
int main(void) {
    /* 常量与变量 */
    int a = 3, b = 4;
    float f = 2.5;
    char ch = 'A';
    char str[20] = "Hello";

    /* 表达式与运算符 */
    int result = a * b + (int)f;
    printf("表达式结果: %d\\n", result);

    /* 输入输出 */
    printf("请输入一个整数: ");
    scanf("%d", &a);
    printf("输入的是: %d\\n", a);

    /* if-else、关系与逻辑运算 */
    if (a > 0 && a < 100)
        printf("a 是正整数\\n");
    else
        printf("a 不是正整数\\n");

    /* switch 语句 */
    Color c = GREEN;
    switch (c) {
        case RED: printf("红色\\n"); break;
        case GREEN: printf("绿色\\n"); break;
        case BLUE: printf("蓝色\\n"); break;
        default: printf("未知颜色\\n");
    }

    /* while 循环 */
    int i = 0;
    while (i < 2) {
        printf("while: %d\\n", i);
        i++;
    }

    /* do-while 循环 */
    int j = 0;
    do {
        printf("do-while: %d\\n", j);
        j++;
    } while (j < 1);

    /* for 循环、continue、break */
    for (int k = 0; k < 5; k++) {
        if (k == 2) continue;
        if (k == 4) break;
        printf("for 循环: %d\\n", k);
    }

    /* 一维数组 */
    int arr[3] = {1, 2, 3};
    printf("数组元素: %d\\n", arr[1]);

    /* 二维数组 */
    int mat[2][2] = {{1,2},{3,4}};
    printf("矩阵元素: %d\\n", mat[1][0]);

    /* 字符数组与字符串函数 */
    strcat(str, " C");
    printf("字符串拼接后: %s\\n", str);

    /* 函数调用与返回 */
    printf("3 + 4 = %d\\n", add(3, 4));

    /* 递归 */
    printf("5 的阶乘 = %d\\n", fact(5));

    /* 指针与地址 */
    int *p = &a;
    printf("指针指向值: %d\\n", *p);

    /* 指针数组与多重指针 */
    int *parr[2] = {&a, &b};
    printf("指针数组第一个: %d\\n", *parr[0]);
    int **pp = &p;
    printf("多重指针访问: %d\\n", **pp);

    /* 结构体变量与指针 */
    Point pt = {1, 2};
    Point *ppt = &pt;
    printf("结构体成员: %d,%d\\n", ppt->x, ppt->y);

    /* 共用体 */
    union Value v;
    v.i = 10;
    printf("共用体整数: %d\\n", v.i);

    /* 动态内存 */
    int *dyn = (int*)malloc(sizeof(int)*3);
    dyn[0] = 7;
    printf("动态内存: %d\\n", dyn[0]);
    free(dyn);

    /* 文件读写 */
    FILE *fp = fopen("out.txt", "w");
    if (fp) {
        fprintf(fp, "文件测试\\n");
        fclose(fp);
    }

    return 0;
}

 后续会做文字总结补充,方便省流阅读。


网站公告

今日签到

点亮在社区的每一天
去签到