写在前面
- 循序渐进:建议从“基础入门”开始,确保每个知识点都牢固掌握后再挑战后续部分。
- 动手实践:千万不要只看不练! 每道题都请亲手敲代码、编译、运行、调试,只有通过实践,知识才能真正内化。
- 善用调试:遇到问题时,学会使用
printf打印中间变量,或者使用IDE的调试功能单步跟踪,这是程序员的核心技能。 - 举一反三:完成一道题后,思考如何修改题目条件、如何优化代码、如何用不同的方法实现,这样才能真正提升能力。
C语言经典100例目录
第一部分:基础入门 (1-20)
- 目标:掌握基本语法、数据类型、运算符、顺序、选择、循环结构。
| 序号 | 题目描述 | 知识点 |
|---|---|---|
| 1 | 在屏幕上打印 "Hello, World!" | printf 函数,程序入口 main |
| 2 | 计算两个整数的和 | 变量定义,算术运算符 ,scanf 输入 |
| 3 | 计算长方形的面积 | 基本运算,输入输出 |
| 4 | 判断一个数是奇数还是偶数 | 取模运算符 ,if-else 条件判断 |
| 5 | 使用 for 循环打印 1 到 100 |
for 循环,printf |
| 6 | 使用 while 循环计算 1 到 100 的和 |
while 循环,累加器 |
| 7 | 求 10 个整数中的最大值 | 数组,循环,条件判断 |
| 8 | 求 1! + 2! + ... + 10! | 嵌套循环,阶乘计算,累加 |
| 9 | 打印九九乘法表 | 嵌套 for 循环,格式化输出 |
| 10 | 判断一个数是否为素数(质数) | 循环,if 判断,数学逻辑 |
| 11 | 打印 100 到 200 之间的所有素数 | 循环,素数判断,break |
| 12 | 打印斐波那契数列的前20项 | 递推/迭代,循环,数列 |
| 13 | 判断一个年份是否为闰年 | if-else if-else,逻辑运算符 |
| 14 | 打印 "水仙花数"(三位数,各位立方和等于自身) | 分解数字(取模/除法),循环 |
| 15 | 实现一个简单的计算器(加减乘除) | switch-case 结构,用户输入,break |
| 16 | 打印一个数字的绝对值 | if-else 条件判断 |
| 17 | 输入一个字符,判断其类型(字母/数字/其他) | char 类型,if-else,ASCII码 |
| 18 | 求 1 - 1/2 + 1/3 - 1/4 + ... 1/99 的和 | 循环,浮点数运算,正负号交替 |
| 19 | 输入一个整数,逆序输出它 | 循环,取模/除法分解数字 |
| 20 | 打印一个 5x5 的星号(*)矩阵 | 嵌套循环,格式化打印 |
第二部分:数组与字符串 (21-40)
- 目标:掌握一维/二维数组、字符串处理、常用算法(排序、查找)。
| 序号 | 题目描述 | 知识点 |
|---|---|---|
| 21 | 将数组元素逆序存放 | 数组遍历,元素交换 |
| 22 | 找出数组中的最大值和最小值及其下标 | 数组遍历,条件判断 |
| 23 | 将一个数组中的元素循环右移K位 | 数组操作,循环移位 |
| 24 | 删除数组中的重复元素 | 数组遍历,元素比较 |
| 25 | 合并两个有序数组为一个有序数组 | 双指针法,数组操作 |
| 26 | 使用冒泡排序对数组进行排序 | 经典排序算法,嵌套循环,比较交换 |
| 27 | 使用选择排序对数组进行排序 | 经典排序算法,嵌套循环,选择最小值 |
| 28 | 使用插入排序对数组进行排序 | 经典排序算法,嵌套循环,插入 |
| 29 | 在有序数组中进行二分查找(折半查找) | 二分查找算法,while 循环 |
| 30 | 计算一个字符串的长度 | strlen 实现,while 循环 |
| 31 | 将字符串反转 | 数组操作,交换 |
| 32 | 统计字符串中字母、数字、空格的个数 | char 数组,if-else,ASCII码 |
| 33 | 判断一个字符串是否是回文(正读反读都一样) | 字符串反转,比较 |
| 34 | 连接两个字符串 | strcat 实现,数组遍历 |
| 35 | 复制一个字符串 | strcpy 实现,数组遍历 |
| 36 | 查找字符串中第一次出现某个字符的位置 | strchr 实现,for 循环 |
| 37 | 将字符串中的小写字母转换为大写 | toupper 实现,ASCII码 |
| 38 | 统计一个字符串中每个单词的个数 | for 循环,if 判断空格 |
| 39 | 打印杨辉三角(帕斯卡三角) | 二维数组,嵌套循环,数学规律 |
| 40 | 矩阵转置 | 二维数组,行列交换 |
第三部分:函数与模块化编程 (41-55)
- 目标:掌握函数定义、调用、参数传递(值传递)、递归思想。
| 序号 | 题目描述 | 知识点 |
|---|---|---|
| 41 | 使用函数实现求两个数的最大值 | 函数定义与调用,return |
| 42 | 使用函数判断素数 | 函数封装,逻辑判断 |
| 43 | 使用函数实现数组元素的冒泡排序 | 函数作为参数传递数组 |
| 44 | 使用函数实现字符串反转 | 函数封装,字符串操作 |
| 45 | 计算组合数 C(n, k) (递归实现) | 递归思想,数学公式 |
| 46 | 计算斐波那契数列(递归实现) | 递归思想,基本情况与递推步骤 |
| 47 | 使用递归实现整数逆序输出 | 递归分解问题 |
| 48 | 使用递归实现汉诺塔问题 | 递归思想,复杂问题分解 |
| 49 | 递归实现二分查找 | 递归思想,函数调用自身 |
| 50 | 求一个数组元素的平均值(使用函数) | 函数,数组,累加 |
| 51 | 求一个整数的各位数字之和(递归) | 递归分解数字 |
| 52 | 判断一个数是否为完数(等于其真因子之和) | 函数,循环,条件判断 |
| 53 | 使用函数实现一个简单的猜数字游戏 | 随机数 rand(),srand(),循环,if |
| 54 | 使用函数实现字符串比较(strcmp) |
函数,字符比较,循环 |
| 55 | 使用函数实现字符串查找(strstr) |
函数,嵌套循环,字符比较 |
第四部分:指针进阶 (56-70)
- 目标:深入理解指针的本质,掌握指针与数组、函数、内存的关系。
| 序号 | 题目描述 | 知识点 |
|---|---|---|
| 56 | 使用指针遍历并打印数组元素 | 指针与数组的关系, 解引用, |
| 57 | 使用指针实现数组元素逆序 | 指针作为函数参数,元素交换 |
| 58 | 使用指针实现两个变量值的交换 | 指针,间接修改内存 |
| 59 | 使用指针求数组最大值 | 指针遍历数组 |
| 60 | 使用指针实现字符串连接 | 指针操作字符串 |
| 61 | 使用指针实现字符串复制 | 指针操作字符串 |
| 62 | 使用指针实现字符串反转 | 指针操作字符串 |
| 63 | 使用指针实现冒泡排序 | 指针作为函数参数,操作数组 |
| 64 | 使用指针实现选择排序 | 指针作为函数参数,操作数组 |
| 65 | 使用指针实现字符串比较 | 指针遍历字符串,字符比较 |
| 66 | 使用指针函数返回数组 | 指针作为函数返回值 |
| 67 | 使用函数指针调用不同的排序方法 | 函数指针,typedef |
| 68 | 动态分配一个整型数组并求和 | malloc,free,指针 |
| 69 | 动态创建一个二维数组 | malloc,指针的指针 |
| 70 | 使用指针实现链表节点的创建与遍历 | 结构体 struct,指针,动态内存 |
第五部分:结构体与文件操作 (71-85)
- 目标:掌握自定义数据类型(结构体),以及文件读写。
| 序号 | 题目描述 | 知识点 |
|---|---|---|
| 71 | 定义一个学生结构体(姓名、学号、成绩),并初始化 | struct 定义,结构体变量 |
| 72 | 使用结构体数组存储多个学生信息,并打印 | 结构体数组 |
| 73 | 找出结构体数组中成绩最高的学生 | 结构体数组遍历,比较 |
| 74 | 将学生信息按成绩从高到低排序(结构体数组) | 结构体数组排序,qsort 或手动排序 |
| 75 | 将学生信息写入文件(文本文件) | fopen, fprintf, fclose |
| 76 | 从文件中读取学生信息并显示 | fopen, fscanf, fclose |
| 77 | 使用二进制文件保存和读取结构体数据 | fwrite, fread, "wb", "rb" 模式 |
| 78 | 统计一个文本文件中的行数、单词数和字符数 | fgetc, while 循环,状态判断 |
| 79 | 复制一个文本文件 | fopen, fgetc/fputc, fclose |
| 80 | 查找文件中是否包含某个字符串 | fgets, strstr |
| 81 | 创建一个简单的通讯录(结构体+文件) | 综合应用:结构体、数组、文件、菜单 |
| 82 | 使用链表实现一个简单的通讯录 | struct, malloc, free, 链表操作 |
| 83 | 在链表中插入一个节点 | 链表插入操作 |
| 84 | 在链表中删除一个节点 | 链表删除操作 |
| 85 | 反转一个单向链表 | 链表反转,指针操作 |
第六部分:综合与进阶 (86-100)
- 目标:解决更复杂的问题,综合运用所有知识,接触一些高级主题。
| 序号 | 题目描述 | 知识点 |
|---|---|---|
| 86 | 实现一个简单的计算器(支持加减乘除和括号) | 表达式求值,栈(Stack)的应用 |
| 87 | 实现一个简单的命令行计算器 | switch-case, 循环,atoi/atof |
| 88 | 实现一个简单的文本编辑器(增删改查) | 综合应用:结构体、文件、链表、指针 |
| 89 | 实现一个简单的贪吃蛇游戏 | 控制台绘图(Windows API 或 ncurses),循环,状态机 |
| 90 | 实现一个简单的扫雷游戏 | 二维数组,随机数,逻辑判断 |
| 91 | 实现一个简单的图书管理系统 | 综合应用:结构体、文件、数组/链表、菜单 |
| 92 | 实现一个简单的学生成绩管理系统 | 综合应用:结构体、文件、排序、统计 |
| 93 | 使用 #define 宏定义常量和简单函数 |
宏定义,#ifdef, #ifndef |
| 94 | 使用 typedef 为自定义类型和指针起别名 |
typedef 的使用 |
| 95 | 实现一个通用的冒泡排序函数(可排序任意类型) | void* 指针,函数指针,qsort 思想 |
| 96 | 实现一个通用的链表(节点数据域为 void*) |
void* 指针,泛型编程思想 |
| 97 | 使用位运算实现两个整数交换 | 位运算 ^ (异或) |
| 98 | 使用位运算判断一个数的二进制表示中有多少个1 | 位运算 &, >> |
| 99 | 使用 goto 语句实现一个简单的循环控制(了解其用法) |
goto 语句(通常不推荐使用) |
| 100 | 实现一个你自己的小型项目 | 综合运用所有知识,代码组织,项目管理 |
如何获取这些题目的代码和解析?
- 在线资源:在搜索引擎(如百度、Google)中搜索“C语言经典100例”,可以找到大量博客、网站和GitHub仓库提供了完整的代码和详细解析,在GitHub上搜索
c-language-100-examples。 - 书籍推荐:
- 《C Primer Plus》:经典的C语言入门书籍,内容详尽,例子丰富。
- 《C程序设计语言(K&R)》:C语言“圣经”,言简意赅,适合有一定基础后精读。
- 《C和指针》:专门深入讲解指针的经典著作。
- 社区论坛:在CSDN、博客园、Stack Overflow等社区,你可以找到对这些问题的讨论和多种解法。
祝您学习愉快,早日成为C语言高手!

(图片来源网络,侵删)

(图片来源网络,侵删)
