输入指定年月后输出对应月份的万年历。。。。。

与某小友聊天兴起搞之。。。。。

写成一个函数方便调用和修改

绝对精简绝对短233333333333333333333333333

样例2014 11

Sun Mon Tue Wed Thu Fir Sat

1

2 3 4 5 6 7 8

9 10 11 12 13 14 15

16 17 18 19 20 21 22

23 24 25 26 27 28 29

30

2010 2

Sun Mon Tue Wed Thu Fir Sat

1 2 3 4 5 6

7 8 9 10 11 12 13

14 15 16 17 18 19 20

21 22 23 24 25 26 27

28#include

#include

void calopt(int year,int mounth){

int i,j,k,weak;

int m[15]={0,31,28,31,30,31,30,31,31,30,31,30,31};

int opt[7][7];

if((year%4==0&&year%100!=0)||year%400==0){

m[2]=29;

}

weak=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7;

for(i=0;i

weak+=m[i];

}

memset(opt,0,sizeof(opt));

int row=0,col=weak%7;

for(i=1;i<=m[mounth];i++){

if(col==7){col=0;row++;}

opt[row][col]=i;

col++;

}

printf("Sun\tMon\tTue\tWed\tThu\tFir\tSat\t\n");

for(i=0;i<=row;i++){

for(j=0;j<7;j++){

if(opt[i][j]==0)printf("\t");

else printf("%2d\t",opt[i][j]);

}

puts("");

}

}

int main(){

int mounth,year;

while(scanf("%d%d",&year,&mounth)!=EOF){

calopt(year,mounth);

}

return 0;

}

P.s 关于某一年第一天是星期几的判定

公元1年的第一天是星期一。这是一个计算前提。

闰年的规定:凡是年份能够被4整除、且不能被100整除的是闰年;凡是年份能被400整除的也是闰年;除此以外的年份都不是闰年。闰年366天、平年365天。

公元1年第一天之后,要计算某天是星期几,要用“这天与起始天之差”,与7求余,当余数为0,则这天与起始天星期几相同(星期一)。否则,这个余数+1就是这天的星期几。

假设year年的第一天距离起始天的差是:

(year-1)*365+(公元1年到公元year-1年内的闰年个数(每个闰年多一天))-------(1)

公元1年到公元year-1年内的闰年个数的计算:

根据闰年规定,每4年有1个闰年,这样算得到:

公元1年到公元year-1年内的闰年个数=(year-1)/4,但每一百年要扣掉1个闰年,修正一下得到:

公元1年到公元year-1年内的闰年个数=(year-1)/4-(year/100) 但是这样多扣了!

每400年又要增加一个闰年,再次修正得到:

公元1年到公元year-1年内的闰年个数=(year-1)/4-(year/100)+(year/400)

代入(1)得到年份year第一天距离起始天的差是:

(year-1)*365+(year-1)/4-(year/100)+(year/400)

这天是星期几?前面说过,是这个差与7求余+1:

[(year-1)*365+(year-1)/4-(year/100)+(year/400)]%7+1这个末尾的1可以放到被除数里面,即:

[(year-1)*365+(year-1)/4-(year/100)+(year/400)+1] %7

=[(year-1)*(364+1)+(year-1)/4-(year/100)+(year/400)+1] %7

=[(year-1)*364+(year-1)+(year-1)/4-(year/100)+(year/400)+1] %7

364是7的倍数,year364也一定是7的倍数,所以year364可以去掉,这就得到了最后的算式

=[(year-1)+(year-1)/4-(year/100)+(year/400)+1] %7

这个[]内最后的1,可以看成是新年的第1天。更一般地,year年度的第X天是星期几?可以用下式计算

[(year-1)+(year-1)/4-(year/100)+(year/400)+X] %7

C语言万年历输出月份,C语言输出万年历相关推荐

  1. C语言,输入月份号,输出该月的英文名

    本人菜鸟,还请诸位大佬多多指点!!! #include<stdio.h> #include<string.h> int main() { int m; scanf(" ...

  2. C语言switch输入月份输出季节,输入年月,输出月份有几天(分别用了if——else和switch)...

    首先是switch做的 class Program { static void Main(string[] args) {/* 题目要求:请用户输入年份,输入月份,输出该月的天数. 思路:一年中月份的 ...

  3. C语言输入月份,输出月份的英文名

    C语言输入月份,输出月份的英文名 #include<stdio.h> int main() {char *month[13] = { "illegal","J ...

  4. C语言:习题11-1 输出月份英文名.2021-07-25

    习题11-1 输出月份英文名 (15 point(s)) 本题要求实现函数,可以返回一个给定月份的英文名称. 函数接口定义: char *getmonth( int n ); 函数getmonth应返 ...

  5. C语言:实验11-1-2 输出月份英文名.2021-08-06

    实验11-1-2 输出月份英文名 (15 point(s)) 本题要求实现函数,可以返回一个给定月份的英文名称. 函数接口定义: char *getmonth( int n ); 函数getmonth ...

  6. C语言习题11.3,用指针数组编程输出月份的英文表示

    从键盘任意输入一个整型表示的月份值,用指针数组编程输出该月份的英文表示,若输入的月份值不在1~12之间,则输出"Illegal month". #include<Stdio. ...

  7. C语言基础 输出月份名 问题

    7-2 输出月份名(*) 分数 10 全屏浏览题目 切换布局 作者 李祥 单位 湖北经济学院 请编写程序,输入月份数,输出对应的英文月份名. 月份数 月份名 1 January 2 February ...

  8. ​C语言指针:输出月份英文名 (15 分)本题要求实现函数,可以返回一个给定月份的英文名称。函数接口定义:char *getmonth( int n );

    6-1 输出月份英文名 (15 分) 本题要求实现函数,可以返回一个给定月份的英文名称. 函数接口定义: char *getmonth( int n ); 函数getmonth应返回存储了n对应的月份 ...

  9. c语言从键盘输入数字月份,打印显示相应的英文单词月份,编程题:输入英文月份单词,输出对应月的数字形式。...

    编程题:输入英文月份单词,输出对应月的数字形式. #include #include int search(char list[][20],char name[],int m) { int i; fo ...

最新文章

  1. 正则表达式了解和使用
  2. 因肠道疾病经常上厕所,她被亚马逊解雇了
  3. RavenDB FS 安装使用 介绍
  4. [译] 重写 loadView() 方法使 Swift 视图代码更加简洁
  5. C语言对strtok(),与strdup()介绍
  6. 小程序云服务器选什么系统好,小程序云服务器操作系统选择
  7. Go支持自定义数据类型:使用type来定义,类似于数据类型的一个别名
  8. Saas与传统软件对比
  9. 两张表的笛卡尔积用sql语句
  10. 【Web后端笔记】SQL Server与java数据类型对应
  11. eplices如何导入外部代码_#华为云·寻找黑马程序员#【代码重构之路】如何优雅的关闭外部资源...
  12. 【数据结构】树状数组笔记
  13. linux下iftop安装使用
  14. 信息论的基本概念和熵的计算
  15. MySQL安全你不知道的事
  16. django读取mysql事实数据_Django读取Mysql数据并显示在前端的实例
  17. 基于jsp的KTV管理系统mysql
  18. Numpy基础(二)——数组转置、计算内积和换轴
  19. 我的世界电脑正版服务器地址大全,《我的世界》服务器地址大全 各个服务器一览分享...
  20. 五分钟掌握微信小程序轮播图

热门文章

  1. ide项目文件夹浅黄色编写代码无提示或看不到项目中的文件夹
  2. 组织行为学笔记:第十二章 组织结构和组织设计
  3. Visio2019与Win10输入法冲突解决办法
  4. 基带、射频,到底是什么?
  5. 为什么计算机屏幕出现黄色,电脑为什么会出现显示器屏幕发黄
  6. 解决 Ubuntu 安装显卡驱动后,屏幕变黄的原因
  7. 深度学习实战(十):使用 PyTorch 进行 3D 医学图像分割
  8. steam游戏一直连接服务器,steam无法连接到更新服务器快速有效解决办法
  9. 计算机网络教程 第6版
  10. 测试进阶篇之测试用例设计-百度云盘