首先把代码放在前

// 包含两种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++ 头歌实训 第四关 日历打印相关推荐

  1. educoder头歌实训 web课——JavaScript语言基础:JS循环语句

    educoder头歌实训 太原理工大学web课程----JavaScript语法基础:JS运算符_玛卡巴卡的博客-CSDN博客 第1关:while类型 任务描述 质数的定义如下:大于1的自然数,且除 ...

  2. 数据库原理 头歌实训 数据库常用对象

    SQL视图的定义与操纵 第1关:创建行列子集视图 任务描述 本关任务:创建计算机系的学生信息的视图 student_cs. 相关知识 行列子集视图是指视图的结果集来源于基本表,没有经过二次计算. ## ...

  3. 湖南大学python头歌实训-循环语句

    文章目录 第二章-Python语言基础-2.3循环(一) 第1关:While循环与break语句 第2关:for循环※ 第3关:for循环与continue语句 第4关:循环嵌套 第5关:迭代器 第二 ...

  4. 湖南大学python头歌实训-分支语句

    文章目录 第二章-Python语言基础-2.2条件分支(一) 第1关:顺序结构 第2关:选择结构:if-else 第3关:选择结构 - 三元操作符 第4关:选择结构-入门实训 第二章-Python语言 ...

  5. JAVA程序设计-头歌实训-------# 第一阶段 Java语言快速入门

    第一阶段 Java语言快速入门 第1关:Java程序的基本框架:Hello Java World! 任务描述 本关的任务是编写你人生中第一个Java程序,从此开启你的Java实训之旅,显示效果如下: ...

  6. 头歌实训平台Python

    目录 Python 初体验-- Hello world 第1关  Hello Python,我来了! Python控制结构(一)※ 第1关  if分支入门※ 第2关  while循环分支入门※ 学习- ...

  7. 【头歌实训】Java高级特性 - 多线程基础(1)使用线程,使用 Callable 和 Future 创建线程

    任务描述 本关任务:通过 Callable 和 Future 来创建线程. 相关知识 从Java1.5版本开始,就提供了 Callable 和 Future 来创建线程,这种方式也是在Java程序员面 ...

  8. 计算机图形学头歌实训平台作业OpenGL立方体三维观察

    立方体三维观察 第一关 立方体模型变换 第二关 立方体视图变换 第三关 立方体三点透视 第四关 立方体平行投影 第五关 立方体视口变换 第一关 立方体模型变换 // 提示:在合适的地方修改或添加代码 ...

  9. 头歌实训之python字典入门

    第一关 字典 本关的编程任务是:通过重新创建上面的字典,将内容评级映射到相应的数字:{'4+': 4433, '9+': 987, '12+': 1155, '17+': 622}.具体要求如下: 将 ...

  10. 数字逻辑---头歌实训作业---逻辑函数及其描述工具(Logisim)

    第1关:根据布尔表达式绘制电路 如有任何不解或者想要最终实验代码,可评论区喊话哦,希望我的答案对你有帮助,点个关注再走吧,感谢!!! 本关卡最终答案: 任务描述 本关任务:在Logisim中根据给定的 ...

最新文章

  1. mysql2008 limit,在SQL Server中实现 Limit m, n 的功能
  2. 自适应游标共享技术01(Adaptive Cursor Sharing)
  3. 花小猪,真正的对手是谁?
  4. Vivado无法双击打开xpr工程文件的解决办法
  5. 前端学习(1133):正则表达式概述
  6. CNN和FCN的区别
  7. 关于前端惰性加载(jquery_lazyload)的使用和原理分析
  8. GB28181移植总结
  9. 协作多智能体强化学习中的回报函数设计
  10. php 医疗报销系统,费用报销系统
  11. 微信内置浏览器直接下载APK的解决方法
  12. XMind--思维导图
  13. Python实现Excel随机抽取数
  14. java火车站售票源代码_火车票管理系统 - WEB源码|JSP源码/Java|源代码 - 源码中国...
  15. 最牛最新奶粉事件“争抢奶粉互殴”值得我们大家去深思
  16. Thinkphp使用CKEditor4富文本编辑器
  17. 优化AI搜索引擎,从这3个领域入手!
  18. 拥有自己的百度直达号
  19. python爬取公众号文章数据库,爬取微信公众号所有文章的请教
  20. java项目进度跟踪管理系统

热门文章

  1. 华商网H.S.W社团:寻找有创造力的陕西大学生
  2. wincc c 语言改颜色,wincc常用c脚本小草设置
  3. “互联网+”拯救了星巴克
  4. php5.6安装zendopcache加速
  5. 三色旗java_经典算法-(四)三色旗
  6. 你知道啥是无监督聚类吗?
  7. uis向3d投影全息界面的连续演化。
  8. 华为服务器SNMP协议怎么修改,华为S5700交换机开启SNMP协议
  9. “革命者”贝壳找房:如何让房产经纪行业进入新大陆?
  10. Verilog 避免 Latch