[C/C++/初学者]万年历(输入年份和月份,输出对应的日历表——数组)

news2025/1/15 12:45:22

//本代码不考虑历法问题,设定1年1月1日为星期一。

//以星期日为始。

//完整代码在最下方。

根据题意,我们首先需要接收年份的月份的数据。

	printf("请输入年份:");
	scanf("%d",&Year);

	printf("请输入月份:");
	scanf("%d",&Month);

如果我们要知道指定月份的第一天是星期几,

那么我们就需要一个基准点,以该基准点为起始向后推算。

那么就可以用年份减一乘上365,即(Year-1)*365,这样就可以得到我们所输入的这个年份之前有多少天。

s=365*(Year-1);

但我们都知道,在年份中有一个特殊的存在——闰年,2月为29天,一年有366天。

而这个问题也很好解决,只需要判断此前的是否有闰年的存在,

若有则在总天数上加一即可。


	for(i=1;i<Year;i++)
	{
		//判断是否有闰年,若有则累计
		if(i%4==0&&i%100!=0||i%400==0)
		{
			Count++;
		}
	}

	//由于闰年有366天,故每有一个闰年,我们就需要再日数上加一
	s=s+Count;

这样一来,我们就得到了指定年份之前的总天数,那么接下来就要计算指定月份之前的总天数了。

由于本题目要体现数组的应用,故我们把各月份的天数都保存到一个数组中。

为了在使用过程中,使得程序更加的简单明了,我们让数组的下标月份相对应。

例如:Day[1]代表一月,有31天。

int Day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

回到此前的闰年问题,若指定年份为闰年,我们就需要将该年二月的天数改为29天。

	//如果我们所输入的这年是闰年,则该年的二月是29天。
	if(Year%4==0&&Year%100!=0||Year%400==0)
	{
		Day[2]=29;
	}

利用循环,将指定月份前的天数与之前的数据相加,就得到指定月份之前的全部天数。

即,我们求2022年12月的日历表,那么就计算出了从1年1月1日到2022年11月的全部天数之和。

	//加上所输入的月份之前的日子,例如我们输入5月,则加上1,2,3,4月的天数
	for(i=0;i<Month;i++)
	{
		s=s+Day[i];
	}

在完成了这些准备工作后,我们就可以开始输出了。

首先将第一行的星期输出:日 一 二 三 四 五 六

 
	for(i=0;i<7;i++)
	{
		switch(i)
		{
		case 0:
			printf("  日");
			break;
		case 1:
			printf("  一");
			break;
		case 2:
			printf("  二");
			break;
		case 3:
			printf("  三");
			break;
		case 4:
			printf("  四");
			break;
		case 5:
			printf("  五");
			break;
		case 6:
			printf("  六\n");
			break;
		}
	}

紧接着就是空白问题了,即如果我们所求的该月的第一天为星期五,则前面星期日到星期四的数据为空,用k来保存这个数据,并通过循环输出空格符达到空白的效果。

    k=s%7;

    for(i=0;i<=k;i++)
	{
		printf("    ");
	}

最后就可以输出我们需要的日期啦,值得注意的是,由于我们是以星期日为始,所以每当日期来到星期六时,我们就需要对其进行换行。

    //输出我们所指定的月份的天数
	for(i=1;i<=Day[Month];i++)
	{
		printf("%4d",i);

		//控制每个星期的换行
		//以星期六为末尾进行换行
		if((i+k+1)%7==0)
		{
			printf("\n");
		}
	}

	printf("\n");

以下为完整代码:

#include<stdio.h>
int main( )
{
	int i,Count=0,k,Year,Month,s;
	//为了让序号和月份对应,我们这里的Day[0]设为0,月份从Day[1]开始计算。
	int Day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

	printf("请输入年份:");
	scanf("%d",&Year);

	printf("请输入月份:");
	scanf("%d",&Month);
	
	//假设没有闰年存在,那么我们所输入的这年的第一天之前就有s日。
	s=365*(Year-1);

	for(i=1;i<Year;i++)
	{
		//判断是否有闰年,若有则累计
		if(i%4==0&&i%100!=0||i%400==0)
		{
			Count++;
		}
	}

	//由于闰年有366天,故每有一个闰年,我们就需要再日数上加一
	s=s+Count;
	
	//如果我们所输入的这年是闰年,则该年的二月是29天。
	if(Year%4==0&&Year%100!=0||Year%400==0)
	{
		Day[2]=29;
	}

	//加上所输入的月份之前的日子,例如我们输入5月,则加上1,2,3,4月的天数
	for(i=0;i<Month;i++)
	{
		s=s+Day[i];
	}

	//得到总共的星期数
	k=s%7;

	//输出第一行的数据:日 一 二 三 四 五 六 
	for(i=0;i<7;i++)
	{
		switch(i)
		{
		case 0:
			printf("  日");
			break;
		case 1:
			printf("  一");
			break;
		case 2:
			printf("  二");
			break;
		case 3:
			printf("  三");
			break;
		case 4:
			printf("  四");
			break;
		case 5:
			printf("  五");
			break;
		case 6:
			printf("  六\n");
			break;
		}
	}

	//空白区域,例如我们需要的这个月的第一天是周二二,那么在此前的周日和周一则是空白的
	for(i=0;i<=k;i++)
	{
		printf("    ");
	}

	//输出我们所指定的月份的天数
	for(i=1;i<=Day[Month];i++)
	{
		printf("%4d",i);

		//控制每个星期的换行
		//以星期六为末尾进行换行
		if((i+k+1)%7==0)
		{
			printf("\n");
		}
	}

	printf("\n");
	
	return 0;
}

执行结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/94116.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity Addressables资源管理 资源组设置

Addressables资源管理总目录 1.Schema 翻译为&#xff1a;模式&#xff0c;计划。 目前理解为每个组的打包设置。 默认设置是只有两个Content Update Restriciton 和Content Packing& Loading 2.Content Update Restriction 内容更新方式 Can Change Post Release&…

Qt扫盲-QToolBox理论总结

QToolBox理论总结1. 简述2. 常用功能3. 信号&用途1. 简述 QToolBox 是一个类似前端的抽屉容器&#xff0c;它有一组选项卡&#xff0c;每个选项卡会在其下方自带有一个QWidget 来会显示一些内容。每个选项卡在选项卡列表中都有一个索引位置。这个选项卡的位置也是有顺序的…

Kerberos的概述和认证原理

什么是 Kerberos ​ Kerberos 是一种计算机网络认证协议&#xff0c;用来在非安全网络中&#xff0c;对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端/服务器结构&#xff0c;并且能够进行相互认证&#xff…

国产三维gis软件的行业赋能情况

自二十世纪六十年代世上第一个GIS——加拿大地理信息系统&#xff08;CGIS&#xff09;面世至今&#xff0c;短短的40多年&#xff0c;GIS技术性从咿呀学语迈向了健康成长&#xff0c;在土地规划、电力工程、电信网、大城市管道网、水利工程、消防安全、交通出行及其城乡规划等…

Webug靶场搭建详解

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是Webug靶场搭建详解。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未授权设…

C++ Reference: Standard C++ Library reference: Containers: map: map: find

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/find/ 公有成员函数 <map> std::map::find iterator find (const key_type& k); const_iterator find (const key_type& k) const;获取指向元素的iterator 在容器中搜索键值等于k的元素&…

助力软件供应链安全 蚂蚁集团多项产品入选信通院优秀案例

近日&#xff0c;由中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;主办&#xff0c;中国通信标准化协会云计算标准和开源推进委员会承办的3SCON软件供应链安全会议以线上直播形式召开。会上主办方发布了首期《软件供应链厂商和产品名录》&#xff0c;蚂蚁集…

mongoose 的打印改造

若要 mongoose.c 里的打印输出则需要在 main 函数里显式调用 mg_log_set(level)&#xff0c;参数是打印等级&#xff0c;如&#xff1a; mg_log_set(MG_LL_INFO);这样设置之后&#xff0c;程序执行起来就可以实现打印输出了&#xff0c;但这个输出着实让人看得不太明白&#x…

基于Python多元线性回归、机器学习、深度学习在近红外光谱分析中的实践应用

【详情链接】&#xff1a;基于Python多元线性回归、机器学习、深度学习在近红外光谱分析中的实践应用https://mp.weixin.qq.com/s?__bizMzU5NTkyMzcxNw&mid2247527433&idx2&sn4a73e8451b57819dce1b660b55f7befa&chksmfe68aa63c91f2375d992e418ea6006ab8ea835e…

[附源码]Nodejs计算机毕业设计基于的企业人事管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

使用Springboot框架手撸一个安全、可靠的本地缓存工具

前言&#x1f353; 在实现本地缓存的时候&#xff0c;我们经常使用线程安全的ConcurrentHashMap来暂存数据&#xff0c;然后加上SpringBoot自带的Scheduled定时刷新缓存。虽然这样可以实现本地缓存&#xff0c;但既不优雅也不安全&#xff0c;一个好的本地缓存工具应该是这样搭…

python 之 numpy图片处理 矩阵操作

目录 一&#xff1a;垂直方向翻转(行逆序) 二&#xff1a;水平方向翻转(列逆序) 三&#xff1a;垂直、水平方向翻转(行、列逆序) 四&#xff1a;调整亮度&#xff0c;变明亮*2.0 五&#xff1a;调整亮度&#xff0c;变暗 六&#xff1a;垂直方向裁剪 七&#xff1a;水平…

ESP32 ESP-IDF LVGL8 显示中文

陈拓 2022/12/15-2022/12/16 1. 开发环境 《ESP32 ESP-IDF LVGL8.3.3移植》 ESP32 ESP-IDF LVGL8.3.3移植_晨之清风的博客-CSDN博客ESP32 ESP-IDF LVGL8.3.3移植。https://blog.csdn.net/chentuo2000/article/details/128269394?spm1001.2014.3001.5501 2. 使用LVGL自带的中…

C# 创建WebService接口并连接

创建WebService项目 首先安装下.NET Framework4.6.2-4.7.1开发工具。 然后就是新建 ASP.NET Web应用程序 项目。 输入项目名称WebServiceDemo 选择空&#xff0c;然后先去掉HTTPS配置。 项目创建好之后&#xff0c;开始添加asmx文件. 添加好之后在添加一个有参数的名为Hel…

牛客java刷题知识点总结(六)

内存引用地址 内存引用地址&#xff0c;是指栈中存放的地址&#xff0c;来指向堆中的某个位置。 int 是基本类型&#xff0c;数据直接存放在栈中&#xff0c;不存在内存引用地址的说法 A对 指向常量池里的"hello"。 B对 题中没说声明的a是局部变量。 C错 int a 1;并…

DSPE-PEG-N3,磷脂-聚乙二醇-叠氮 点击化学PEG试剂,可用于药物传递、基因转染和生物分子修饰

中文名称 叠氮聚乙二醇磷脂、磷脂聚乙二醇叠氮 简称 N3-PEG-DSPE、DSPE-PEG-N3 物理性质&#xff1a;米白色/白色固体或粘性液体取决于分子量。 溶剂&#xff1a; 溶于大部分有机溶剂&#xff0c;和水有很好的溶解性。 活性基团&#xff1a; N3 反应基…

深度学习(17)—— 度量学习

深度学习&#xff08;17&#xff09;—— 度量学习 文章目录深度学习&#xff08;17&#xff09;—— 度量学习一、What?二、paired-based loss1. Contrastive loss2. Triplet loss3. Triplet center loss4.N-pair loss5. Quadruplet loss6. Lifted Structure Loss昨天讨论的时…

Linux安装tomcat 保姆级教程

一、安装前提 安装tomcat&#xff0c;前提需要安装jdk&#xff0c;如果没有安装 linux安装jdk教程(手动安装/yum安装) 保姆级教程_ 来杯咖啡的博客-CSDN博客 二、安装教程 1、下载tomcat tar包 官网下载地址: Apache Tomcat - Welcome! 2、将下载的压缩包上…

实验4 路由配置

实验4 路由配置一、实验目的二、实验要求三、实验步骤&#xff0c;数据记录及处理四&#xff0e;实验总结一、实验目的 1、路由配置&#xff1b; 2、配置静态路由&#xff1b; 3、掌握RIP协议配置。 二、实验要求 写出PC0与PC1连通的基本要求和配置过程 三、实验步骤&#…

UDP服务器

目录 一&#xff0c;介绍 二&#xff0c;日志 三&#xff0c;服务端 1&#xff0c;服务器参数 2&#xff0c;创建套接字 3,绑定 3.1 填充套接字信息 3.2 绑定 4&#xff0c;启动服务器 4.1接收客户端请求 4.2记录用户信息 4.3 消息转发 4.4 main函数代码 4.5服务器整…