C语言,日历显示,年历显示,简单易懂_c语言年历显示_Devour123的博客-程序员秘密

技术标签: C语言  c语言  程序设计  小程序  数据结构  

日历显示

功能实现:

1.输入一个年份,输出是在屏幕上显示该年的日历

2.输入年月,输出该月的日历。

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

代码实现:

1.计算今天是星期几

int CaculateWeekDay(int y,int m, int d) {
    
	if(m==1||m==2) {
    
		m+=12;
		y--;
	}
	int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; // 计算今天是星期机
	return iWeek;
}

2.计算天数

int to_day(int y, int m, int d) {
    
	int mon[] = {
    0,31,28,31,30,31,30,31,31,30,31,30,31};  // 月份影射表
	int day = 0;
	int i;
	for(i=1; i<y; i++) {
    
		day += (i%4==0 && i%100!=0 || i%400==0)? 366 : 365;
	}
	if(y%4==0 && y%100!=0 || y%400==0) mon[2]++;  // 计算结果
	for(i=1; i<m; i++) {
    
		day += mon[i];   // 计算
	}
	return day + d;

3.闰年判断

int isleapyear(int year) {
    
	if((year%4==0)&&(year%100!=0)||(year%400==0))
		return 1;
	else
		return 0;
}

3.获得每个月的天数

int monthday(int month,int year) {
    
	// 获取每个月的天数量
	switch(month) {
    
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			return 31;
			break;

		case 4:
		case 6:
		case 9:
		case 11:
			return 30;
			break;

		case 2:
			if(isleapyear(year)) {
    
				return 29;//闰年29天
				break;
			} else {
    
				return 28;
				break;
			}

	}

}

4.主函数显示

int main() {
    
	time_t timep;
	struct tm *p;
	time(&timep);
	p=gmtime(&timep);
	char v[10];
	int year=0,month,days,weekday;
	int i,d,a,b,c,m=0,dt=0;
	while(1) {
    
		printf("please input the year:");
		scanf("%s",v);
		year = (v[0]-'0')*1000+(v[1]-'0')*100+(v[2]-'0')*10+(v[3]-'0');
		int l = strlen(v);
		if(l==6||l==7) {
     // i.e 2020.1 2020.12 length 6-7
			if(l==6) {
    
				m = v[5]-'0';
			}
			if(l==7) {
    
				m = (v[5]-'0')*10+(v[6]-'0');
			}
		} else if(l==8||l==9||l==10) {
      
			if(l==8) {
    
				m = v[5]-'0';
				dt= v[7];
			} else if(l==9) {
    
				if(v[6]=='.') {
    
					m = v[5]-'0';
					dt = (v[7]-'0')*10+(v[8]-'0');
				} else {
    
					m = (v[5]-'0')*10+(v[6]-'0');
					dt = (v[8]-'0');
				}
			} else {
    
				m = (v[5]-'0')*10+(v[6]-'0');
				dt = (v[8]-'0')*10+(v[9]-'0');
			}
		}
		days = year-1+(year-1)/400+(year-1)/4-(year-1)/100;
		if(m==0) {
    
			for(month=1; month<=12; month++) {
    
				printf("\t\t****%d年--%d月****\n",year,month);
				printf("sun\tmon\ttues\twed\tthur\tfir\tsat\t\n");//表头
				i = 1;
				d = 1;
				weekday = (days + 1)%7;  //求星期几
				while(i<=weekday) {
     //输出前面的空格
					printf("\t");
					i++;
				}

				while(d<=monthday(month,year)) {
       //输出日期
					weekday = (days + 1)%7;
					if(weekday==6)   //最后一个是星期六,输出之后要换行
						printf("%d\n",d);
					else             //不是星期六的输出后不换行
						printf("%d\t",d);
					if(d==monthday(month,year))
						printf("\n");
					d++;
					days++;
				}
			}
		} else {
    
			if(dt==0) {
    
				for(month=m; month<=m; month++) {
    
					printf("\t\t****%d年--%d月****\n",year,month);
					printf("sun\tmon\ttues\twed\tthur\tfir\tsat\t\n");//表头
					i = 1;
					d = 1;
					weekday = (days + 1)%7;  //求星期几
					while(i<=weekday) {
     //输出前面的空格
						printf("\t");
						i++;
					}
					while(d<=monthday(month,year)) {
       //输出日期
						weekday = (days + 1)%7;
						if(weekday==6)   //最后一个是星期六,输出之后要换行
							printf("%d\n",d);
						else             //不是星期六的输出后不换行
							printf("%d\t",d);
						if(d==monthday(month,year))
							printf("\n");
						d++;
						days++;
					}
				}
			} else {
    
				printf("距离今天:%d 星期%d 不是公立节日\n",diff(year,m,d,p->tm_year+1900,p->tm_mon+1,p->tm_mday),CaculateWeekDay(year,m,d)+1);
			}
		}
	}
}

5.完整程序

年历显示

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wang123456___/article/details/114544173

智能推荐

matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域_qq_643582002的博客-程序员秘密

matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域

解决MacOS Catalina PyCharm无法获取摄像头权限的问题_The Chainsmokers的博客-程序员秘密

当使用Pycharm和OpenCV调用摄像头时报错Process finished with exit code 134 (interrupted by signal 6: SIGABRT)这应该是MacOS Catalina新的安全协议导致的,md三个多月了PyCharm还没有从软件上解决这个问题,在调用期间Pycharm也没有发出访问摄像头的对话框我的思路是通过终端运行Pycharm...

i2c_smbus_read_byte ()/i2c_smbus_write_byte()/i2c_smbus_read_byte_data ()/i2c_smbus_write_byte_data_angle_birds的博客-程序员秘密

Namei2c_smbus_read_byte — SMBus “receive byte” protocolSynopsiss32 fsfunci2c_smbus_read_byte (const struct i2c_client * client); ArgumentsclientHandle to sl

SpringBoot自动装配原理_陌养的博客-程序员秘密

springboot主要是依赖一个父项目,主要是管理项目的资源过滤及插件!pom.xml &lt;parent&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt; &lt;version&gt;2.3.2.RELEASE&lt;/version&gt;

Unity 协程的一些基本用法及测试(一)_好身亡的博客-程序员秘密

协程的流程:Unity的协程按我自己的理解就是将一段代码延迟一段时间后再去执行,它的执行顺序是先启动协程,然后执行协程内的代码一直到yield语句,然后继续执行主程的代码,直到yield条件满足后程序会再次跳到yield之后的语句继续执行协程内的语句,知道协程内的语句执行完,或者又遇到yield语句,就继续上述流程。(具体可以去百度协程,这里只是大概讲一下)无参数的协程的启用与禁止:...

随便推点

【Word】如何写文档时插入代码?代码美观大方_人工智能博士的博客-程序员秘密

比如这样的代码http://www.planetb.ca/syntax-highlight-word打开网站后,然后输入,选择语言,然后高亮后复制即可

好程序员Java教程分享JavaScript常见面试题二_好程序员IT的博客-程序员秘密

好程序员Java教程分享JavaScript常见面试题二:1.在JavaScript源文件的开头包含 use strict 有什么意义和好处?对于这个问题,既简要又最重要的答案是,use strict 是一种在JavaScript代码运行时自动实行更严格解析和错误处理的方法。那些被忽略或默默失败了的代码错误,会产生错误或抛出异常。通常而言,这是一个很好的做法。严格模式的一些主要优点包括:...

nodejs 环境配置_nodejs怎么配置环境_崽崽攻城狮的博客-程序员秘密

nodejs 下载地址 https://nodejs.org/en/download/下载.msi格式的文件,傻瓜式安装,一直下一步直到完成。打开cmd, node -v 和 npm -v 分别查看node和npm的版本号,并检验是否安装成功。这里配置自定义的全局模块安装目录,在node.js安装目录下新建两个文件夹 node_global和node_cache。(因为在执行例如npm install webpack -g等命令全局安装的时候,默认会将模块安装在C:\Users\用户名\AppDat

二叉树遍历算法的应用_wmy0217_的博客-程序员秘密

文章目录先序遍历的顺序建立二叉链表复制二叉树计算二叉树的深度统计二叉树中结点的个数计算二叉树叶子结点数先序遍历的顺序建立二叉链表【算法步骤】①扫描字符序列,读入字符ch②如果ch是一个“#”字符,则表明该二叉树为空树,即 T 为NULL;否则执行以下操作:申请一个结点空间 T将 ch 赋给T-&gt;data递归创建T的左子树递归创建T的右子树【算法描述】void Crea...

Prthon基础及简单语法_青衫折扇的博客-程序员秘密

python的简单介绍1.python 是一种解释型语言,意味着没有贬义过程,是一门及时运行的语言,类似于php,javascript;2.python 是交互式语言,意味着你可以使用一个提示符,直接执行你的代码;3.python是面相对象语言,这意味着python可以使用面相对象的风格进行封装;4.python是一门初学者语言,这意味着python入门的门槛比较低;1.python的特点1.易于...

记本无法连接MINI2440 ARM开发板串口总结_mini2440串口连接不到电脑_HHBBHH的博客-程序员秘密

基本问题可以总结为以下几点:注我的系统是XP SP3,开发板是友善mini2440开发板,连接串口的程序是XP下的超级终端。1、首先检查串口是否正常收发数据,具体检查方法参见总结1.      我第一次买的笔记本的USB口转串口的转接线就不能使用,用串口调试工具测试9针的串口2,3脚端接;发现可以发送数据,但是无回显。对于这种情况需要重新购买一根转接线,我后来新买了一根力特的USB

推荐文章

热门文章

相关标签