C语言怎么打印输出某一年的日历
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容主要讲解"C语言怎么打印输出某一年的日历",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C语言怎么打印输出某一年的日历"吧!输入一个年份(1970以
千家信息网最后更新 2026年11月03日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安全错误
数据库的锁怎样保障安全
互联网加科技
互联网科技工作委员会毛军
互联网与科技金融数据
互联网科技小贷
宜安科技 互联网金融
广州互联网络科技有限公司
奇酷互联网络科技公司
卓越科技互联网 招聘
卫星互联网科技股票
科技互联网大厂
彤创互联网科技有限公司
坤平互联网科技
乌鲁木齐新华智原互联网科技学校
内蒙古九一互联网科技
互联网科技圈年度人物
启辰互联网科技
领航科技大厦互联网公司
广西科技产业互联网是什么
易租星互联网科技有限公司
武汉亿视互联网科技有限公司
云之行互联网科技
互联网科技行业发展
互联网科技资迅
深圳天众互联网科技公司
世界互联网领先科技成果获奖
互联网科技如何创业
工业互联网山东科技大学
互联网风格科技公司名称
互联网金融金融科技
数字科技和互联网金融哪个好