/*
* 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;
}
后续会做文字总结补充,方便省流阅读。