C语言学习周报(第3周
C语言学习周报(第3周)
一、 本周核心学习内容(进阶篇)
本周正式告别了基础的顺序和循环结构,进入了 C 语言“模块化与系统交互”的深水区,核心内容如下:
- 数组(Array):理解了数组是一排连续的“储物柜”。掌握了数组的定义、初始化、下标从 0 开始的规则,以及利用 for 循环进行遍历。彻底理解了“数组越界”的危害(即 i <= 5 会导致非法访问 scores[5])。
- 函数(Function):掌握了自定义函数的三大要素(函数名、参数、返回值)。学会了把独立的功能模块(如求最大值、最小值、求和、求平均值)封装成独立函数,让 main 函数变得极其清爽。
- 函数作用域与执行顺序:深刻理解了 C 语言从上往下执行的特质。明确了自定义函数必须写在 main 前面(或提前声明),并理解了“局部变量”的作用域范围。
- 字符与 ASCII 码进阶:掌握了 getchar() 和 putchar(),能熟练进行大小写转换(+32 / -32)。更进一步,通过取模运算 % 26 实现了字母的循环移位(如输入 Z 输出 A),这是密码学算法的初步实践。
- 文件读写(File I/O):掌握了 fopen、fgetc、fputc、fclose 四大函数。理解了 r(只读)、w(写入)等模式的区别,成功打通了代码与硬盘文件交互的桥梁。
- 数学库应用:熟练使用 <math.h> 里的 sqrt(开平方)、pow(次方)、sin、log 等函数,能独立翻译复杂的数学公式。
- 结构体(Struct):掌握了结构体的定义、初始化、结构体数组以及用函数操作结构体。理解了“打包”数据对于处理复杂现实事物(如学生信息、图书信息)的重要性。
二、 本周实战项目
· 函数版数组计算器:独立编写了 find_max、find_min、get_average 三个函数,综合处理数组的输入、遍历与计算,最终完美输出最大值、最小值和平均值。
· 凯撒密码加解密器:结合文件读写和字符运算,实现了一个可以对文本文件进行简单加密和解密的工具。
· 复杂数学公式计算器:将带根号、三角函数的复杂公式成功翻译成 C 语言代码并调通。
· 图形绘制(金字塔):利用三个嵌套的 for 循环,在控制台打印出等腰三角形。
· 结构体练习:完成了学生信息(学号、姓名、成绩)的打包、赋值和排序。
三、 本周遇到的“深水区”Bug复盘
- 数组越界陷阱:定义 int scores[5] 后,遍历时错写成 i <= 5,导致程序越界访问。修正为 i < 5 后解决。
- 函数逻辑漏洞:
· 求最大值时,最初把初始化 max = scores[0] 写在了循环内部,导致每次循环 max 都被重置,最大值被覆盖。修正为“循环外初始化,循环内用 if 和 {} 控制更新”。
· 把执行代码错误地写在了 main 函数的外面,或者漏写了 } 导致函数嵌套定义报错。 - 变量未初始化:求和时 sum 忘了初始化为 0,导致被内存里的垃圾数据污染,算出的平均值离谱。
- 格式符不匹配:用 %d 去打印 double 类型的小数(如平均值或 sqrt 结果),导致输出乱码或数据错误,学会改为 %f 或 %.2f。
- 文件路径与系统坑:
· 文件被系统隐藏了后缀名(实际叫 input.txt.txt),导致 fopen 失败。
· 上一次运行的程序未关闭,导致编译器无法生成新的 .exe,报错 Permission denied。 - 函数与变量的作用域混淆:在 main 中使用了定义在 find_max 函数里的局部变量 size,导致编译报错。

浙公网安备 33010602011771号