打印一年内任意月份的日历(C语言)
题目要求:2007年1月1日为星期一,编写一个函数,输出2007年任意月份的日历
这道题我是个人的做法,有个别地方可能有些绕。
#include<stdio.h>
int main()
{int month,WEEKDAY,count,month_days,width;int isWhatDay(int month); //声明计算的函数printf("Please enter a month:\n");scanf("%d",&month);WEEKDAY = isWhatDay(month); //将函数返回值赋给WEEKDAYprintf("Calendar 2007 - %d\n",month);printf("----------------------------\n");printf(" Su Mo Tu We Th Fr Sa\n"); //空白处是两个空格//下面是赋各个月份的天数if(month == 1||month == 3||month == 5||month == 7||month ==8||month == 10||month == 12)month_days = 31;else if(month == 2)month_days = 28;elsemonth_days = 30;width = 4 * WEEKDAY; /*此处计算width可能一开始看不懂,实际上是为了打印空格,空格不printf到第一天的前一位是因为下面输出是%4d,其前三位是空格了。*/for(count = 1;count <= width;count++)printf(" ");for(count = 1;count <= month_days;count++){printf("%4d",count);if(WEEKDAY + (count - 1) % 7 == 6) //这个if是因为到星期六就换行所以我从这个出发写出的等式printf("\n");}printf("\n----------------------------\n");return 0;}
int isWhatDay(int month)
{int weekday,distance;int days = 0;switch(month)/*没有break,是为了求出输入月份的第一天的前一天距这一年第一天有多少天,以便打出相应空格*/{case 12: days += 30; case 11: days += 31;case 10: days += 30;case 9: days += 31;case 8: days += 31;case 7: days += 30;case 6: days += 31;case 5: days += 30;case 4: days += 31;case 3: days += 28;case 2: days += 31; //注意:没有1月。 }distance = days % 7;switch(distance) //余0即表明上个月最后一天即星期一,余6即星期六{case 0: weekday = 1; break;case 1: weekday = 2; break;case 2: weekday = 3; break;case 3: weekday = 4; break;case 4: weekday = 5; break;case 5: weekday = 6; break;case 6: weekday = 0; break; }return weekday; //return打印相应空格
}
另外,加上年份其实也不难,仅需要加上个闰年判断,int i = 0; 二月是28 + i;如果是闰年i = 1即可。
欢迎交流探讨。
谢谢。
打印一年内任意月份的日历(C语言)相关推荐
- 【SQL开发实战技巧】系列(十九):数据仓库中时间类型操作(进阶)如何一个SQL打印当月或一年的日历?如何确定某月内第一个和最后—个周内某天的日期?
系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...
- C语言打印某一年的全部日历(两行日历形式)
C语言打印某一年的全部日历(两行日历形式) 输入一个年份(1970以后的),以如下的格式打印当年的日历 输入: Please input the year whose calendear you wa ...
- 输入一个年份,月份,输出该月份的日历。
//输入一个年份,月份,输出该月份的日历. #include<cstdio> #include<iostream> #include<cstring> using ...
- 打印1998年2月的日历
/*** * 打印1998年2月的日历* 请使用循环打印1997年7月的日历* 已知:1998年2月1日(星期日),* @author Monster丶ZF* @version1.8* @data 2 ...
- C语言pi等于前一百项相乘,2011年9月份计算二级C语言上机题库(可缩印做小抄)百分百准确.doc...
2011年9月份计算二级C语言上机题库(可缩印做小抄)百分百准确 第一套 程序填空 程序通过定义学生结构体数组,存储了若干个学生的学号.姓名和三门课的成绩.函数fun的功能是将存放学生数据的结构体数组 ...
- c语言编程题输出2012年日历,C语言编程:输入任意一个年份和月份,输出该月份的公历日历...
//⑴程序功能描述: 输入任意一个年份和月份,按以下格式输出该月份的公历日历. // 要求由程序计算出来该月份的1日是星期几,并用循环控制打印. // 打印样例如下: // 2012年日历 // == ...
- java 输出当月日历_java 实现打印当前月份的日历
实现当前日历的打印,当前日期用*来表示. 关键得出这个月的第一天是星期几. 基姆拉尔森计算公式 W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 在公式中d表示 ...
- 输入年份月份实现日历打印,C到C++过渡。
7月11日 注意事项 算法介绍 函数封装 1.计算某年是闰年 2.获取某年某月距1月1日共有多少天 3.计算某年某月到1900年1月1日有多少天 4.日历显示 C++编程实现输入年份月份打印日历功能 ...
- java如何打印当前月份日历_java打印指定年月份的日历
本文实例为大家分享了java打印指定年月份日历的具体代码,供大家参考,具体内容如下 做了一个小的日历打印,没有使用数组,所以不能对日期进行操作,用了单个for循环打印,对初学者来说应该好理解点 工具类 ...
最新文章
- Linux shell test用法
- akka_Akka的字数统计MapReduce
- java.lang.NoSuchMethodError: org.springframework.beans.MutablePropertyValues.add
- SpringMVC简单小案例
- 怎么重新启动协议服务器,如何启用或禁用服务器网络协议 (SQL Server PowerShell)
- 三星发布A60 元气版:骁龙675 售价1499元
- UOJ#386. 【UNR #3】鸽子固定器(链表)
- 转载 WebService 的CXF框架 WS方式Spring开发
- oracle 命令行执行sql文件
- 高德地图显示多个气泡_arcgis api 4.x for js 地图加载多个气泡窗口展示(附源码下载)...
- 使用ASP.NET Global.asax 文件(转)
- C语言数字转换为字符的问题
- 【数学分析笔记01】平均值不等式证明
- seay代码审计mysql插件报错_Seay源代码审计系统2.1版本下载(附源码): 人人都是代码审计师...
- VelocityTracker使用总结
- Scala Either Left Right
- centos 基础镜像中安装失败,提示:Error: Failed to download metadata for repo ‘AppStream‘: Cannot prepare internal
- 《平衡掌控者 游戏数值战斗设计》学习笔记(二)人物基础属性设计
- 6410同时支持colorkey和aphablend
- 软件研发之道:微软开发团队的经验法则
热门文章
- 手机软件测试自学乐器,自学乐器不难!——从用好这6款APP开始吧
- oracle rman crosscheck,rman 之crosscheck 与delete expired
- 浏览器打开服务器上的图片无法显示,网页中的图片打不开怎么办?原因与解决办法...
- QString常用方法介绍
- python打印菱形三种方法_用python打印菱形的实操方法和代码
- 漏洞扫描的原理与应用
- IMX6ULL裸机开发之点亮LED灯
- Xcode不用数据线---真机测试
- 数学建模用python好吗_用 Python 做数学建模
- win10网络连接为地球禁用标志解决办法