万年历 编程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了万年历 编程相关的知识,希望对你有一定的参考价值。

c语言或 汇编都可以 只要求显示年 月 日信息 可调整日期 有可以的我把分全加上 最好附原理图

参考技术A #include<stdio.h>
void PrintMonthCalender(int startDay,int days);/*函数原型*/
int GetWeekDay(int year,int month);/*函数原型*/
int GetMonthDays(int year,int month);/*函数原型*/
main()

int month,year;/*定义变量*/

printf("input the year and month<YYYY-MM>:");
scanf("%d-%d",&year,&month);/*读入变量*/
printf("\t\t\t%d-%d\n",year,month);
printf("Sun.\tMon.\tTue.\tWed.\tThu.\tFri.\tSat.\n");/*打印日历表头*/

PrintMonthCalender(GetWeekDay(year,month),GetMonthDays(year,month));/*调用函数子程序,打印出某年某月日历*/

return 0;


/*定义打印日历子程序*/
void PrintMonthCalender(int startDay,int days)

int k=0,n=1;

while(k<startDay)

printf(" \t");
k++;


if(k==startDay&&k!=6)

printf("%d\t",n);
k++;
n++;

else if(k==startDay&&k==6)

printf("%d\n",n);
k++;
n++;

while(n<days)

if(k%7==6)

printf("%d\n",n);
k++;
n++;

else

printf("%d\t",n);
k++;
n++;


if(n=days)

printf("%d\n",n);
n++;




/*定义求某月一号为周几子程序*/
int GetWeekDay(int year,int month)


int GetMonthDays(int year,int month);
int n,WeekDay,days;

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

for(n=1;n<month;++n)

days=days+GetMonthDays(year,n);

WeekDay=(days+1)%7;

return WeekDay;


/*定义求某年某月的天数子程序*/
int GetMonthDays(int year,int month)

int MonthDays;
if((year%4==0&&year%100!=0)||year%400==0)

if(month==4||month==6||month==9||month==11)
MonthDays=30;
else if(month==2)
MonthDays=29;
else
MonthDays=31;


else

if(month==4||month==6||month==9||month==11)
MonthDays=30;
else if(month==2)
MonthDays=28;
else
MonthDays=31;

return MonthDays;
参考技术B #include <stdio.h>
long int f(int year,int month)

if(month<3) return year-1;
else return year;

long int g(int month)

if(month<3) return month+13;
else return month+1;


long int n(int year,int month,int day)

return 1461L*f(year,month)/4+153L*g(month)/5+day;


int w(int year,int month,int day)

return(int) ((n(year,month,day)%7-621049L%7+7)%7);


int date[12][6][7];
int day_tbl[ ][12]=31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31;

main()

int sw,leap,i,j,k,wd,day;
int year;
char title[]="SUM MON TUE WED THU FRI SAT";

printf("Please input the year whose calendar you want to know:\n");
scanf("%d%*c",&year);

sw=w(year,1,1);
leap=year%4==0&&year%100||year%400==0;
for(i=0;i<12;i++)
for(j=0;j<6;j++)
for(k=0;k<7;k++)
date[i][j][k]=0;
for(i=0;i<12;i++)
for(wd=0,day=1;day<=day_tbl[leap][i];day++)

date[i][wd][sw]=day;
sw=++sw%7;
if(sw==0) wd++;

printf("\n|================== The Calendar of Year %d==================|\n|",year);
for(i=0;i<6;i++)

for(wd=0,k=0;k<7;k++)
wd+=date[i][5][k]+date[i+6][5][k];
wd=wd?6:5;
printf(" %2d %s %2d %s|\n|",i+1,title,i+7,title);
for(j=0;j<wd;j++)

printf(" ");
for(k=0;k<7;k++)
if(date[i][j][k])
printf("%4d",date[i][j][k]);
else printf(" ");
printf(" ");
for(k=0;k<7;k++)
if(date[i+6][j][k])
printf("%4d",date[i+6][j][k]);
else printf(" ");
printf("|\n|");


puts("==============================================================|");
本回答被提问者采纳
参考技术C #include <stdio.h>
#include <string.h>
#include <ctype.h>
long year;
int month,day,error_input;
char s[100];
int monthdays[12]=31,28,31,30,31,30,31,31,30,31,30,31;
void inputdate()
long n[3]=0,0,0,k=0,i,len;
error_input=-1;
printf("Please input the year[,month[,day]]:(Enter Q to quit)\n");
gets(s);
len=strlen(s);
printf("%d\n",strcmp(s,"Q"));
if(strcmp(s,"Q")==0) error_input=0;return;

if(!isdigit(s[0])||!isdigit(s[len-1]))
error_input=1;return;
for(i=0;i<len;i++)
if(!isdigit(s[i])) if(isdigit(s[i-1])) k++;if(k>2) error_input=1;return;
else n[k]=n[k]*10+s[i]-48;

year=n[0];
if(!(year%4)&&(year%100)||!(year%400))
monthdays[1]=29;
else
monthdays[1]=28;
if(n[1]>12) error_input=1;return;
if(n[2]>monthdays[n[1]-1]) error_input=1;return;
month=n[1];
day=n[2];

void printCala()
int countyear,countday=0,weekflag,i,j,k,c;
int startmon,endmon,year1;
year1=year-1;
countyear=(year1-year1%4)/4-(year1-year1%100)/100+(year1-year1%400)/400;

weekflag=(countyear*366+(year-1-countyear)*365+1)%7-1;
if(month==0) startmon=1;endmon=12;
else startmon=month;endmon=month;
for(k=1;k<startmon;k++)
weekflag=(weekflag+monthdays[k-1])%7;
for(k=startmon;k<=endmon;k++)

printf("\n %ld year ",year);
switch(k)

case 1: printf("January\n");break;
case 2: printf("February\n");break;
case 3: printf("March\n");break;
case 4: printf("April\n");break;
case 5: printf("May\n");break;
case 6: printf("June\n");break;
case 7: printf("July\n");break;
case 8: printf("August\n");break;
case 9: printf("September\n");break;
case 10: printf("October\n");break;
case 11: printf("November\n");break;
case 12: printf("December\n");break;

printf("___________________________\n");
printf("Sun Mon Tue Whe Thr Fri Sat\n");
if(weekflag!=0)
for(countday=0,j=0;j<weekflag;j++)
printf(" ");
countday++;
for(i=1;i<=monthdays[k-1];i++)
if(countday>0&&countday%7==0)
printf("\n");
printf("%3d ",i);
countday++;
weekflag=(weekflag+monthdays[k-1])%7;
printf("\n___________________________\n");


int main()

inputdate();
while(error_input!=0)

if(error_input==1)
printf("Input ERROR! Please input again:\n");
else
printCala();
inputdate();

2019全球编程语言高薪排行榜:ScalaGo轻松达百万年薪

作者丨赵钰莹

对于开发者来说,不管是初入门者还是具备多年开发经验的老手,都会考虑自己的职业前景。此外,当开发者考虑接触一门新的编程语言时,除了应用场景,一定也希望了解企业愿意为不同的编程语言开发者付出多少薪水。

近日,Stack Overflow 发布了 2019 年的最新调查结果,总结了不同编程语言在行业中可能获得的薪水。当然,在这个过程中也需要关注一些其他因素,比如:语言对使用者是否友好,这有助于更快地学习语言;是否与现在的科技趋势相关。

(注:该数据根据 Stack Oveflow2019 年关于编程语言薪酬排行开发者调查报告得出。)

1 全球十大收入最高的编程语言

2019全球编程语言高薪排行榜:Scala、Go轻松达百万年薪

如上图是全球前十大收入最高的编程语言排名,但根据调查,收入与地域之间也是有区别的,比如在美国,Scala 的收入最高,可以达到 143k 美元,其次是 Clojure(139k 美元)、Go(136k 美元)、Erlang(135k 美元)、Objective-C(132k 美元);在印度,Clojure 和 Rust 收入最高。

工作经验与薪水

工作经验与薪酬肯定是相关的,但根据调查,有些编程语言无论工作经验多少,薪资都比较高好,而有些编程语言无论多少年工作经验都很一般。

2019全球编程语言高薪排行榜:Scala、Go轻松达百万年薪

如上图,红圈的大小不同代表着受访者人数的范围不同,横轴代表着工作经验(年数),纵轴代表着薪资中位数。

不难看出,使用 Clojure、F#、Scala、Go、Rust 和 R 语言的开发人员,虽然工作经验并不见得非常多,尤其是 Rust、R、Ruby 和 Go,也会获得不少的薪水。然而,PHP、Java、C、C++,即使有多年开发经验,薪水也很难有比较高的提升。

职位与薪水

当然,薪酬高低也与所从事的职业有非常大的关系。根据对全球四大 IT 市场的调查,DevOps 专家全部高居榜首,可见市场对这一技术的需求量有多大。除此之外,数据科学家、全栈工程师、嵌入式开发工程师、桌面开发人员的市场受欢迎度均较高。

2019全球编程语言高薪排行榜:Scala、Go轻松达百万年薪

如果按照职位来划分,薪水又会出现一些不同。管理岗位的薪水肯定会略高一些,其余基本与市场需求相对应,DevOps 专家的薪水可以达到 71k 美元,数据或者机器学习专家的薪水可以达到 61k 美元,全栈开发者的薪资为 57k 美元,后端开发者略低一些为 56k 美元。

2019全球编程语言高薪排行榜:Scala、Go轻松达百万年薪

2 中国热门编程语言收入情况

国内整体的薪资水平要略低于全球,需求量较大的依旧是 Java、Python 这类语言。如果与全球薪资较高的编程语言比的话,如果对国内主流招聘网站进行统计,以“Go 语言”为关键字在全国范围搜索,热门地区(北上广深等需求量较大的城市)月薪基本集中在 15-30k 人民币之间,一线互联网大厂的薪酬确实更具竞争力,比如 BAT、高德、奇虎 360、滴滴等,不仅给出的月薪更高(25-60k 之间浮动),不少还明确标出可以给 14 至 16 个月的薪水,而所要求的工作经验基本都在 3 到 5 年。

2019全球编程语言高薪排行榜:Scala、Go轻松达百万年薪

至于 Scala 语言,整体薪水确实比 Go 语言略高一些,在没有筛选的情况下,首页出现的大部分薪资集中在 20-50k 之间,这一结果倒是与全球的调查报告相匹配。

2019全球编程语言高薪排行榜:Scala、Go轻松达百万年薪

此外,在国内几个招聘网站进行搜索,都没有找到太多有关 Clojure 的招聘需求,样本数量太少,很难判断这一岗位的薪资情况,但可以看出国内对此的需求极低,而 Clojure 在全球市场却可以占到薪资排行榜的第一名,这一结果倒还蛮出乎意料。

国内对于 Rust 的招聘需求并不旺盛,可搜寻到的岗位不到 Go 语言的十分之一,只比 Clojure 好一些,基本是规模较大的企业对此才有招聘需求,比如今日头条、滴滴等,给出的薪资倒是还算优厚,月薪基本集中在 25k 人民币以上。

2019全球编程语言高薪排行榜:Scala、Go轻松达百万年薪

至于 DevOps,虽然国内可搜寻到的岗位不少,但薪资并没有太高,基本与 Go 语言的区间水平相当,要求具备 3 到 5 年工作经验的依旧是最普遍的。

2019全球编程语言高薪排行榜:Scala、Go轻松达百万年薪

如果回看 2018 年某招聘网站发布的统计数据,算法研究员和机器学习工程师在过去一年的平均月薪偏高,分别为 28435 元和 26798 元,架构师薪资最高为 29600 元。编程语言中,Go 语言的平均月薪最高为 22961 元,其次是 C++、Python、Java。

2019全球编程语言高薪排行榜:Scala、Go轻松达百万年薪

3 编程语言适用场景

虽然薪水高低会成为影响开发人员是否选择的重要因素,但并不是唯一因素,不同编程语言的适用场景也是需要开发人员认真考虑的。

Go

Go 语言由谷歌开发,并于 2009 年 11 月发布。它是开源的,由于这个原因使得它在公司内部的不同项目中得到了积极应用,一些很有名的服务也使用 Go 语言开发,如 SoundCloud、Netflix 和 Dropbox。

近年来 Go 语言受欢迎程度大大提高,还得益于 Go 语言下面的优势:

  • 支持多线程任务

  • 支持并行处理

  • 快速的启动时间

  • 高效的内存管理

很多人都认为它将成为未来的服务器语言,Go 有一些很不错的特性:

  • 它非常简洁、简单和安全

  • 编译非常快

  • 它支持带有嵌入式类型的接口

  • 它不需要任何外部依赖关系来生成静态链接的本机二进制文件

Kotlin

Kotlin 编程语言是由 JetBrains IT 公司开发的,它已经成为 Android 的官方开发语言。这是在 2017 年谷歌开发者大会上宣布的。

它有很多优点,如:

  • 易于理解的语法

  • 与 Java 兼容

  • 谷歌的支持

  • 快速增长的社区

很有可能不久之后的 Android 应用程序完全使用 Kotlin 编写,所以如果想面向移动应用程序编程,应该考虑将 Kotlin 作为一个选择。

Ruby(特别是 Rails)

作为开发 web 应用程序的工具,Ruby 获得了广泛欢迎,并被用于开发全球很多流行产品的服务端部分。Ruby 语言的主要目的是创建强大的、易于理解的程序,其中最重要的不是程序运行的速度,而是开发时间。此外,代码的清晰性和简单性使 Ruby 非常受欢迎。

Ruby 一些不错的特性有:

  • 一切都是对象

  • 模块——这些模块允许在运行时动态添加类层次结构的新元素

  • 代码开发

  • 动态类型

  • 鸭子类型

  • 代码质量

Objective - C

Objective-C 语言用于开发苹果生态系统中的应用程序,纯粹用于开发 Mac OS X 和 iOS。尽管出现了一种新的编程语言 Swift,,但 Objective-C 仍然是开发人员社区中非常流行的选择。

此外,因为它与苹果的关系使其拥有一个非常高的需求市场。只要苹果“依赖”Objective-C,开发人员就会一直有市场,并可以获得丰厚的报酬。

Objective-C 一些很好的特性有:

  • 类即对象——每个类都是一个元类的实例

  • 动态类型

  • 可选的静态类型

  • 动态运行时

  • 内省 introspection

C

C# 是由一群微软工程师开发的,目的是在.NET 平台上开发应用程序。假如希望在微软平台开发本地应用程序并获得相关经验,那么 C# 是理想的语言。

从本质上讲,C# 是一种简单、现代和通用的面向对象的编程语言。C# 的一大优点是相对简单,并且能够更多地关注算法而不是实现细节。目前,C# 被用于开发许多应用程序,从小型桌面程序到大型门户网站和人们日常使用的 web 服务。

C# 主要用于:

  • Windows services——没有 UI 的长时间运行的程序

  • Web 应用程序——客户端 / 服务端应用程序

  • 窗口应用程序——运行在桌面上的应用程序

  • Web 服务——通过 HTTP 提供服务的应用程序

  • 游戏——用 Unity 完成

  • 控制台应用程序——没有 UI 的应用程序

Python

大量的框架工具、培训材料、友好的社区支持、编码的简单性使其在 2019 年的高薪编程语言榜单上占有一席之地。Python 是目前使用最强大的编程语言之一。它用于:

  • 数学计算

  • 数据分析

  • Web 开发

  • 机器学习

  • 任务自动化

事实上 Youtube、Dropbox、Reddit 和 Google 等应用程序都是用 Python 开发的。

Java

很长一段时间以来,Java 编程语言一直是开发人员社区中需求最旺盛的语言之一。Java 主要用于开发银行和自动化测试中的产品。它的跨平台特性非常受欢迎,这是因为 JVM 的缘故。

Java 是一种很有前途的编程语言。它被广泛地用于创建服务器和移动应用程序,还被用作开发 Android 本地应用程序。

Java 可用于开发:

  • 移动应用程序

  • 网络应用程序

  • 桌面应用程序

  • 游戏

  • 数据库连接

Swift

Swift 是用于开发苹果平台应用程序的主要语言,主要应用于:

  • MacOS

  • iOS

  • watchOS

  • tvOS

这是一种非常通用的编程语言,主要用于开发苹果产品。值得一提的是,它是在 5 年前(2014 年)刚发布。其主要和最突出的优点是速度:无论是运行还是启动应用程序。正是这种优势赋予了它这个名字,它的创造者说其吸收了其他语言的所有优势。

4 总结

市场上总是缺少有才华的程序员,未来几年,这仍然将是市场上的一个紧迫问题。对上述语言的了解和足够的相关工作经验可以为开发人员打开许多大门。此外,开发者没必要限制自己只使用一种语言。无论是理论还是实践,都可以尝试用另一种编程语言学习新的知识,所需要的只是激情和努力!

此外,InfoQ 希望可以完整展示出一个客观的国内开发者生态。所以,我们发起了国内版开发者调查问卷,如果您想了解国内开发者的群体画像,期待您的参加。我们将在样本数足够以后,制作一份国内版开发者调查报告,以飨读者。

调查问卷链接:

https://www.infoq.cn/events/detail/form?aid=11&fid=11


点击「阅读原文」来 QCon 上海 2019 了解行业专家分享有实战价值的落地实例。大会 8 折报名最后一周,立减 1760 元,有任何问题欢迎联系票务小姐姐 Ring:17310043226(微信同号)

点个在看少个 bug

以上是关于万年历 编程的主要内容,如果未能解决你的问题,请参考以下文章

C++,笔试面试,使用C++编程,实现万年历

如何用JavaScript编写一个万年历

用java语言编写一个万年历程序,要求只显示阳历、节日、还有农历年、闰年

TM32的电子钟万年历LCD1602的Proteus仿真 (代码+仿真+原理图+PCB+参考报告)

c语言编写万年历时计算每月第一天是星期几的公式是啥

调用java.util包中的Date和GregorianCalendar类来制作万年历 能够结合java.util包