C语言怎么打印输出某一年的日历
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,本篇内容主要讲解"C语言怎么打印输出某一年的日历",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C语言怎么打印输出某一年的日历"吧!输入一个年份(1970以
千家信息网最后更新 2025年01月20日C语言怎么打印输出某一年的日历
本篇内容主要讲解"C语言怎么打印输出某一年的日历",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C语言怎么打印输出某一年的日历"吧!
输入一个年份(1970以后的),以 2*6 的格式打印当年的日历。
主要思路:遍历日期,根据日期标记每一行应该打印的内容,存放到一个数组中,然后遍历数组,根据数组的内容逐行打印。代码如下:
// 打印日历#define _CRT_SECURE_NO_WARNINGS#includechar month[12][10] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };//计算某日期是当年的第几天int day_in_year(int y, int m, int d) { int r_day = 0; int m_days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };//每个月的天数 m_days[1] += y % 400 == 0 || y % 4 == 0 && y % 100 != 0; for (int i = 0; i < m - 1; ++i) { r_day += m_days[i]; } r_day += d; return r_day;}//计算某日是星期几int getWeek(int y, int m, int d) { //先计算出来距离1970年1月1日周四有多少天 int days = 0; //当日距离1970.1.1的天数 int res; //存放结果,周几 if (y == 1970) { days = day_in_year(y, m, d); } else { for (int i = 1970; i < y; ++i) { days = days + 365 + (i % 400 == 0 || i % 4 == 0 && i % 100 != 0); } days += (day_in_year(y, m, d) - 1);//因为算的是距离多少天,所以需要减一 } //然后计算当日是周几 res = (days + 4) % 7; return res;}//打印日历void displayCalendar(int y) { int m_days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };//每个月的天数 m_days[1] = 28 + (y % 400 == 0 || y % 4 == 0 && y % 100 != 0); int week_l;//左边月份的第一天是周几 int week_r;//右边月份的第一天是周几 for (int m = 0; m < 6; ++m) {//m控制月份,比实际月份小1 //打印日历的表头 printf("%-12s %-12s\n", month[m], month[m + 6]); printf("--------------------------- --------------------------- \n"); printf("Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat \n"); week_l = getWeek(y, m + 1, 1);//求出左边月份的第一天是星期几 week_r = getWeek(y, m + 7, 1);//求出右边列月份的第一天是星期几 int date_l = 1; int date_r = 1; while (date_l <= week_l + m_days[m] || date_r <= week_r + m_days[m + 6]) { //在范围内,打印 int tag[15] = { 0 };//用来标记应该打印什么,整数表示打印日期,-1表示打印空格 tag[7] = -1;//左右界线 for (int p = 0; p < 7; ++p, ++date_l, ++date_r) {//p为tag的指针 //根据指针p给tag赋值 if (date_l <= week_l + m_days[m]) { if (date_l < week_l) { //指针还没有到左边月份的第一天,应该打印空格 tag[p] = -1; } else { //记录应该打印的日期 tag[p] = date_l - week_l; } } else {//该打印的日期标记完了,其他的用空格补上 tag[p] = -1; } //标记右边的情况,逻辑与左边的一样 if (date_r <= week_r + m_days[m + 6]) { if (date_r < week_r) { tag[p + 8] = -1; } else { tag[p + 8] = date_r - week_r; } } else { tag[p + 8] = -1; } } //一行一行打印 for (int i = 0; i < 15; ++i) { if (tag[i] == -1||tag[i] == 0) { //没有日期要打印,打印四个空格 printf(" "); } else { //有日期打印,打印日期 printf("%-4d", tag[i]); } } printf("\n"); } printf("\n"); }}int main() { int year;//输入年份,打印该年的日历 scanf("%d", &year); displayCalendar(year); return 0;}
运行效果如下:
到此,相信大家对"C语言怎么打印输出某一年的日历"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
日期
日历
月份
内容
标记
空格
语言
输出
一行
右边
天数
指针
数组
星期
实际
年份
求出
学习
输入
实用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库王珊第5版教学ppt
数据库与服务器关系
互联网服务网络技术
linux数据库怎么导入
郑州市比较好的网络技术学校
顺丰车软件开发
赣州网络技术推广
网络技术知识分享
通过代理服务器连接到因特网
中国互联网公司的黑科技
三网通哪个服务器人最多
查看数据库表的命令是什么
企业网络安全如何设计折页
甘孜软件开发怎么样
ibm 8路服务器
电子邮件服务器的板块
数据库系统第二章总结
如何进入网络安全大会
教育系统网络安全专题交流研讨
济南数据中心服务器
大学生对网络安全的调查问卷
软件开发的创作特征
佛山信息软件开发收费
自贡网络技术参数
php 服务器下载文件
群晖服务器怎么玩
易租星互联网科技有限公司
数据库CAD图
三级 网络技术 题库
网络安全陈承曦是干什么的