C语言怎么打印输出某一年的日历
发表于:2024-10-02 作者:千家信息网编辑
千家信息网最后更新 2024年10月02日,本篇内容主要讲解"C语言怎么打印输出某一年的日历",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C语言怎么打印输出某一年的日历"吧!输入一个年份(1970以
千家信息网最后更新 2024年10月02日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安全错误
数据库的锁怎样保障安全
光遇服务器错误能收集蜡烛吗
软件开发的交付物
北京盈溢互联网科技公司
网络技术的分数线
sqllite数据库备份文件
软件开发与项目管理方向
前端获取服务器文件
天津免费客户管理软件开发
重庆小型软件开发公司
网络安全与社会稳定
国产全文数据库测试指标
网络安全调研报告怎么写
学校服务器不能联网
杭州创我网络技术有限公司
安徽h3c服务器多少钱
航天金税开票软件数据库
保护网络安全概括性措施
网络安全知识趣味答题
云服务器可以挂手游吗
方信软件开发有限公司
pppoe 服务器 设置
服务器开机卡死
搭建stun服务器
服务器永久保留日志如何设计架构
天鸿网络安全工程师
服务器管理口IP地址忘了
大数据及网络安全执法检查工
新乡软件开发优化价格
防止黑客 服务器
江苏交友软件开发要多少钱