c++ 头歌实训 第四关 日历打印
首先把代码放在前
// 包含两种I/O库,可以使用任一种输入输出方式
#include <stdio.h>
#include <iostream>
using namespace std;// 函数printMonth:按要求的格式打印某年某月的日历
// 参数:year-年,month-月
// 返回值:无
void printMonth(int year, int month);// leapYear:判断闰年
// 参数:y-年
// 返回值:1-是闰年,0-不是闰年
int leapYear(int y)
{if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)return 1;return 0;
}// 函数whatDay:计算某年某月的1号是星期几
// 参数:year-年,month-月
// 返回值:1到7--星期1到星期日
int whatDay(int year, int month)
{// 1年月日是星期一int w = 1;int i;// 1到year-1都是全年for(i = 1; i < year; i++){if(leapYear(i))w += 366;elsew += 365;}switch(month){case 12: // 加月的w += 30;case 11: // 加月的w += 31;case 10: // 加月的w += 30;case 9: // 加月的w += 31;case 8: // 加月的w += 31;case 7: // 加月的w += 30;case 6: // 加月的w += 31;case 5: // 加月的w += 30;case 4: // 加月的w += 31;case 3: // 加月的if(leapYear(year))w += 29;elsew += 28;case 2: // 加月的天w += 31;case 1: // 1月不加了;}// 得到-6,其中为星期天w = w % 7;// 调整星期天if(w == 0)w = 7;return w;
}// 请在下面补充代码,实现函数printMonth
/*************** Begin **************/---------------------------------------------------
void printMonth(int year,int month){cout<<" 一 二 三 四 五 六 日"<<endl;int day=whatDay( year, month);for (int i=1;i<=(3+4*(day-1));i++){cout<<" ";}cout<<"1";for (int j=2;j<=(7-day)+1;j++){cout<<" "<<j;}cout<<endl;//第一行if (month==1 || month==3 ||month==5 || month==7||month==8||month==10||month==12){int m=0;for(int i=(9-day);i<=31;i++){if (i<=9){cout<<" "<<i;}if (i>=10){cout<<" "<<i;}m++;if (m==7){cout<<endl;m=0;}}}if (month==4 || month==6 ||month==9|| month==11){int m=0;for(int i=(9-day);i<=30;i++){if (i<=9){cout<<" "<<i;}if (i>=10){cout<<" "<<i;}m++;if (m==7){cout<<endl;m=0;}}}if(month==2){if(leapYear( year)){int m=0;for(int i=(9-day);i<=29;i++){if (i<=9){cout<<" "<<i;}if (i>=10){cout<<" "<<i;}m++;if (m==7){cout<<endl;m=0;}}}else{int m=0;for(int i=(9-day);i<=28;i++){if (i<=9){cout<<" "<<i;}if (i>=10){cout<<" "<<i;}m++;if (m==7){cout<<endl;m=0;}}}}}/*************** End **************/-----------------------------------------------------int main()
{// 年、月int y, m;// 输入年月cin >> y >> m;// 输出该年月的日历printMonth(y,m);return 0;
}
我的思路是对要打印的日历逐行进行分析,每一块是四个字节的宽度,一个数字是一个字节,两个数字是两个字节,这是一个注意点,对于不同的数字有不同的输出。还要注意第三行开始数字的判定,经列举发现,开头数字与星期几的判定数字和恰为9,以此我们可以开始对第三行的打印。里面的if else比较多,注意花括号位置规范作用域。
将打印部分进行封住,这样也许会更美观一些。
void print(year,month)//月份 年份
{cout<<" 一 二 三 四 五 六 日"<<endl;int day=whatDay( year, month);for (int i=1;i<=(3+4*(day-1));i++){cout<<" ";}cout<<"1";for (int j=2;j<=(7-day)+1;j++){cout<<" "<<j;}cout<<endl;//第一行//其余行int days;//相应月份的天数------------ //此行代码为判断月份的天数int m=0;for(int i=(9-day);i<=days;i++){if (i<=9){cout<<" "<<i;}if (i>=10){cout<<" "<<i;}m++;if (m==7){cout<<endl;m=0;}}
}
c++ 头歌实训 第四关 日历打印相关推荐
- educoder头歌实训 web课——JavaScript语言基础:JS循环语句
educoder头歌实训 太原理工大学web课程----JavaScript语法基础:JS运算符_玛卡巴卡的博客-CSDN博客 第1关:while类型 任务描述 质数的定义如下:大于1的自然数,且除 ...
- 数据库原理 头歌实训 数据库常用对象
SQL视图的定义与操纵 第1关:创建行列子集视图 任务描述 本关任务:创建计算机系的学生信息的视图 student_cs. 相关知识 行列子集视图是指视图的结果集来源于基本表,没有经过二次计算. ## ...
- 湖南大学python头歌实训-循环语句
文章目录 第二章-Python语言基础-2.3循环(一) 第1关:While循环与break语句 第2关:for循环※ 第3关:for循环与continue语句 第4关:循环嵌套 第5关:迭代器 第二 ...
- 湖南大学python头歌实训-分支语句
文章目录 第二章-Python语言基础-2.2条件分支(一) 第1关:顺序结构 第2关:选择结构:if-else 第3关:选择结构 - 三元操作符 第4关:选择结构-入门实训 第二章-Python语言 ...
- JAVA程序设计-头歌实训-------# 第一阶段 Java语言快速入门
第一阶段 Java语言快速入门 第1关:Java程序的基本框架:Hello Java World! 任务描述 本关的任务是编写你人生中第一个Java程序,从此开启你的Java实训之旅,显示效果如下: ...
- 头歌实训平台Python
目录 Python 初体验-- Hello world 第1关 Hello Python,我来了! Python控制结构(一)※ 第1关 if分支入门※ 第2关 while循环分支入门※ 学习- ...
- 【头歌实训】Java高级特性 - 多线程基础(1)使用线程,使用 Callable 和 Future 创建线程
任务描述 本关任务:通过 Callable 和 Future 来创建线程. 相关知识 从Java1.5版本开始,就提供了 Callable 和 Future 来创建线程,这种方式也是在Java程序员面 ...
- 计算机图形学头歌实训平台作业OpenGL立方体三维观察
立方体三维观察 第一关 立方体模型变换 第二关 立方体视图变换 第三关 立方体三点透视 第四关 立方体平行投影 第五关 立方体视口变换 第一关 立方体模型变换 // 提示:在合适的地方修改或添加代码 ...
- 头歌实训之python字典入门
第一关 字典 本关的编程任务是:通过重新创建上面的字典,将内容评级映射到相应的数字:{'4+': 4433, '9+': 987, '12+': 1155, '17+': 622}.具体要求如下: 将 ...
- 数字逻辑---头歌实训作业---逻辑函数及其描述工具(Logisim)
第1关:根据布尔表达式绘制电路 如有任何不解或者想要最终实验代码,可评论区喊话哦,希望我的答案对你有帮助,点个关注再走吧,感谢!!! 本关卡最终答案: 任务描述 本关任务:在Logisim中根据给定的 ...
最新文章
- mysql2008 limit,在SQL Server中实现 Limit m, n 的功能
- 自适应游标共享技术01(Adaptive Cursor Sharing)
- 花小猪,真正的对手是谁?
- Vivado无法双击打开xpr工程文件的解决办法
- 前端学习(1133):正则表达式概述
- CNN和FCN的区别
- 关于前端惰性加载(jquery_lazyload)的使用和原理分析
- GB28181移植总结
- 协作多智能体强化学习中的回报函数设计
- php 医疗报销系统,费用报销系统
- 微信内置浏览器直接下载APK的解决方法
- XMind--思维导图
- Python实现Excel随机抽取数
- java火车站售票源代码_火车票管理系统 - WEB源码|JSP源码/Java|源代码 - 源码中国...
- 最牛最新奶粉事件“争抢奶粉互殴”值得我们大家去深思
- Thinkphp使用CKEditor4富文本编辑器
- 优化AI搜索引擎,从这3个领域入手!
- 拥有自己的百度直达号
- python爬取公众号文章数据库,爬取微信公众号所有文章的请教
- java项目进度跟踪管理系统
热门文章
- 华商网H.S.W社团:寻找有创造力的陕西大学生
- wincc c 语言改颜色,wincc常用c脚本小草设置
- “互联网+”拯救了星巴克
- php5.6安装zendopcache加速
- 三色旗java_经典算法-(四)三色旗
- 你知道啥是无监督聚类吗?
- uis向3d投影全息界面的连续演化。
- 华为服务器SNMP协议怎么修改,华为S5700交换机开启SNMP协议
- “革命者”贝壳找房:如何让房产经纪行业进入新大陆?
- Verilog 避免 Latch