摘要

本文章是基于课程报告选题#63.c这一古早代码的现代化,使其能在现代化编译器下能正常运行。本文针对“三天打鱼两天晒网”的周期性行为判定问题,设计并实现了一款基于C语言的日期状态查询程序。程序以1990年1月1日为行为起始点,通过自定义结构体存储日期信息,结合闰年平年的判定规则,编写天数计算函数实现目标日期与起始日期的总间隔天数统计;再利用模5运算的周期特性,将总天数余数映射为“打鱼”或“晒网”两种状态。程序通过循环结构实现多组日期的连续查询,并添加输入合法性校验模块,确保输入日期在合理范围内。测试结果表明,该程序能准确、高效地完成任意指定日期的行为状态判定,有效融合了结构体、自定义函数、循环分支等C语言核心知识点,为解决同类周期性日期问题提供了简洁通用的实现思路。

1.选题与准备

1.1选题

在课程发布的Gamebar文件夹中选择63号文件夹。

1.2环境准备

  • 操作系统:Windows 11
  • 编译器:Dev C++   VsCode
  • 辅助工具:百度  billbill   AI工具 CSDN网站

2.编译调试过程

2.1初始编译及错误分析

将63.c文件使用Dev c++软件打开,尝试进行初步编译得到错误原因


  • 未定义函数  getch() 

- 错误位置: main  函数中两处  getch(); 
- 错误原因: getch()  属于  <conio.h>  头文件的库函数,代码中未包含该头文件,编译器无法识别。

  •   main  函数返回值类型错误

- 错误位置: void main() 
- 错误原因:C语言标准中, main  函数的返回值类型必须是  int , void main  是非标准写法,部分编译器(如Dev-C++)会报警告或错误。

  • 闰年判断逻辑缺少括号

- 错误位置: lp=day.year%4==0&&day.year%100!=0||day.year%400==0; 
- 错误原因:逻辑运算符  &&  优先级高于  || ,但该写法易读性差,若格式混乱可能导致判断错误(比如添加其他条件时)

2.2错误修正

针对如上问题进行修改:

1.修改方案:在代码开头添加头文件:
#include<conio.h>

2.修改方案:将  void main()  改为标准写法:
int main()

并在函数末尾添加返回语句: 
return 0;

2.3反复调试

经过反复测试,改正后的代码无报错

3.代码理解及重命名

3.1运行测试:

选择当天日期进行测试,结果无误并准确运行

3.2代码解析

代码流程图如下


程序本质是日期转天数 + 周期模运算的组合应用。以 1990年1月1日 为时间起点,先计算目标日期与起点的总间隔天数,再利用  5天  一个打鱼晒网的周期,通过  总天数%5  的余数映射状态(余数 1-3 打鱼,0、4 晒网)

4.使用VsCode管理项目

4.1下载VsCode

在billbill上搜索VsCode下载教程,操作后下载VscCode以及c语言环境所需要插件

配置gcc编译器

4.2在VsCode上运行程序

5.代码版本管理

5.1注册Gitee账号并创建Gitee仓库

我的gitee仓库

5.2代码成功上传至gitee仓库

6.总结

本次代码改造与实践收获
 
1. 夯实C语言基础语法规范
明确了 main 函数的标准写法必须为 int main() ,认识到 <conio.h> 等头文件与库函数的依赖关系,避免因遗漏头文件导致函数未定义的编译错误;掌握了 continue 、 break 等循环控制关键字的精准用法,理解其在程序交互逻辑中的核心作用。
2. 深化模块化编程与结构化数据思想
体会到自定义函数(如 days 函数)拆分复杂功能的优势,通过将“日期转天数”的核心逻辑封装为独立函数,降低了代码耦合度;掌握了 struct 结构体封装相关数据的方法,提升了代码的可读性与可维护性。
3. 掌握周期性问题的通用解题思路
熟练运用日期差值计算 + 模运算的组合方案解决周期性行为判定问题,理解闰年判定规则在日期计算中的关键作用,学会通过静态数组存储固定数据(如平闰年每月天数)以优化内存使用。
4. 提升代码调试与问题排查能力
学会定位编译错误(如函数未定义、非标准语法)与潜在逻辑隐患(如表达式优先级歧义),掌握针对性的修正方法;培养了从“功能实现”到“规范优化”的代码思维,重视代码在不同编译器环境下的兼容性。
 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐