一、基础语法阶段(2-3周)
1.1 开发环境搭建
-
安装GCC编译器(Windows: MinGW,Linux: gcc)
-
配置VS Code/CLion开发环境
-
掌握makefile基础语法
1.2 核心语法要素
c
复制
// 基础数据类型与运算 #include <stdio.h> int main() { int age = 25; double height = 1.75; char grade = 'A'; printf("年龄:%d\n", age); printf("身高:%.2f米\n", height); printf("等级:%c\n", grade); return 0; } // 条件分支与循环 #include <stdio.h> int main() { // 判断闰年 int year = 2024; if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { printf("%d年是闰年\n", year); } // 斐波那契数列 int n = 10, a = 0, b = 1; for (int i = 0; i < n; i++) { printf("%d ", a); int temp = a + b; a = b; b = temp; } return 0; }
1.3 数组与函数
c
复制
// 数组操作示例 #include <stdio.h> #define SIZE 5 void print_array(int arr[], int len) { for (int i = 0; i < len; i++) { printf("%d ", arr[i]); } printf("\n"); } int main() { int nums[SIZE] = {3, 1, 4, 1, 5}; // 冒泡排序 for (int i = 0; i < SIZE-1; i++) { for (int j = 0; j < SIZE-1-i; j++) { if (nums[j] > nums[j+1]) { int temp = nums[j]; nums[j] = nums[j+1]; nums[j+1] = temp; } } } print_array(nums, SIZE); // 输出:1 1 3 4 5 return 0; }
二、核心进阶阶段(3-4周)
2.1 指针与内存管理
c
复制
// 指针基础操作 #include <stdio.h> void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } int main() { int x = 10, y = 20; printf("交换前:x=%d, y=%d\n", x, y); swap(&x, &y); printf("交换后:x=%d, y=%d\n", x, y); // 指针与数组 int arr[] = {1,2,3,4,5}; int *ptr = arr; printf("第三元素:%d\n", *(ptr+2)); // 输出3 return 0; } // 动态内存分配 #include <stdio.h> #include <stdlib.h> int main() { int *arr = (int*)malloc(5 * sizeof(int)); if (arr == NULL) { printf("内存分配失败!\n"); return 1; } for (int i = 0; i < 5; i++) { arr[i] = i * 10; } free(arr); // 释放内存 return 0; }
2.2 结构体与联合体
c
复制
// 学生管理系统基础 #include <stdio.h> #include <string.h> struct Student { char name[20]; int id; float score; }; int main() { struct Student stu1; strcpy(stu1.name, "张三"); stu1.id = 1001; stu1.score = 89.5; printf("学生信息:\n"); printf("姓名:%s\n学号:%d\n成绩:%.1f\n", stu1.name, stu1.id, stu1.score); return 0; }
2.3 文件操作
c
复制
// 文件读写示例 #include <stdio.h> int main() { FILE *fp = fopen("data.txt", "w"); if (fp == NULL) { perror("文件打开失败"); return 1; } fprintf(fp, "Hello File System!\n"); fputs("第二行内容\n", fp); fclose(fp); // 读取文件 fp = fopen("data.txt", "r"); char buffer[100]; while (fgets(buffer, 100, fp) != NULL) { printf("%s", buffer); } fclose(fp); return 0; }
三、系统编程阶段(4-6周)
3.1 预处理器与编译过程
c
复制
// 条件编译示例 #include <stdio.h> #define DEBUG 1 int main() { #ifdef DEBUG printf("[调试模式]\n"); #endif #if VERSION >= 2024 printf("新版功能\n"); #else printf("基础功能\n"); #endif return 0; }
3.2 多文件编程
c
复制
/* math_util.h */ #ifndef MATH_UTIL_H #define MATH_UTIL_H int add(int a, int b); double circle_area(double r); #endif /* math_util.c */ #include "math_util.h" #define PI 3.1415926 int add(int a, int b) { return a + b; } double circle_area(double r) { return PI * r * r; } /* main.c */ #include <stdio.h> #include "math_util.h" int main() { printf("5+3=%d\n", add(5,3)); printf("半径2的圆面积:%.2f\n", circle_area(2.0)); return 0; }
3.3 Linux系统编程
LOL换肤官方网站_LOL换肤大师_LOL皮肤美化_LOL兔子换肤_UULOL换肤
c
复制
// 文件复制工具 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #define BUFFER_SIZE 4096 int main(int argc, char *argv[]) { if (argc != 3) { fprintf(stderr, "用法:%s 源文件 目标文件\n", argv[0]); exit(EXIT_FAILURE); } int src = open(argv[1], O_RDONLY); int dest = open(argv[2], O_WRONLY | O_CREAT, 0644); char buffer[BUFFER_SIZE]; ssize_t bytes; while ((bytes = read(src, buffer, BUFFER_SIZE)) > 0) { write(dest, buffer, bytes); } close(src); close(dest); return 0; }
四、深入进阶阶段(6-8周)
4.1 数据结构实现
c
复制
// 链表实现 #include <stdio.h> #include <stdlib.h> typedef struct Node { int data; struct Node *next; } Node; Node* create_node(int value) { Node *new_node = (Node*)malloc(sizeof(Node)); new_node->data = value; new_node->next = NULL; return new_node; } void append(Node **head, int value) { Node *new_node = create_node(value); if (*head == NULL) { *head = new_node; return; } Node *current = *head; while (current->next != NULL) { current = current->next; } current->next = new_node; } void print_list(Node *head) { while (head != NULL) { printf("%d -> ", head->data); head = head->next; } printf("NULL\n"); } int main() { Node *list = NULL; append(&list, 10); append(&list, 20); append(&list, 30); print_list(list); // 输出:10 -> 20 -> 30 -> NULL return 0; }
4.2 多线程编程
LOL换肤官方网站_LOL换肤大师_LOL皮肤美化_LOL换肤助手
c
复制
// 生产者消费者模型 #include <stdio.h> #include <pthread.h> #include <unistd.h> #define MAX_ITEMS 5 int buffer[MAX_ITEMS]; int count = 0; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond = PTHREAD_COND_INITIALIZER; void* producer(void *arg) { for (int i = 0; i < 10; i++) { pthread_mutex_lock(&mutex); while (count == MAX_ITEMS) { pthread_cond_wait(&cond, &mutex); } buffer[count++] = i; printf("生产:%d\n", i); pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); sleep(1); } return NULL; } void* consumer(void *arg) { for (int i = 0; i < 10; i++) { pthread_mutex_lock(&mutex); while (count == 0) { pthread_cond_wait(&cond, &mutex); } int item = buffer[--count]; printf("消费:%d\n", item); pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); sleep(2); } return NULL; } int main() { pthread_t t1, t2; pthread_create(&t1, NULL, producer, NULL); pthread_create(&t2, NULL, consumer, NULL); pthread_join(t1, NULL); pthread_join(t2, NULL); return 0; }
五、项目实战阶段(持续进行)
5.1 命令行计算器
c
复制
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> double calculate(double a, double b, char op) { switch(op) { case '+': return a + b; case '-': return a - b; case '*': return a * b; case '/': return b != 0 ? a / b : 0; default: return 0; } } LOL换肤官方网站_LOL换肤大师官网 int main() { char input[100]; printf("请输入表达式(示例:3 + 5):"); fgets(input, 100, stdin); double a, b; char op; if (sscanf(input, "%lf %c %lf", &a, &op, &b) == 3) { printf("结果:%.2f\n", calculate(a, b, op)); } else { printf("输入格式错误!\n"); } return 0; }
5.2 学生管理系统
c
复制
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STUDENTS 100 struct Student { int id; char name[20]; float score; }; struct Student database[MAX_STUDENTS]; int count = 0; void add_student() { if (count >= MAX_STUDENTS) { printf("数据库已满!\n"); return; } struct Student s; printf("输入学号:"); scanf("%d", &s.id); printf("输入姓名:"); scanf("%s", s.name); printf("输入成绩:"); scanf("%f", &s.score); database[count++] = s; printf("添加成功!\n"); } void search_student() { int target; printf("输入查询学号:"); scanf("%d", &target); for (int i = 0; i < count; i++) { if (database[i].id == target) { printf("学号:%d\n姓名:%s\n成绩:%.1f\n", database[i].id, database[i].name, database[i].score); return; } } printf("未找到该学生!\n"); } int main() { int choice; while(1) { printf("\n1.添加学生\n2.查询学生\n3.退出\n选择:"); scanf("%d", &choice); switch(choice) { case 1: add_student(); break; case 2: search_student(); break; case 3: exit(0); default: printf("无效选择!\n"); } } return 0; }
学习路线总结
-
环境搭建:建议使用Linux系统(如Ubuntu)配合GCC编译器
-
代码规范:严格遵循C99/C11标准,培养良好编码习惯
-
调试技能:掌握GDB调试器和Valgrind内存检测工具
-
持续进阶:
-
研究Linux内核源码(如进程调度、文件系统)
-
学习嵌入式开发(STM32编程)
-
参加ACM/LeetCode算法训练
-
-
项目沉淀:
-
实现简易Shell
-
开发TCP聊天室
-
编写游戏引擎核心模块
-
学习周期建议:每天投入3小时,6个月可掌握C语言核心开发能力。重点突破指针操作、内存管理和系统编程,通过实际项目加深理解。