输入一个年份输出天干地支 用c语言

输入一个年份输出天干地支 用c语言,第1张

找一个甲子年作为起始点,比如1984,用4也可以

把干支分成两个数组,天干十,地支十二

输入年份,减去起始,即减4

除以60得到余数k

用k除以10,得到的余数为天干序数

用k除以12,得到的余数为地支序数

组合天干地支输出

1、首先要判断一个年份是闰年还是平年,用一个子程序来做。

2、然后就开始写主程序,首先用scanf得到一个年份。

3、在判断这个年份是平年还是闰年后用printf在CMD中打印出来。

4、在编写完成后,在Notepad++界面下按下F5,d出输入框。

5、cmd /k gcc -o "$(CURRENT_DIRECTORY)\$(NAME_PART)exe""$(FULL_CURRENT_PATH)" && CLS && "$(CURRENT_DIRECTORY)\$(NAME_PART)exe" & PAUSE & EXIT。在输入框例输入后运行。

6、点击运行,会d出CMD,在里面输入年份后回车就完成了。

#include<stdioh>

int main()

{

int i;

for(i=1900;i<=2000;i++)

{

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

//闰年:年数能被4但是不能被100整除,或者能被400整除的。

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

}

return 0;

}

#include<stdioh>

#include<windowsh>

int menu()

{

char ch;

int x;

system("cls");

printf("请选择相应的菜单:\n");

printf("\n");

printf("查询某年某月某日是星期几,输入1回车:\n");

printf("查询某年是否是闰年,输入2回车:\n");

printf("打印某年的全年日历,输入3回车:\n");

printf("退出,输入0回车:\n");

printf("\n");

scanf("%d",&x);

if(x==0)

{

printf("确认退出 Y/N ");

ch=getchar();

scanf("%c",&ch);

if(ch=='Y')

exit(0);

else

main();

}

return x;

}

int judge_week(year,mon,day)

{

int sum,i,flag=0;

if(year%400==0)

flag=1;

else if(year%4==0 && year%100!=0)

flag=1;

sum=30(mon-1)+day;

for(i=1;i<=mon-1;i++)

{

if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12)

sum+=1;

if(i==2)

{

if(flag==1)

sum-=1;

if(flag==0)

sum-=2;

}

}

return sum;

}

look_week()

{

int year,mon,day,C,S,k;

char ch,week[7][3]={"日","一","二","三","四","五","六"};

system("cls");

printf("请输入要查询的年月日\nyear month day\n");

scanf("%d %d %d",&year,&mon,&day);

if(year<0 || mon<0 || mon>12 || day<0 || day>31)

{

system("cls");

printf("输入的年月日不正确,请重新输入!");

Sleep(3000);

look_week();

}

C=judge_week(year,mon,day);

S=year-1+(year-1)/4+(year-1)/100+(year-1)/400+C+2;

if(year<=2000 && year>=1901)

S=S+2;

else if(year<=1900)

S+=4;

k=S%7;

system("cls");

printf("\n%d年%d月%d日是星期%s\n\n",year,mon,day,week[k]);

printf("是否要继续查询 Y/N ");

getchar();

ch=getchar();

if(ch=='Y')

look_week();

else

main();

}

look_runnian()

{

int flag=0,year;

char ch;

system("cls");

printf("请输入要查询的年份: ");

scanf("%d",&year);

if(year%400==0)

flag=1;

else if(year%4==0 && year%100!=0)

flag=1;

system("cls");

if(flag==1)

printf("%d是润年\n",year);

else

printf("%d不是润年\n",year);

printf("是否要继续查询 Y/N ");

getchar();

ch=getchar();

if(ch=='Y')

look_runnian();

else

main();

}

print_calendar()

{

int i,j=0,k,C,S,flag=0,m,year,mon,d[31];

char ch,week[7][3]={"日","一","二","三","四","五","六"};

system("cls");

printf("请输入要打印日历的年、月:\nyear month\n");

scanf("%d %d",&year,&mon);

C=judge_week(year,mon,1);

S=year-1+(year-1)/4+(year-1)/100+(year-1)/400+C+2;

if(year<=2000 && year>=1901)

S=S+2;

else if(year<=1900)

S+=4;

k=S%7;

if(year%400==0)

flag=1;

else if(year%4==0 && year%100!=0)

flag=1;

if(mon==1 || mon==3 || mon==5 || mon==7 || mon==8 || mon==10 || mon==12)

m=31;

else if(mon==2)

{

if(flag==1)

m=29;

if(flag==0)

m=28;

}

else

m=30;

for(i=1;i<=m;i++)

d[j++]=i;

system("cls");

printf("%d年%d月的日历如下:\n\n",year,mon);

for(i=0;i<7;i++)

printf("%s\t",week[i]);

putchar(10);

for(i=0;i<k;i++)

printf("\t");

j=k;

for(i=0;i<m;i++)

{

printf("%d\t",d[i]);

j++;

if(j%7==0)

putchar(10);

}

printf("\n\n是否要继续查询 Y/N ");

getchar();

ch=getchar();

if(ch=='Y')

print_calendar();

else

main();

}

main()

{

int a;

a=menu();

switch(a)

{

case 1:look_week();break;

case 2:look_runnian();break;

case 3:print_calendar();break;

default:

{

printf("输入有误,请重新选择相应的菜单:\n");

Sleep(3000);

main();

}

}

}

C语言有2个获取时间的函数,分别是time()和localtime(),time()函数返回unix时间戳-即从1970年1月1日0:00开始所经过得秒数,而localtime()函数则是将这个秒数转化为当地的具体时间(年月日时分秒)

这里时间转化要用到一个“struct tm”的结构体,结构如下:

struct tm {

int tm_sec;       / 秒 – 取值区间为[0,59] /

int tm_min;       / 分 - 取值区间为[0,59] /

int tm_hour;      / 时 - 取值区间为[0,23] /

int tm_mday;     / 一个月中的日期 - 取值区间为[1,31] /

int tm_mon;     / 月份(从一月开始,0代表一月) - 取值区间为[0,11] /

int tm_year;     / 年份,其值等于实际年份减去1900 /

int tm_wday;    / 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一 /

int tm_yday;    / 从每年1月1日开始的天数– 取值区间[0,365],其中0代表1月1日 /

int tm_isdst;    / 夏令时标识符,夏令时tm_isdst为正;不实行夏令时tm_isdst为0 / 

};

示例代码:

#include<stdioh>

#include<timeh>

int getTime()

{

time_t t;                   //保存unix时间戳的变量 ,长整型

struct tm lt;           //保存当地具体时间的变量

int p;                     

time(&t);                // 等价于 t =time(NULL);获取时间戳

lt = localtime(&t);  //转化为当地时间

p = lt->tm_sec;     //将秒数赋值给p

return p;

}

应该就是这样啦~

#include <stdioh>

#include <timeh>

void main()

{

time_t ltime;

struct tm today;

time( &ltime );

today = localtime( &ltime );

printf("%04d-%02d-%02d %02d:%02d:%02d\n",1900+today->tm_year,today->tm_mon+1,today->tm_mday,today->tm_hour,today->tm_min,today->tm_sec);

}

先调用time获得当前时间,这是个从1970-1-1午夜0点开始的秒数,然后调用localtime将该时间专为本地时间就可以打印了。其中tm_year需要加上1900,tm_mon需要加上1,看printf你就明白了。

1、C语言中读取系统时间的函数为time(),其函数原型为:

#include <timeh>

time_t time( time_t ) ;

time_t就是long,函数返回从1970年1月1日(MFC是1899年12月31日)0时0分0秒,到现在的的秒数。

2、C语言还提供了将秒数转换成相应的时间格式的函数:

char ctime(const time_t timer); //将日历时间转换成本地时间,返回转换后的字符串指针 可定义字符串或是字符指针来接收返回值

struct tm gmtime(const time_t timer); //将日历时间转化为世界标准时间(即格林尼治时间),返回结构体指针 可定义struct tm 变量来接收结果

struct tm localtime(const time_t timer); //将日历时间转化为本地时间,返回结构体指针 可定义struct tm 变量来接收结果

3、例程:

#include <timeh>

void main()

{

time_t t;

struct tm pt ;

char pc ;

time(&t);

pc=ctime(&t) ; printf("ctime:%s", pc );

pt=localtime(&t) ; printf("year=%d", pt->tm_year+1900 );

}

时间结构体struct tm 说明:

struct tm {

int tm_sec; / 秒 – 取值区间为[0,59] /

int tm_min; / 分 - 取值区间为[0,59] /

int tm_hour; / 时 - 取值区间为[0,23] /

int tm_mday; / 一个月中的日期 - 取值区间为[1,31] /

int tm_mon; / 月份(从一月开始,0代表一月) - 取值区间为[0,11] /

int tm_year; / 年份,其值等于实际年份减去1900 /

int tm_wday; / 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 /

int tm_yday; / 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 /

int tm_isdst; / 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。/

};

以上就是关于输入一个年份输出天干地支 用c语言全部的内容,包括:输入一个年份输出天干地支 用c语言、用c语言编写万年历,要求输出任意一年的某月,能显示出这个月的日历、c语言中输出1900~2000年中闰年年份等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9719341.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存