万年历C语言报告1

更新时间:2023-12-07 21:52:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

万年历实验报告 ---软件工程

老师:班级:学号:姓名:

- 1 -

实验题目:编制一个万年历程序

要求:输入一个年份(1-3000),然后显示12个月的月历,如屏幕显示不下,则应提供翻页功能。

一. 实验目的

通过实例使同学们掌握结构化数据流分析技术。

二. 实验内容

软件需求分析:

1.总体而言,根据老师的要求来做一个万年历的C程序,要求分页输出每个月的月历,首先输入想要知道日历的年份,然后可按ENTER键逐月显示日历,这样就可以达到要求了。

2. 判断是不是闰年:(year%4==0&&year0||year@0==0)满足条件是闰年,把一年中所有月份的天数放入二维数组({{31,28,31,30,31,30,31,31,30,31,30,31}, {31,29,31,30,31,30,31,31,30,31,30,31}})。

3. 求出一年中的第一天是周几 (year +(year-1)/4-(year-1)/100+(year-1)/400)%7。 4. 用FOR循环输出各月份的日历。

数据流图:

将每月的日期填入日期表 程序开始 f(),g(),n(),w() 利用 for 循环分月输出日期 定义函数 定义整型变year, w,leap,i,j,k,wd,day wd判断该月日历有几行显示 定义两个字符型数组date[12][6][7], day_tbl[ ][12] for循环输出该月日历 输入年份year leap=year%4==0&&year0||year@0==0 scanf(\回车翻页 利用for循环将日期表置0 显示完12月份 结束程序 - 2 -

软件设计与编码:

实验完整代码:

#include \

long int f(int year,int month) {

if(month<3) return year-1; else return year; }

long int g(int month) {

if(month<3) return month+13; else return month+1; }

long int n(int year,int month,int day) {

return 1461L*f(year,month)/4+153L*g(month)/5+day; }

int w(int year,int month,int day) {

return(int)((n(year,month,day)%7-621049L%7+7)%7); }

int date[12][6][7];

int day_tbl[ ][12]={{31,28,31,30,31,30,31,31,30,31,30,31}, {31,29,31,30,31,30,31,31,30,31,30,31}};

main() {

int sw,leap,i,j,k,wd,day; int year;

char title[]=\ printf(\请输入您想要知道万年历的年份: \输入年*/ scanf(\输入年份值和掠过值后的回车*/ sw=w(year,1,1);

leap=year%4==0&&year0||year@0==0;/*判闰年*/ for(i=0;i<12;i++) for(j=0;j<6;j++)

for(k=0;k<7;k++)

date[i][j][k]=0;/*日期表置0*/ for(i=0;i<12;i++)/*一年十二个月*/

- 3 -

for(wd=0,day=1;day<=day_tbl[leap][i];day++) {/*将第i+1月的日期填入日期表*/ date[i][wd][sw]=day;

sw=++sw%7;/*每星期七天,以0至6计数*/

if(sw==0) wd++;/*日期表每七天一行,星期天开始新的一行*/ }

printf(\年的年历 ===========|\\n\

for(i=0;i<12;i++)

{/*先测算第i+1月的最大星期数*/

for(wd=0,k=0;k<7;k++)/*日期表的第六行有日期,则wd!=0*/ wd+=date[i][5][k]+date[i+6][5][k]; wd=wd?6:5;

puts(\

printf(\月 %s |\\n|\ for(j=0;j

printf(\ \

for(k=0;k<7;k++) if(date[i][j][k])

printf(\ else printf(\ \ printf(\ \ printf(\ }

puts(\

scanf(\键入回车输出下一个月的日历*/ }

puts(\ puts(\按任意键退出...\ getch(); } 截图:

- 4 -

- 5 -

三. 总结

1. 实验内容总结

经过运行和调试得到了想要的结果——“万年历”,任意输入一个年份能按当初设计的格式输出每个月份的日历。

2. 心得体会与建议

在这次实验中了解了C语言在编写程序时的用处,懂得了编写C程序的一般法方步骤。通过这次实验,我掌握了以前没有学好的知识,虽然这次学会了很多知识,不过也给自己敲响了警钟,在学习中不可以伏于表面,要想学好每一门课程都要踏踏实实。分析问题做出算法,想好思路,在心里有个大致的框架,然后按部就班的记下自己想到的每一点内容,把写下的东西认真整理,查缺补漏,把一些细节的地方补上,就这样一个貌似很难的程序就写出来了。

- 6 -

三. 总结

1. 实验内容总结

经过运行和调试得到了想要的结果——“万年历”,任意输入一个年份能按当初设计的格式输出每个月份的日历。

2. 心得体会与建议

在这次实验中了解了C语言在编写程序时的用处,懂得了编写C程序的一般法方步骤。通过这次实验,我掌握了以前没有学好的知识,虽然这次学会了很多知识,不过也给自己敲响了警钟,在学习中不可以伏于表面,要想学好每一门课程都要踏踏实实。分析问题做出算法,想好思路,在心里有个大致的框架,然后按部就班的记下自己想到的每一点内容,把写下的东西认真整理,查缺补漏,把一些细节的地方补上,就这样一个貌似很难的程序就写出来了。

- 6 -

本文来源:https://www.bwwdw.com/article/5j6t.html

Top