打印月历-C语言程序设计报告

合集下载

C语言打印某一年中某月的日历

C语言打印某一年中某月的日历

C语⾔打印某⼀年中某⽉的⽇历在做学校作业发现的⼀道不错的练⼿题⽬,记录下来⽅便复习⼤致思路:①判断输⼊的年份是否闰年;②计算输⼊⽉份的第⼀天是该年的第⼏天;③计算输⼊⽉份的第⼀天是星期⼏;④输出。

结合代码使⽤:#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>int main(){int arr1[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };int i = 0;int year = 0;int month = 0;int days = 0;int week = 0;//判断第⼀天周⼏scanf("%d%d", &year, &month);if((year % 4 == 0 && year % 100 != 0)||(year % 400 == 0))//判断是否是闰年{arr1[2] = 29;//闰年2⽉29天}for (i = 0; i < month; i++){days += arr1[i];//计算该⽉第⼀天是该年多少天}days++;//该⽉第⼀天,还要把这⼀天算上//套⽤计算星期⼏的公式week = (year - 1 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 + days) % 7;printf(" ⽇⼀⼆三四五六\n");//表头int arr2[50] = {0};for (i = 0; i < week; i++){printf(" ");//整型数组不能存放空格,因此直接把空格打印出来}arr2[week] = 1;for (i = week + 1; i <= arr1[month]+week-1; i++)//把输⼊⽉份的每⼀天放到数组中{arr2[i] = arr2[i-1]+1;}int count = 0;//记录已打印⼏个数据,打印7个数据就换⾏i = week;int flag = 1;//⽤于记录是否为第⼀⾏,第⼀⾏不能⽤count计数⽅式换⾏while (i<=arr1[month]+week-1)//把该⽉所有天数都打印出来{if (flag <= 7-week){printf("%3d", arr2[i]);if (flag == 7 - week)//打印够数据后换⾏printf("\n");flag++;}else{printf("%3d", arr2[i]);count++;if (count == 7){count = 0;printf("\n");}}i++;}return 0;}实现结果:以上所述是⼩编给⼤家介绍的C语⾔打印某⼀年中某⽉的⽇历,希望对⼤家有所帮助。

打印日历实验报告

打印日历实验报告

一、实验目的1. 熟悉C语言的编程环境及开发工具的使用。

2. 学习使用C语言实现日历打印功能。

3. 提高编程能力,培养实际问题的解决能力。

二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 编程语言:C语言三、实验内容1. 理解日历的基本概念和计算方法。

2. 设计日历打印程序,实现以下功能:(1)输入年份,自动计算该年是否为闰年。

(2)根据输入的年份,计算该年1月1日是星期几。

(3)打印出该年的日历,包括年、月、日、星期。

3. 优化程序,提高运行效率。

四、实验步骤1. 分析日历的基本概念和计算方法。

(1)闰年:能被4整除但不能被100整除,或者能被400整除的年份。

(2)平年:不能被4整除,或者能被100整除但不能被400整除的年份。

(3)星期计算:根据输入的年份和月份,计算出该年1月1日是星期几。

可以使用蔡勒(Zeller)公式进行计算。

2. 设计日历打印程序。

(1)定义变量:年份、月份、星期、日期等。

(2)编写函数:判断闰年、计算星期、打印日历等。

(3)主函数:接收用户输入的年份,调用函数计算并打印日历。

3. 优化程序。

(1)优化判断闰年的函数,提高效率。

(2)优化计算星期的函数,减少计算量。

(3)优化打印日历的函数,提高可读性。

五、实验结果1. 编写程序,实现日历打印功能。

2. 测试程序,验证功能是否正常。

3. 输入年份,打印出该年的日历。

六、实验总结1. 通过本次实验,熟悉了C语言的编程环境及开发工具的使用。

2. 学习了使用C语言实现日历打印功能,提高了编程能力。

3. 在实验过程中,遇到了一些问题,如判断闰年的效率、计算星期的准确性等。

通过查阅资料、分析问题,成功解决了这些问题。

4. 在优化程序方面,通过优化判断闰年、计算星期和打印日历的函数,提高了程序的运行效率。

5. 本次实验有助于提高实际问题的解决能力,为今后的编程实践奠定了基础。

万年历C语言报告3

万年历C语言报告3

万年历C语言报告3万年历是一种常用的日历工具,可以显示任意年份的任意月份的日历,并且还能够根据用户的需求进行一定的调整。

通过这个项目的设计和实现,我更深入地了解了C语言的应用,并且提升了编程能力。

本次实现的万年历功能主要包括以下几个方面:1. 用户输入年份和月份,程序可以显示对应年份和月份的日历。

为了实现这个功能,我首先使用了C语言的输入函数 scanf 来获取用户的输入,然后使用了计算机中的日期计算方法和算法来推算出该月份的具体日期。

最后,我们使用C语言的输出函数 printf 来将日历以表格形式显示出来。

2.用户可以选择其中一天并输出该天的详细信息。

在实现这个功能时,我首先使用了结构体来存储日期的信息,包括年、月、日、星期等。

然后,当用户选择其中一天时,我根据输入的日期,查找并输出对应的详细信息,如星期几、是一年中的第几天等等。

3.用户可以选择不同的视图显示日历。

为了实现这个功能,我使用了C语言的条件判断语句来判断用户的选择,并且根据不同的选择来显示不同的视图。

用户可以选择显示整个月份的日历,也可以只显示当月的日期。

此外,为了增加程序的可读性和易用性,我还对程序进行了一些优化和改进:1.使用函数来提高代码的复用性。

我将一些常用的功能封装成函数,如计算2024年6月的天数、计算其中一天的星期几等等。

这样不仅可以减少代码的冗余,并且让代码更加易读和易于维护。

2.添加错误处理机制。

用户输入的年份和月份可能会不符合规定范围,为了避免程序出错,我对用户的输入进行了检查,并在输入错误时进行了相应的提示。

这样可以增加程序的稳定性和可靠性。

3.增加程序的交互性。

用户可以通过菜单选择不同的功能和视图,并根据提示进行操作。

这样可以提高用户的使用体验和程序的易用性。

通过完成这个万年历项目,我不仅学习到了C语言的应用,还锻炼了自己的编程能力。

在这个过程中,我掌握了C语言的输入输出函数、条件判断语句、循环语句等基本语法,并熟悉了C语言的常用函数和相关算法。

打印日历

打印日历

“打印日历”实验报告实验名称:打印日历实验要求:有打印每个月的月历的功能,程序运行时,主程序通过若干次函数的调用,循环语句,判断语句的使用以及输出流格式的使用完成年历的输出。

实验难点问题解决:虽然只是一个很小的程序,但在程序设计中也遇到了很多困难的地方,遇到这些困难时我便向网络和教材求助,以求得好的解决方法。

在这里我记录下设计程序过程中两个大困难问题的解决方法。

①处理闰年问题。

首先声明一个判断闰年的变量int runnian(int year);//判断是否为闰年然后给出满足闰年年份的条件:int runnian(int year){return(year%4==0&&year%100!=0||year%400==0);}然后利用判断语句来选择闰年与非闰年各自的具体特点:if(runnian(year))return 29;//闰年每年二月29天elsereturn 28;//非闰年二月28天if(runnian(i))n++;//闰年多一天这样就处理了闰年多一天的问题。

②当天是星期几的问题。

先声明所需要的变量:int showofMonth(int month,int year,int spaceday){int i,days;cout<<endl<<endl<<endl;输出当前月份和星期日到星期六,必须得控制好排列距离,所以用“setw (n)”来设置域宽:cout<<setw(4)<<month<<"月"<<endl;cout<<setw(4)<<"日"<<setw(4)<<"一"<<setw(4)<<"二"<<setw(4)<<"三"<<setw(4)<<"四"<<setw(4) <<"五"<<setw(4)<<"六"<<endl;用条件语句来限制日期按星期输出,用间隔之前定义的“spaceday”来控制:for(i=1;i<=spaceday;i++)//控制星期的输出cout<<setw(4)<<" ";days=dayofMonth(month,year);//得到每月的天数for(i=1;i<=days;i++){cout<<setw(4)<<i;spaceday=(spaceday+1)%7;//算出当天是星期几if(spaceday==0)cout<<endl<<endl;}return spaceday;}这样,星期几的问题也得到解决。

c语言综合练习打印日历教程附完整源程序

c语言综合练习打印日历教程附完整源程序

c语⾔综合练习打印⽇历教程附完整源程序综合练习打印⽇历练习的功能是:由⽤户输⼊⼀个年后,然后就可以分⽉输出当年的年历。

例如输⼊2010,则输出2010年的年历。

如图,图中显⽰的年历的⼀部分:学习⽬标:继续熟悉数组的使⽤;继续熟悉函数的使⽤了解程序算法设计及N-S流程图;综合使⽤函数和数组完成设计任务⼀分析程序算法图2 算法分析图先来分析要解决的问题,如图2程序算法分析如下:1.整个程序⼤致可以分为两个主要部分:输⼊年份;打印该年的⽇历,如图2①所⽰。

2.打印⽇历时,为了清楚的知道打印的是哪⼀年的⽇历,先打印年份,接着从1⽉~12⽉,分别打印个⽉份的名称(英⽂缩写),然后打印星期的名称(英⽂缩写),最后在打印当⽉的⽇历,如图2②所⽰。

3.要打印某⽉的⽇历,⾸先必须⽣成当⽉⽇历,然后在打印,如图2③所⽰。

4.⽣成每个⽉的⽇历,需要知道当⽉有多少天,当⽉每⼀天是星期⼏,然后⽣成当⽉⽇历并保存,如图2④所⽰。

5.要知道每⽉有多少天是⽐较容易的,除了2⽉份外,其它⽉份的天数都是确定的,关键就是确定2⽉份有⼏天,如图2⑤所⽰。

6.如果当年是闰年,则2⽉份有29天,否则为28天。

如图2⑥所⽰。

7.要想确定当⽉每⼀天是星期⼏,需要知道当年第⼀天是星期⼏,然后类推,每7天⼀个周期,如图2⑦所⽰。

8.经过以上的4~7步,可以⽣成⽇历,然后设计存储格式,保存⽇历。

9.设计好输出格式,打印已⽣成的⽇历即可,如图2⑧所⽰。

将图2加以综合和细化,最终可以得到整个程序的N-S流程图,如图3所⽰。

图3 算法分析N-S流程图⼆、按功能划分函数经过上⾯的分析,发现在这个程序设计中有⼏个关键部分:①确定每⽉有多少天,关键是确定当年是否为闰年。

②确定每天是星期⼏,关键是确定当年1⽉1⽇是星期⼏。

③设计数据的存储格式和打印格式。

对于较复杂的程序,可以把功能分解,每个⼩功能⽤⼀个函数实现,使程序的总体结构更加清晰。

在这个程序中,应考虑使⽤以下4个函数。

C语言课程设计-打印月历

C语言课程设计-打印月历

《打印月历》课程设计报告题目打印月历学号姓名年级专业指导教师完成日期年月日目录1实验目的2实验内容3源程序4测试数据5分析评价6实验心得一、实验目的1)在教师指导下,学生根据选定的课题,综合运用所学程序设计的知识,完成问题分析、模块设计、代码编写、程序调试和运行等训练任务。

2)通过课程设计,初步锻炼运用所学基础知识解决实际问题的能力,掌握软件开发的基本过程和基本方法以及良好的编程风格,培养在软件开发中相互合作的团队意识。

二、实验内容打印月历1) 年份和月份由键盘输入,打印的月历按星期一到星期日排列;2) 注意大小月、闰年等问题。

三、源程序#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>int days[6][7];int mdays[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int mdays2[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};#define is_leap_year(y) ((!((y) % 4) && ((y) % 100)) || (!((y) % 400)))#define max_mdays(m, y) (is_leap_year(y) ? mdays2[m] : mdays[m])int diff_days(int y1, int m1, int d1, int y2, int m2, int d2){int d = 0;int md = max_mdays(m1, y1);while ((y1 != y2) || (m1 != m2) || (d1 != d2)){d++;d1++;if (d1 > md){d1 = 1;m1++;if (m1 >= 12){m1 = 0;y1++;}md = max_mdays(m1, y1);}}return d;}int get_wday(int y, int m, int d) {struct tm tm;time_t t;int cy, cm, cd, cw;int dd, w, f = 0;time(&t);tm = *localtime(&t);cy = tm.tm_year + 1900;cm = tm.tm_mon;cd = tm.tm_mday;cw = tm.tm_wday;if (cy < y){dd = diff_days(cy, cm, cd, y, m, d);f = 1;}else if (cy > y){dd = diff_days(y, m, d, cy, cm, cd);}else{if (cm < m){dd = diff_days(cy, cm, cd, y, m, d);f = 1;}else if (cm > m){dd = diff_days(y, m, d, cy, cm, cd); }else{if (cd < d){dd = diff_days(cy, cm, cd, y, m, d);f = 1;}else if (cd > d){dd = diff_days(y, m, d, cy, cm, cd);}else{dd = 0;}}}d=d+1;w = f ? (cw + (dd % 7)) : (cw - (dd % 7)) ;if (w < 0){w += 7;}w = f ? (w + ((d - 1) % 7)) : (w - ((d - 1) % 7));if (w < 0){w += 7;}return w;}int main(){int year, mon, day;int i, j, d, w, md;printf("please input the date: ");scanf("%d %d %d", &year, &mon, &day);if (((mon < 1) || (mon > 12))|| ((day < 0) || (day > mdays[mon - 1]))){printf("error! [1 <= mon <= 12] [1 <= day<= 31]\n");return -1;}w = get_wday(year, mon - 1, day);md = max_mdays(mon - 1, year);d = 1;while (d <= md){i = w / 7;j = w % 7;days[i][j] = d++;w++;}printf("\n date: %d year %d mon %dday\n", year, mon, day);printf("==========================================\n"); printf(" %2s %2s %2s %2s %2s %2s %2s\n", "MON", "TUE", "WED", "THU", "FRI", "SAT","SUN");for (i = 0, d = 0; i < 6; i++){for (j = 0; j < 7; j++){if (days[i][j]){d++;(d == day) ? printf("[%2d]", d) : printf(" %2d ", d);}else{printf("%-4s", "");}}printf("\n");}printf("============================================\n"); system("pause");return 0;}四、测试数据任意输入一个日期得到结果:再次尝试输入一个闰年例如2000年2月:得到结果:五、分析评价流程图:我在设计这个程序时采用了使用函数来实现各个打印月历的功能。

c语言万年历课程设计报告

c语言万年历课程设计报告

本次课程设计的主题为“C语言万年历”,旨在通过设计和实现一个简单的万年历程序,深入了解C语言程序设计的基本方法和技巧。

通过本课程设计的学习,我对C语言程序设计的各个方面进行了深入的了解和掌握,同时也提高了自己的编程思维和实践能力。

一、设计思路。

本次课程设计的主要功能是实现万年历。

在设计程序之前,我首先对万年历的基本功能进行了分析和思考,包括输入年月日,输出当月的日历和星期几等。

同时,考虑到用户友好性,我还增加了一些额外的功能,如输入错误时的提示,具体日历同时附带节假日等。

在分析了功能需求之后,我便开始考虑程序设计的具体实现。

首先,我选择了C语言作为实现程序的语言,因为C语言广泛应用于各类软件工程和移动计算等领域,适用性强,易于学习和掌握。

接着,我根据分析需求,确定了程序的基本框架和主要模块,包括输入年月日模块、求解该日是星期几模块、绘制当月日历模块和判断节日等模块。

二、程序实现。

在程序实现过程中,我遵循了模块化编程的原则,把整个程序划分成几个独立的模块,并在模块之间进行数据交互和函数调用。

具体来说,我分别实现了以下几个模块:1.输入年月日模块:该模块负责接收用户输入的年月日信息,并检查输入格式是否正确。

在输入不合法时,该模块能够给用户相应的提示信息,并要求用户重新输入。

2.求解该日是星期几模块:该模块根据给定年月日,求出该日是星期几。

该模块采用基姆拉尔森计算公式来实现。

3.绘制当月日历模块:该模块负责绘制给定月份的日历,并标注当日及节假日等信息。

在绘制日历时,该模块能够考虑各种特殊情况,如闰年、月初不为星期一等。

4.判断节日等模块:该模块能够根据给定年月日信息,判断当日是否为节假日、纪念日等特殊日子,如春节、圣诞节等,并在日历上作出相应标注。

以上四个模块构成了整个程序的主要功能。

在实现过程中,我还遇到了一些问题,如求解闰年的问题、绘制多行日历的问题等。

针对这些问题,我通过查找资料、借鉴其他同学的代码等方式进行了解决。

c语言日历显示课程设计报告(含源代码)

c语言日历显示课程设计报告(含源代码)

高级语言程序设计课程设计题目:专业计算机类班级计算机类1102学生学号指导教师_______________起止时间2012.2.13——2012.2.172012年2月目录实验报告 (3)必做题: (3)选做题: (8)题目10 写一个日历显示程序 (8)流程图:(如下) (14)工程代码: (19)心得体会 (24)实验报告必做题:(1)编一程序对2种排序方法进行比较:交换法、选择法、插入法、冒泡法四种方法选2。

具体比较方法是随机生成一组(≥300个)的100以内的整数数据,用选定的2种排序方法进行排序。

纪录排序过程中数据比较和交换的次数,输出比较结果。

#include<stdio.h>#include<stdlib.h>int main(void){int a[300],b[300];int i,j,temp,t;int s=0,p=0,s1=0,p1=0;for(i=0;i<300;i++){a[i]=rand()%100;b[i ]=a[i];}for(i=0;i<299;i++){for(j=i+1;j<300;j++){if(a[i]<a[j]){temp=a[i];a[i]=a[j];a[j]=temp;s++;}p++;}}printf("%d %d\n",s,p);printf("\n");for(i=0;i<299;i++){t=i;for(j=i+1;j<300;j++){if(b[t]<b[j])t=j;if(t!=i){temp=b[i];b[i]=b[t];b[t]=temp;s1++;}p1++;}}printf("%d %d\n",s1,p1);return 0;}运行结果:在这个题目中选择了交换法和选择法,首先要产生300个随机数,其次要懂得两种排序法的原理,然后进行编程,同时利用循环结构。

c语言课程设计报告万年历最详细

c语言课程设计报告万年历最详细

c语言课程设计报告万年历最详细集团文件发布号:(9816-UATWW-MWUB-WUNN-INNUL-DQQTY-C语言课程设计报告-----万年历设计人:贾伟涛学号:12班级:13电信应电班指导老师:张伟日期:2014年6月9日内容提要通过大一下学期对C语言的学习,了解到了很多C语言的相关知识。

学习的过程虽然有很多困惑,但是当自己能够独立的看懂和独立的完成一个简单的程序时,心中就会收获无限的喜悦和成就感。

我虽然可以看懂一些简单的程序,编写一些简单的计算程序,更多的是学会了一种思想——编程,它让我在去思考很多日常生活中的事物是怎么样通过一个个小小的函数实现功能的,激发我对c语言的兴趣。

C语言是近年在国内外得到迅速推广应用的一种机器语言。

C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。

因此,C语言特别适合于编写各种软件。

在这次的课程设计中我将把日常生活中最经常接触的——日历的查询,利用C 语言的程序编成一个简单的万年历查询系统。

通过这个小小的系统可以实现很多功能。

在程序中你能看到很多熟悉的C语言关键字,同时也加入了很多自己课外了解到的一些关键字。

在不断的调试中最终才获得最为完整的程序。

接下来就是我的C 语言课程设计的具体内容来了,大家拭目以待吧!目录一、系统功能和数据说明-----------------------二、问题分析---------------------------------三、程序总体设计及功能结构框图---------------四、程序流程图-------------------------------五、源程序代码-------------------------------六、使用说明---------------------------------七、个人心得---------------------------------八、参考文献---------------------------------一、系统功能和数据说明(一)功能简介在日常生活中能接触到很多不同类型的日历,在日历上我们通常希望它能简单明了的给我们最想要的日期信息。

C语言课程设计实验报告(万年历)

C语言课程设计实验报告(万年历)

C语言课程设计一、题目及功能描述题目:万年历的设计利用C语言设计出万年历,使其实现如下要求1、输入一个年份,在屏幕上输出该年的年历(包括每月的天数和所对应的星期几),并且在每月的左上角或右上角打印出相应的年份和月份,要求输出界面尽可能整齐、美观,符合年历显示规范。

假定输入的年份在1-9999年之间。

2、输入年月,输出该月的月历。

3、输入年月日,输出距今天还有多少天,是星期几,是否是公历节日。

:4、指定键盘的某些键,用于控制变换不同年、月、日的显示。

即:当前若正在显示2011年的年历,按下键盘“←”方向键后,年历变为2010年的。

二、使用的所有变量的说明变量说明:(以下均为整型变量)year 表示年份的变量month 表示月份的变量day 表示日期的变量select 表示菜单选择的变量i 表示月份的变量j 表示一个月中的某一天的变量sum 判断某天是一年中的第几天的变量number判断某天离公元1年1月1日还有几天的变量a[] 表示每月天数的数组变量year1 系统时间年份的变量month1 系统时间月份的变量day1 系统时间日期的变量三、程序清单及其说明#include "time.h" /*包含的头文件*/#include "stdio.h"#include "math.h"#include "windows.h"#include "conio.h"#define KEYNUMUp 0x48 /*宏定义*/#define KEYNUMDown 0x50#define KEYNUMLeft 0x4b#define KEYNUMRight 0x4d#define KEYNUMPageUp 0x49int eachyeartotal(int year,int month,int day); /*函数声明*/int counterdays(int year,int month,int day);int nowtime(int year,int month,int day);int week(int year,int month,int day);int maxDay(int year,int month);int isleap(int year);void whatweek(int year,int month,int day);void display(int year ,int month);void display2(int year,int month);void display3(int year,int month,int day) ;void setDay1(int year,int month,int day);void setDay2(int year,int month,int day);void setDay3(int year,int month,int day);void jieri(int month,int day);void display1(int year);void getmenu();void main() /*主函数*/{int year,month,day,select;while(1){getmenu();printf(" 请输入相应数字:"); /*菜单选择*/scanf("%d",&select);system("cls");switch(select){case 1: /*当选择为1时显示年历*/printf(" 年历显示:输入年(如2011):");scanf("%d",&year);if(year>0&&year<10000) /*显示年份从0-10000 */{display1(year); /*调用函数*/printf(" 提示按↑:上一年按↓:下一年按其他键:返回菜单\n\n");setDay1( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 2: /*当选择为2显示月历*/printf(" 月历显示:输入年月(如2011,6):");if(year>0&&year<10000&&month>=1&&month<=12){display2(year,month);printf(" 提示按←:上个月按→:下个月按其他键:返回菜单\n\n");setDay2( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 3: /*当选择为3时显示日期*/printf(" 日期显示:输入年月日(比如2011,6,23):");scanf("%d,%d,%d",&year,&month,&day);if(year>0&&year<10000&&month>=1&&month<=12&&day>=1&&day<=maxDay(year,month) ){display3(year,month,day);printf(" 提示按PageUp:前一天按PageDown:后一天按其他键:返回菜单\n\n");setDay3( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 4:exit(0);default: /*当输入其他数字时,输入无效,重新输入*/system("cls");printf(" 输入无效,重新输入!\n");}}}int isleap(int year) /*判断是否为闰年*/{if(year%4==0&&year%100!=0||year%400==0)return 1;elsereturn 0;int maxDay(int year,int month) /*每月的天数*/{int a[]={31,28,31,30,31,30,31,31,30,31,30,31}; /*每个月中的天数*/ if(isleap( year))a[1]=29; /*闰年2月份有29天*/ return a[month-1];}int eachyeartotal(int year,int month,int day) /*判断某天是一年中的第几天*/ {int i,sum=0;for(i=1;i<month;i++)sum+=maxDay(year,i);sum+=day;return sum;}int week(int year,int month,int day) /*对天数进行判断确定是星期几*/ {int number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);number=number%7 ;return number;}void display(int year ,int month) /*输出年月*/{int max,number,i,j=1;max=maxDay(year,month);number=week(year,month,1);printf(" %4s %4s %4s %4s %4s %4s %4s\n","Sun","Mon","Tue","Wed", "Thu","Fri","sat");for(i=0;i<number;i++)printf(" "); /*1号前的星期补空格*/ while(j<=max){printf("%6d",j);if (i%7==6)printf("\n"); /* 每7格换一行*/i++;j++;printf("\n\n");}void display1(int year) /*输出年历*/{int i;printf("\n");for(i=1;i<=12;i++){printf("%d 年%d 月\n\n ",year,i);display(year,i);}}void display2(int year,int month) /*输出月历*/{printf("\n%d 年%d 月\n ",year,month);display(year,month);}void display3(int year,int month,int day) /*输出日历*/{whatweek( year,month,day);jieri(month,day);counterdays(year,month, day);}int counterdays(int year,int month,int day) /*判断今天距特定日期的天数*/{int year1, days0,days1,month1,days, day1;time_t timep;struct tm *p;time(&timep);p=gmtime(&timep);year1=(1900+p->tm_year) ;month1=(1+p->tm_mon) ;day1=(p->tm_mday); /*获取系统时间year1、month1、day1分别为年、月、日*/days0=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);days1=(year1-1)*365+(year1-1)/4-(year1-1)/100+(year1-1)/400+eachyeartotal(year1,month1,daydays=days0-days1; /*计算出两个日期之间的时间差*/printf("\n 今天距%d年%d月%d日还有%d天\n\n",year,month,day,days);return days;}void whatweek(int year,int month,int day) /*判断是星期几*/{int number;number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day); number=number%7 ;switch( number){case 0:printf( "\n %d年%d月%d日是星期日",year,month,day);break;case 1:printf( "\n %d年%d月%d日是星期一",year,month,day);break;case 2:printf( "\n %d年%d月%d日是星期二",year,month,day);break;case 3:printf( "\n %d年%d月%d日是星期三",year,month,day);break;case 4:printf( "\n %d年%d月%d日是星期四",year,month,day);break;case 5:printf( "\n %d年%d月%d日是星期五",year,month,day);break;case 6:printf( "\n %d年%d月%d日是星期六",year,month,day);break;default:system("cls");printf(" 出现错误!\n" );}}void jieri(int month,int day) /*判断是否公历节日*/{if(month==1)switch(day){case 1:printf(",这天是元旦");}if(month==2)switch(day){case 14:}if(month==3)switch(day){case 8:printf(",这天是妇女节");break;case 12:printf(",这天是植树节");}if(month==4)switch(day){case 1:printf(",这天是愚人节");}if(month==5)switch(day){case 1:printf(",这天是劳动节");break;case 4:printf(",这天是青年节");}if(month==6)switch(day){case 1:printf(",这天是儿童节");}if(month==7)switch(day){case 1:printf(",这天是建党节");}if(month==8)switch(day){case 1:printf(",这天是建军节");}if(month==9)switch(day){printf(",这天是教师节");}if(month==10)switch(day){case 1:printf(",这天是国庆节");}}void setDay1(int year,int month,int day) /*通过键盘“↑”“↓”控制年历的变换*/ { char k;getch();k=getch();switch(k){case KEYNUMUp: /*“↑”年份减小*/ if(year<2){system("cls");printf(" 警告!超出范围!\n");break;}year--;display1(year);setDay1(year,month,day);break;case KEYNUMDown:/*“↓”年份变大*/ year++;display1(year);setDay1(year,month,day);break;default:system("cls");}}void setDay2(int year,int month,int day) /*通过键盘“←”“→”控制月历的变换*/char k;getch();k=getch();switch(k){case KEYNUMLeft: /*“←”月份变小*/if(month<2){month+=12;year--;}if(year<1){system("cls");printf(" 警告!超出范围!\n");break;}month--;display2(year , month);setDay2(year,month,day);break;case KEYNUMRight:/*“→”月份变小*/if(month>11){month-=12;year++;}if(year<9999);month++;display2(year , month);setDay2(year,month,day);break;default:system("cls");;}}void setDay3(int year,int month,int day) /*通过键盘“PageUp”“PageDown”控制日期的变换*/{char k;getch();switch(k){case KEYNUMPageUp: /*“PageUp”日期变小*/ if(day<2){month--;day=maxDay(year,month);}if(month<1){month+=12;year--;}if(year<1){system("cls");printf(" 警告!超出范围!\n");break;}day--;display3(year , month,day);setDay3(year,month,day);break;case KEYNUMPageDown: /*“PageDown”日期变大*/ day++;if(day>maxDay(year,month)){day=1;month++;}if(month>12){month-=12;year++;}if(year<10000);display3(year , month,day);setDay3(year,month,day);break;default:system("cls");;}}{printf(" ************主菜单************\n\n");printf(" * 欢迎进入万年历系统*\n\n");printf(" * 1、年历显示*\n\n");printf(" * 2、月历查询*\n\n");printf(" * 3、日期查询*\n\n");printf(" * 4、退出系统*\n\n");printf(" ******************************\n\n"); }四、运行结果清单打开软件,进入如下菜单界面,输入数字进行选择1年历的显示(1)输入数字1进入年历的显示(2)输入年份2011,显示2011年的年历如下(3)按↑键盘显示上一年(2010年)的年历,显示如下(4)按↓键盘显示上一年(2012年)的年历,显示如下2、月历的显示(1)在菜单中选择2,进入月历的显示,输入2011,6,显示2011年6月份的月历,显示效果如下(2)按←键盘显示上一个月(5月)的月历,显示效果如下(3)按→键盘显示上上个月(7月)的月历,显示效果如下3、日历的显示(1)输入选择3进入日历的显示,如图输入2011,10,1显示这天的星期,是否为公历节日,距离现在还有多少天(2)按PagDown显示前一天的日历,显示如下(3)按PagUp显示后一天的日历,显示如下4 退出程序输入选择4,显示如下界面,按任意键退出程序五、总结和体会。

C语言电子日历程序设计

C语言电子日历程序设计

C语言电子日历程序设计一、项目要求设计一款电子日历,通过选择,实现如下5项功能:选择操作:1选择操作:2选择操作:3,根据输入的年-月,显示月历。

选择操作:4,根据输入年,显示年历。

部分年历如下图所示。

选择操作:5二、编译环境 Visuall C++6.0 + EasyX(Visual C++ 6.0),采用C++程序。

1. 创建工程在Visual C++6.0中,选择“文件”—>“新建”,弹出如下界面。

先创建工程,选择“Win32 Console Application”工程,给出存储位置和工程名,点“确定”按钮。

后面选择默认,即可。

2. 在工程中创建C++文件在Visual C++6.0中,选择“文件”—>“新建”,弹出如下界面。

刚才创建工程名给出文件名,不要给扩展名,默认创建C++文件,扩展名为cpp 点“确定”按钮,完成C++文件创建。

界面效果如下图所示。

3. 添加类库因为C语言中的图形库头文件graphics.h是Dos环境下的,只能使用TurboC进行编译调试,TurboC2.0环境不是图形化可视界面,调试程序不如VC++6.0。

但在Visual C++6.0中,原有C语言中的图形库头文件graphics.h不可用,有些人员开发了DLL文件,让Visual C++6.0能识别C语言的graphics.h,方便利用C语言进行图形化的设计。

即,要进行图形化设计,需要安装EasyX,添加类库。

安装过程如下:(1)双击EasyX中的Setup文件,效果如下图所示。

单击“下一步”,选择你的开发平台,安装类库。

这里选择Visual C++6.0即可,点击“安装”,弹出安装成功,“关闭”即可。

三、相关知识1. 本项目涉及到的头文件#include <stdio.h>#include <stdlib.h>#include <graphics.h>#include <conio.h>#include <math.h>(1) graphics.h是TC里面的图形库,分为:像素函数、直线和线型函数、多边形函数、填充函数等。

C语言程序设计输出任意年份的日历

C语言程序设计输出任意年份的日历

C语言程序设计输出任意年份的日历第一篇:C语言程序设计输出任意年份的日历1.(基本题,分值75)编程序实现如下功能:输入任意一个年份的值,输出该年份的日历。

要求将12个月自上而下排成一列。

# include main(){int year,month,day,c,Y,W,i,j,w;int t[]={31,0,31,30,31,30,31,31,30,31,30,31};printf(“请输入年份”);scanf(“%d”,&year);if(year%4==0&&year%100!=0||year% 400==0)t[1]=29;elset[1]=28;for(month=1;month<=12;month++){if(month<3){c=((int)(year-1)/100);Y=(year-1)-((int)((year-1)/100))*100;w=((int)(c/4))-2*c+Y+((int)(Y/4))+((int)(13*(month+13)/5));W=(w+70)%7;}else if(month>=3){c=((int)(year/100));Y=year-((int)(year/100))*100;w=((int)(c/4))-2*c+Y+((int)(Y/4))+((int)(13*(month+1)/5));W=(w+70)%7;}i=W;printf(“nn%dn”,month);printf(“ 日一二三四五六n”);for(j=1;j<=W;j++)printf(“”);for(day=1;day<=t[month-1];day++){i++;printf(“%4d”,day);if(i%7==0)printf(“n”);} } printf(“n”);} 2.(拓展题,分值25)输入任意一个年份的值,输出该年份的日历。

C语言程序设计报告―“万年历”

C语言程序设计报告―“万年历”

C语言程序设计报告―“万年历”一、程序实现的功能“万年历”,也叫做历法及历历,是一种用于计算日期及节假日的日历,它可以帮助我们计算一些特定的日期及其所属的节日。

本程序通过C语言实现了一款传统的“万年历”的功能,它可以根据用户输入的年份和月份,打印出当月的日历表格,以及当月的公历及节假日。

二、程序的功能结构及总体设计本程序的功能结构如下:(1)输入年份及月份,计算出当月有多少天;(2)根据此判断出当月的第一天是星期几;(3)将前面算出的信息用表格形式打印出来;(4)计算当月的节假日及其所属的日期;(5)将节假日打印到表格中,形成一张完整的月历表。

程序的总体设计,主要由两部分组成:(1)调用函数实现实际的打印功能;(2)实现主函数的调用以控制程序的流程。

1. 程序结构:程序的核心是对日历表的生成,其结构如下:主函数:负责主函数的调用,以控制程序的流程。

日历表生成函数:调用该函数以生成日历表;在调用该函数之前,首先运行“getfirstday”函数,以计算当月的第一天是星期几;然后调用“dayOut”函数,将当月的日期和节日打印出来。

“getfirstday”函数:该函数用来计算某年某月的第一天是星期几,实现的核心思想是以1900年为基准,计算出某年某月离1900年相差多少天,然后根据求出的和1900年的差值,计算出当月的第一天是星期几;此外,还进行了考虑闰年等特殊情况的特别处理,以进一步检查结果。

2. algorithm:(1) 从键盘输入年份及月份,将年份及月份保存在相应的变量中;(2) 调用“getfirstday”函数,计算出当月的第一天是星期几;(3) 调用日历表生成函数,生成当月的日历表;(4) 输出生成的日历表,完成程序的运行。

四、程序的测试为了验证本程序的可行性,我进行了严格的测试,并与电子版的日历比较,测试结果表明,本程序的结果完全一致,能够满足正确的要求,用户可以使用该程序进行相应的日历计算。

C语言万年历设计报告

C语言万年历设计报告

千里之行,始于足下。

C语言万年历设计报告设计报告:C语言万年历1. 引言本文旨在介绍一个基于C语言开发的万年历设计,并对其设计思路、代码细节、实现效果进行具体的阐述。

万年历是一种依据历法规章,能够显示任意年份任意月份的日历的工具。

在本设计中,我们使用C语言来编写一个简易的万年历程序,具备显示任意年份任意月份的日历、日期查询等功能。

2. 设计思路2.1 数据结构设计在设计万年历程序时,我们需要设计适用于存储日期信息的数据结构。

考虑到日历是依据年份和月份来呈现的,我们可以使用结构体来存储日期的年、月、日信息。

具体数据结构如下:```struct Date {int year;int month;int day;};```2.2 星期计算算法第1页/共3页锲而不舍,金石可镂。

在日历中,我们需要依据给定日期计算出其对应的星期。

这里我们接受Zeller公式来计算星期。

Zeller公式可以依据给定的年、月、日计算出一个对应的星期数。

具体公式如下:```h = (q + ((13*(m+1))/5) + K + (K/4) + (J/4) - (2*J)) % 7```其中,h是一个星期的编号,0代表星期一,1代表星期二,以此类推。

2.3 日历显示算法对于日历的显示,我们需要依据给定的年份和月份计算出该月的天数,并打印出日历表。

具体算法如下:- 首先,依据给定的年份和月份,计算出该月的天数。

- 然后,依据给定年份、月份、星期计算公式,计算出该月的第一天是星期几。

- 接下来,依据计算结果,打印出日历表。

3. 主要函数设计在C语言万年历程序的设计中,我们主要需要设计以下几个函数:3.1 输入函数该函数用于接收用户输入的年份和月份,并进行基本的输入验证,确保输入的年份和月份在合理范围内。

千里之行,始于足下。

3.2 星期计算函数该函数依据给定的年份、月份、日期,计算出对应的星期数,并返回星期数。

3.3 天数计算函数该函数依据给定的年份和月份,计算出该月的天数,并返回天数。

使用C语言打印月历

使用C语言打印月历

使⽤C语⾔打印⽉历打印⽇历应该是程序员⼊门时候的⼀个基础练习。

打印⼀年的⽇历有许多不同的实现,我这⾥提⼀个可以实现的⽅法。

⾸先需要确定该年是闰年还是平年,闰年的⼆⽉是29天,全年是366天;平年⼆⽉是28天,全年365天。

还需要确定该年的每⼀天是星期⼏。

从0001年1⽉1⽇是星期⼀开始,该值可以通过使⽤该年到元年的总天数模7来求得。

最后考虑怎样输出⽇历,可以先将⽇历存储在⼀个⼆维数组⾥⾯,也可以直接将它输出。

#include<stdio.h>/*判断是平年还是闰年*/int IsLeap (int year) {if((year%4==0)&& (year%100!=0) || (year%400==0))return 1;elsereturn 0;}/*计算今年的第⼀天是星期⼏*/int FirstWeeday (int year) {int days = (year-1)*365 + (year-1)/4 - (year-100)/100 + (year-1)/400;return days%7;}/*打印星期*/void PrintWeedTitl () {int i;for(i = 0;i<7;i++){switch(i) {case 0 : printf(" Sun ");break;case 1 : printf("Mon ");break;case 2 : printf("Tue ");break;case 3 : printf("Wed ");break;case 4 : printf("Thu ");break;case 5 : printf("Fri ");break;case 6 : printf("Sat ");break;default : break;}}printf("\n");}/*打印⽉份*/void PrintMonTitl(int month) {switch(month) {case 0 : printf("Jan\n");break;case 1 : printf("Feb\n");break;case 2 : printf("Mar\n");break;case 3 : printf("Apr\n");break;case 4 : printf("May\n");break;case 5 : printf("Jun\n");break;case 6 : printf("Jul\n");break;case 7 : printf("Aug\n");break;case 8 : printf("Sep\n");break;case 9 : printf("Oct\n");break;case 10 : printf("Nov\n");break;case 11 : printf("Dec\n");break;default : break;}}/*格式化输出⽇历*/void PrintYear (int year) {int m,i,d;char c=' ';int MONTH[12] = {31,28,31,30,31,30,31,31,30,31,30,31};if(IsLeap(year)) MONTH[1] = 29;int firstwed = FirstWeeday(year);printf("Year: %d\n",year);printf("========================\n");for(m = 0;m<12;m++) {PrintMonTitl(m);PrintWeedTitl();for(d=1;d<=MONTH[m];d++) {if(d == 1) {for(i = 0;i<firstwed;i++)printf("%5c",c);printf("%5d",d);}else {printf("%5d",d);}if((firstwed+d-1)%7 == 6) printf("\n");}firstwed = (firstwed + MONTH[m])%7;printf("\n");}}/*测试结果*/int main() {int year = 2016;PrintYear(year);}代码的测试结果如下:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

c语言课程设计打印月历

c语言课程设计打印月历

c语言课程设计打印月历一、教学目标本节课的学习目标包括以下三个方面:1.知识目标:学生需要掌握C语言编程的基本语法和流程控制语句,理解函数的定义和调用,了解动态内存分配的基本方法。

2.技能目标:学生能够运用C语言编写简单的程序,具备基本的程序调试和运行能力,能够独立完成月历打印程序的编写和调试。

3.情感态度价值观目标:培养学生对计算机编程的兴趣和好奇心,提高学生解决问题的能力和创新意识,培养学生的团队合作精神和自主学习能力。

二、教学内容本节课的教学内容主要包括以下几个部分:1.C语言基本语法和流程控制语句:数据类型、变量、运算符、条件语句、循环语句等。

2.函数的定义和调用:函数的声明、定义、调用和返回值。

3.动态内存分配:malloc、calloc、realloc等函数的使用。

4.月历打印程序的设计和实现:日历格式的输出、闰年的判断、月份和星期的计算等。

三、教学方法本节课采用以下几种教学方法:1.讲授法:教师讲解C语言的基本语法和流程控制语句,函数的定义和调用,动态内存分配的方法等知识点。

2.案例分析法:通过分析月历打印程序的案例,让学生理解程序的设计思路和实现方法。

3.实验法:学生动手编写和调试月历打印程序,培养学生的实际编程能力和问题解决能力。

四、教学资源本节课的教学资源包括以下几个方面:1.教材:C语言编程教程,用于引导学生学习基本语法和编程方法。

2.多媒体资料:PPT课件,用于辅助讲解和展示月历打印程序的设计过程。

3.实验设备:计算机、编程环境(如Code::Blocks、Visual Studio等),用于学生编写和调试程序。

4.网络资源:在线编程平台(如LeetCode、牛客网等),用于学生进行编程练习和交流。

五、教学评估本节课的教学评估将采用以下几种方式:1.平时表现评估:通过观察学生在课堂上的参与程度、提问回答、合作交流等方面的表现,评估学生的学习态度和积极性。

2.作业评估:通过检查学生提交的月历打印程序代码,评估学生对C语言编程知识的掌握程度和问题解决能力。

打印月历c语言课程设计

打印月历c语言课程设计

打印月历c语言课程设计一、课程目标知识目标:1. 理解C语言中数组、循环和条件语句的基础知识。

2. 学习如何使用C语言函数实现月历打印功能。

3. 掌握基本的输入输出操作,并能运用到程序中。

技能目标:1. 能够编写简单的C程序,实现月历的打印。

2. 学会使用循环和条件语句进行逻辑判断。

3. 培养学生的编程思维和问题解决能力。

情感态度价值观目标:1. 培养学生对计算机编程的兴趣和热情,激发创新意识。

2. 培养学生合作交流、分享成果的团队精神。

3. 增强学生面对困难时的自信心和毅力,形成良好的学习习惯。

课程性质:本课程为C语言编程实践课程,旨在巩固学生对C语言基础知识的掌握,提高编程实践能力。

学生特点:学生为初中或高中年级,具备一定的C语言基础,对编程感兴趣,但实践经验不足。

教学要求:结合学生特点,注重理论与实践相结合,以任务驱动的方式引导学生主动探索、实践,培养其编程技能和问题解决能力。

通过课程学习,使学生能够独立完成月历打印的编程任务,并在实践中提高自己的综合素质。

二、教学内容1. C语言基础知识复习:数组、循环(for、while)、条件语句(if-else)。

- 教材章节:第二章第四节、第三章第二节、第三章第三节。

2. 函数的定义与调用:理解函数的作用,学会编写和调用函数。

- 教材章节:第四章第一节。

3. 输入输出操作:掌握格式化输入输出函数(如:printf、scanf)的使用。

- 教材章节:第一章第五节。

4. 月历打印编程实践:- 教学大纲:a. 分析月历打印需求,明确任务目标。

b. 学习如何获取系统当前时间,提取月、日信息。

c. 编写函数计算星期的起始日期,实现月历的排版与打印。

d. 测试程序,优化代码,确保程序的正确性。

5. 编程思维与问题解决能力的培养:- 教学内容:a. 分析问题,抽象出关键信息。

b. 设计算法,分解任务。

c. 编写代码,实现功能。

d. 调试程序,找出并解决问题。

教学内容安排与进度:第一课时:复习C语言基础知识。

c语言程序的设计_打印月历

c语言程序的设计_打印月历

《C语言课程设计》课程设计报告题目学号姓名年级专业指导教师达成日期年月日2安徽师范大学物理与电子信息学院College of Physics and Electronic Information, Anhui Normal University一、问题描绘1)日期按礼拜摆列2)日历查问,输入日期进行查问。

3)闰年判断功能显示查问日期所在月份的月历,还将显示所在年份能否为闰年。

二、问题剖析关于要求1:依据蔡勒公式,能够很简单地有年代日推测出礼拜:rst=yr-1+(int)((yr-1)/4)-(int)((yr-1)/100)+(int)((yr-1)/400)+ds;wkd=rst%7;4)关于要求 2: 在打印月历时,只需知道第一天的礼拜,就能够挨次输入后边的日期,经过定长度输出日期,在碰到某时节礼拜六时,就换行输出,所以能够依据月历的格式输出。

5)关于要求 3:闰年的判断,能被4整除但不可以被100整除,或许能被400整除的年份为闰年,不然为平年。

日期的查问,就是直接打印改天所在月份的月历。

三、小构成员:四、整体设计功能模块输入日期日期查问闰年判断摆列礼拜月历显示流程图进入程序输入年代判断闰年按礼拜排输出月历五、详尽设计主要函数:int runYear(int year);该函数判断某年是不是闰年,参数year 表示要判断的年份,返回值 1 表示该年为闰年, 0 表示该年为平年。

int CalWkd(int yr,int mth)该函数确立每个月的天数,闰年二月为29 天。

showcld(int wkd,int mtd)该函数用以依据一个日期推测礼拜,参数为要判断的年代日。

返回值为整型,123456 分别表示礼拜一到礼拜六,0 表示礼拜天。

六、程序清单#include <stdio.h>int JgYr(int yr){if (yr%4==0&&yr%100!=0 | |yr%100==0&&yr%400==0)return 1;elsereturn 0;}int CalWkd(int yr,int mth){int ds=0,i,rst,wkd;int mthd[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};if (JgYr(yr))mthd[2]=29;for (i=1;i<mth;i++)ds+=mthd[i];ds+=1;rst=yr-1+(int)((yr-1)/4)-(int)((yr-1)/100)+(int)((yr-1)/400)+ds;wkd=rst%7;return wkd;}showcld(int wkd,int mtd){int dt=1,i,j=0;printf("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");for (i=0;i<wkd;i++){printf("\t");j++;}while (j!=7){printf("%d",dt);if (j<6)printf("\t");elseprintf("\n");dt++;j++;}while (1){for (j=0;j<7;j++){printf("%d",dt);if (j!=6)printf("\t");elseprintf("\n");if (dt!=mtd)dt++;elsereturn 0;}}}int main(){intyr,mth,mtd,wkd,mthd[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};printf("Input the Year and Month(Year-Month):");scanf("%d-%d",&yr,&mth);if (yr<0| | mth<1| | mth>12)return 0;if (JgYr(yr))mthd[2]=29;mtd=mthd[mth];wkd=CalWkd(yr,mth);showcld(wkd,mtd);return 0;}七、测试数据八、心得领会经过两周的奋战,终于达到了预约的成效,达成了该信息系统的设计和编写。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2
(函数的返回值即变量 weekday 的值:1 到 6 代表星期一到星期六,返回值是 0 代表是星期日) 。 接下来就是最重要的事情了,也就是在电脑屏幕上打印出该月的月历。我在函 数中定义了 Printclendar(int weekday,int monthday) 函数,此函数的作用就是实现 所需功能。在此函数中,我定义了计数变量 i,j,通过 weekday 的值可以知道此月的 1 号是星期几,在第一行打印 1 前全部打印\t,计数变量累加,计数变量的值达到 7 (j 从 0 开始)就输出\n 换行,最后从第二行开始又进行循环,当 i 累加到这个月 的总天数后结束循环,这样月历就打印出来了 最后就是主函数了,在主函数中依次调用 printmessage_1( ), Judgeweekday(year,month),Printclendar(weekday,monthday),printmessage_2( ), 最后在电脑屏幕上打印出相应年份的月份的月历。 四、运行结果: 程序运行后呈现如下界面:
1
一、问题描述: 打印月历程序要求在程序运行后年份和月份由键盘输入,然后按照日期和星期 相吻合的顺序把这个月的月历打印显示在屏幕上,打印的月历按星期一到星期日排 列。 二,基本要求: (1)要打印何年何月的月历完全由用户决定,在程序运行后由键盘输入。 (2)在打印月历中要注意闰年,大小月的问题,而且日期和星期要相对应。 三、系统分析与设计。 在打印月历程序中,程序可以根据用户输入的年份和月份在电脑屏幕上打印出 该月的月历,打印的月历是按星期一到星期日排列的。初看起来,打印月历的程序 的逻辑似乎十分简单,实际上却要考虑大量细节性问题,例如,闰年和大小月问题。 在程序的设计思路中,首先我定义了两个全局变量 int month,year;然后我定义 了两个函数 void printmessage_1()和 void printmessage_2()函数,第一个函数 的功能是在打印月历前显示友好界面和关于本打印月历程序的 Introductin。 第二个函数的功能是在打印月历后显示此程序的制作者等信息。而后我定义了 int EstimateYear(int year) 函数, 此函数是用来判断用户输入的年份是不是闰年 (此 函数有一个返回值,返回 1 代表是闰年,返回 0 代表是非闰年) 。 在后我定义了 int Judgeweekday(int year,int month) 函数,此函数的作用是用 来判断用户输入的月份的 1 号是星期几。在函数体中有下面语句: rst=year-1+(int)((year-1)/4)-(int)((year-1)/100)+(int)((year-1)/400)+days; weekday=rst%7;
7
");
{ printf("\t"); j++; } while (j!=7) { printf("%3d",dt); if (j<6) printf("\t"); else printf("\n\t"); dt++; j++; } while (1) { for (j=0;j<7;j++) { printf("%3d",dt); if (j!=6) printf("\t"); else printf("\n\t"); if (dt!=monthday) dt++; else return 0; } } } main() { int monthday,weekday,monthdays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; printmessage_1(); scanf("%d-%d",&year,&month); if (year<0||month<1||month>12) return 0; if (EstimateYear(year)) monthdays[2]=29; monthday=monthdays[month]; weekday=Judgeweekday(year,month); Printclendar(weekday,monthday); printmessage_2( ); }
在界面上会提示用户输入数据的格式(Year-Month),例如用户输入 2009-6 后, 程序会显示如下界面:
3
又或者用户输入 19Biblioteka 0-6,程序会呈现如下界面:4
五、程序运行流程图:
程序开始
提示用户输 入 year,month. 输 入 (year,month) 判断是否非法输入
是 否 return 0 是 monthdays[2]=29
判断是否是闰年
否 monthdays[2]=28
判断此月的第一天是星期几
打印该年此月的月历
调用 printmessage_2( )函数
程序结束
六、小结及收获和体会: 在这次 C 语言程序设计中,我学到了很多东西,首先对于 C 语言中循环的 使用更加的娴熟,对于程序设计的思路也更加敏捷。当然在程序设计中我也 遇到了很多问题, 首先是 Printclendar(weekday,monthday)函数的设计思想上有问
xx 大学物理与电子信息学院 实验报告
专业名称:电子信息工程 实验室:3404 实验课程:C 语言课程设计 实验名称:打印月历 同组人员: xxx(0808299)、xxx(0808301) 、xxx(0808304) 编译环境:Visual C++ 指导老师:xxx 实验完成日期:2009-6-30
8
八、C 语言程序设计—打印月历完整源程序如下:
#include <stdio.h> int month,year; void printmessage_1( ) { printf("\n\t "); printf("\n\t ********************************************************** "); printf("\n\t * * "); printf("\n\t * Welcome to use this program ! * "); printf("\n\t * * "); printf("\n\t ********************************************************** "); printf("\n "); printf("\n Introduction\:"); printf("\n In this program,you can input a month in one year,then"); printf("\n it can show you the calendar of this month ! "); printf("\n "); printf("\n Let\'s have a try ! "); printf("\n "); printf("\n Please input the Year and Month (Year-Month) here : "); } void printmessage_2() { printf("\n --------------------------------------------------------"); printf("\n "); printf("\n Thank you for using this program !"); printf("\n designer\: "); printf("\n Wu shaoxiang"); printf("\n Wu xiaoyan "); printf("\n Xiao fei \n");
6
} int EstimateYear(int year) { int leap; if(year%4==0) { if(year%100==0) { if(year%400==0) leap=1; else leap=0; } else leap=1; } else leap=0; return(leap); } int Judgeweekday(int year,int month) { int days=0,i,rst,weekday; int monthdays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; if (EstimateYear(year)) monthdays[2]=29; for (i=1;i<month;i++) days+=monthdays[i]; days+=1; rst=year-1+(int)((year-1)/4)-(int)((year-1)/100)+(int)((year-1)/400)+days; weekday=rst%7; return(weekday); } Printclendar(int weekday,int monthday) { int dt=1,i,j=0; printf("\n printf("\n\t\t The calendar of %d in %d \t\t",month,year); printf("\n --------------------------------------------------------"); printf("\n\tMon\tTue\tWed\tThu\tFri\tSat\tSun\n"); printf(" \t"); for (i=1;i<weekday;i++)
相关文档
最新文档