使用一维数组,函数编写程序,从键盘输入8个整数,然后输出最大数和最小数.intmain()
{
inta[8];
inti,max,min;
printf("请输入8个整数:\n");
for(i=0;i
用c++编一个万年历
用C语言怎么编写这个万年历
核心算法:星期(0~6)=(年份系数+月份系数+日期)%7;
其中,年份系数我以2007年做参照,已知2007年,年份系数是0,往前往后分别是递减和递增。增减规律:非闰年为±1,闰年1~2月-2或+1,闰年3~12月+2或者-1。
其中,12个月份系数对应:0,3,3,6,1,4,6,2,5,0,3,5。
根据以上规律,只要利用循环,就可以的到对应系数和星期。
日历实现翻页功能,按键盘左右方向键可以翻译查看当年其他月份,按向上方向键可以返回菜单。
下面是代码:
#include
#include
#include
#include
#include
#include
#define XY 2007
#define X07 0//以2007年年系数0做参照
int isLeapYear(int year);//判断是否是闰年,是返回1,否返回0
int addyx(int yx,int n);//年系数自增,0~6,n:自增的跨度,返回自增后的年系数
int getYX(int year,int month);//获得年系数0~6
int getMX(int month);//获得月系数
int getWeek(int yx,int mx,int day);//通过年月系数(yx:年系数;mx:月系数)及日期获取星期
char *getStrWeek(int yx,int mx,int day);//通过年月系数(yx:年系数;mx:月系数)及日期获取星期对应的中文字符串
int getMaxDay(int year,int month);//通过年月获取当月最大天数
void prCalendar(int year,int month);//打印日历
int showMeun();//打印主菜单
int getDuration(int year,int month,int day);//通过日期获取距今天数
int calendar[6][7];
int main()
{
//int year,month,day,yx,mx;
while(1)
{
if(!showMeun())
break;
}
return 0;
}
int showMeun()//打印主菜单
{
int n,year,month,day,yx,mx;
while(1)
{
system("cls");
printf("1、输入年份,显示该年每个月的日历\n");
printf("2、输入年月,显示该月的天数\n");
printf("3、输入日期,显示距离今天的天数\n");
printf("4、输入日期,查询这一天是星期几\n");
printf("0、结束程序\n");
n=-1,year=0,month=0,day=0;
while(n<0 || n>4)
{
printf("请输入选择的菜单序号:");
scanf("%d",&n);
}
switch(n)
{
case 1:while(year<=0 || year>9999)
printf("请输入年份:"),scanf("%d",&year);
prCalendar(year,1);
break;
case 2:while(year<=0 || year>9999 || month<=0 || month>12)
printf("请输入年份及月份:"),scanf("%d%d",&year,&month);
printf("%4d年%2d月共有%d天\n按任意键继续。。。。。。\n",year,month,getMaxDay(year,month)),getch();
break;
case 3:while(year<=0 || year>9999 || month<=0 || month>12 || day<0 || day>getMaxDay(year,month))
printf("请输入日期:"),scanf("%d%d%d",&year,&month,&day);
printf("距离今日有%d天\n按任意键继续。。。。。。\n",getDuration(year,month,day)),getch();
break;
case 4:while(year<=0 || year>9999 || month<=0 || month>12 || day<0 || day>getMaxDay(year,month))
printf("请输入日期:"),scanf("%d%d%d",&year,&month,&day);
yx=getYX(year,month);
mx=getMX(month);
printf("%4d年%2d月%2d日是%s\n按任意键继续。。。。。。\n",year,month,day,getStrWeek(yx,mx,day)),getch();
break;
case 0:return 0;
}
}
return n;
}
void prCalendar(int year,int month)//打印日历
{
char c1,c2;
int i,j,*p=NULL,yx,mx,cnt,w,maxDay;
while(1)
{
p=&calendar[0][0];
yx=getYX(year,month),mx=getMX(month);
cnt=0,w=getWeek(yx,mx,1);
maxDay=getMaxDay(year,month);
for(i=0;i<6;i++)
for(j=0;j<7;j++)
{
if(cnt p++,cnt++; calendar[i][j]=0; } for(i=1;i<=maxDay;i++) *p=i,p++; system("cls"); printf(" %4d 年%2d月 \n",year,month); printf("日 一 二 三 四 五 六\n"); for(i=0;i<6;i++,printf("\n")) for(j=0;j<7;j++) if(calendar[i][j]==0) printf(" "); else printf("%2d ",calendar[i][j]); printf("<- 按方向键向左或向右翻页 ->\n"); printf(" 按向上方向键返回主菜单\n"); c1=getch(); c2=getch(); if(c1==-32 && c2==75)//左键 { if(month==1) month=12; else month--; } if(c1==-32 && c2==77)//右键 { if(month==12) month=1; else month++; } if(c1==-32 && c2==72)//上键 { showMeun(); break; } } } int getDuration(int year,int month,int day)//通过日期获取距今天数 { int i,y,m,d,sum=0,sum2=0,minY,maxY,minM,maxM,minD,maxD; time_t tt; struct tm *tmp; time(&tt); tmp=localtime(&tt); y=1900+tmp->tm_year,m=1+tmp->tm_mon,d=tmp->tm_mday;//获取当前日期的年月日 if(year minY=year,maxY=y,minM=month,maxM=m,minD=day,maxD=d; if(year>y) minY=y,maxY=year,minM=m,maxM=month,minD=d,maxD=day; if(year!=y) { for(i=minY;i if(isLeapYear(i)) sum+=366;//闰年 else sum+=365; for(i=1;i sum-=getMaxDay(minY,i); sum-=minD;//扣除左端当月已过天数 for(i=1;i sum+=getMaxDay(maxY,i); sum+=maxD;//累加右端当月已过天数 } else//如果年份相同,累加两边一年内已过天数,求差值 { for(i=1;i sum+=getMaxDay(month,i); sum+=day; for(i=1;i sum2+=getMaxDay(m,i); sum2+=d; return abs(sum2-sum); } return sum; } int getMaxDay(int year,int month)//通过年月获取当月最大天数 { int days[12]={31,28,31,30,31,30,31,31,30,31,30,31}; if(isLeapYear(year) && month==2) return days[month-1]+1; return days[month-1]; } char *getStrWeek(int yx,int mx,int day)//通过年月系数(yx:年系数;mx:月系数)及日期获取星期对应的中文字符串 { int w; static char week[7]; memset(week,0,7); strcpy(week,"星期"); w=getWeek(yx,mx,day); switch(w) { case 0:strcat(week,"日");break; case 1:strcat(week,"一");break; case 2:strcat(week,"二");break; case 3:strcat(week,"三");break; case 4:strcat(week,"四");break; case 5:strcat(week,"五");break; case 6:strcat(week,"六");break; } return week; } int getWeek(int yx,int mx,int day)//通过年月系数(yx:年系数;mx:月系数)及日期获取星期对应的数值0~6 { return (yx+mx+day)%7; } int getMX(int month)//获得月系数 { int xmonth[12]={0,3,3,6,1,4,6,2,5,0,3,5};//月系数:1-12月,每月的系数。 return xmonth[month-1]; } int getYX(int year,int month)//获得年系数0~6 { int yx=0,nyear=XY,isly,flag; if(nyear==year) return 0; if(nyear flag=0,nyear++; else flag=1,nyear--; while(1) { isly=isLeapYear(nyear); if(!isly){//非闰年年系数累加1 if(!flag) yx=addyx(yx,1); else yx=addyx(yx,-1); } if(isly && month>=1 && month<=2){//闰年1~2月年系数累加1,3`12月年系数累加2 if(!flag) yx=addyx(yx,1); else yx=addyx(yx,-2); } else if(isly && month>=3 && month<=12){ if(!flag) yx=addyx(yx,2); else yx=addyx(yx,-1); } if(nyear==year) break; if(!flag && nyear nyear++; if(flag && nyear>year) nyear--; } return yx; } int addyx(int yx,int n)//年系数自增,0~6,n:自增的跨度,返回自增后的年系数 { if(n>0) { if(yx+n<=6) return yx+n; if(yx+n>6) return yx+n-7; } if(n<0) { if(yx+n>=0) return yx+n; if(yx+n<0) return yx+n+7; } return -1; } int isLeapYear(int year)//判断是否是闰年,是返回1,否返回0 { if((year%4==0 && year%100!=0)||(year%400==0)) return 1; return 0; } 1、首先要判断一个年份是闰年还是平年,用一个子程序来做。 2、然后就开始写主程序,首先用scanf得到一个年份。 3、在判断这个年份是平年还是闰年后用printf在CMD中打印出来。 4、在编写完成后,在Notepad++界面下按下F5,弹出输入框。 5、cmd /k gcc -o "$(CURRENT_DIRECTORY)\$(NAME_PART).exe""$(FULL_CURRENT_PATH)" && CLS && "$(CURRENT_DIRECTORY)\$(NAME_PART).exe" & PAUSE & EXIT。在输入框例输入后运行。 6、点击运行,会弹出CMD,在里面输入年份后回车就完成了。 相关文章 核桃编程适合多大的孩子学?核桃编程适合7-12岁的孩子学。7到12岁,是培养思维黄金期,青少年群体是学习少儿编程的主力军。瑞士儿童心理学家让·皮亚杰曾表示,孩子在7-12岁处于具 数控车床手柄的程序还需要一些尺寸,如R35处的直径和根部圆柱面的直径,才能把程序编出来CNC系统编程指令CNC系统编程主要指令:1、G00与G01G01按指定进给速度以直线运动方式运动 怎样学习外汇MT4编程之MQL4语言学习入门如果学会了外汇编程,常用的MT4编程语言MQL4之后,一切就不一样了。你可以用代码的方式去使用历史数据验证你的策略,看看在历史上哪些时间 想学Java,去哪里比较好?java语言已经推出好多年,相关的视频教程和书籍也有很多,各大培训机构的教学内容基本相似。向你推荐几个学习的方法: 信息技术服务税率信息技术服务增值税一般纳税人的增税率是6%。信息技术服务属于现代服务业,现在服务业税率为6%;从事信息技术服务增值税小规模纳税人实行的是3%的征收率。信息 高手帮改一个通达信主图公式{DRAWGBK(O>0,RGB(33,47,58),RGB(0,0,0),0,'02',0);} {标缺口} LL:=REF(L,1);HH:=REF(H,1);上跳:=L>HH;下跳:=HREF(H,1),L,REF(H,1),3.1,-1),COL 易语言怎么获取某个程序编辑框的句柄.版本 2.程序集 窗口程序集1 .程序集变量 父, 整数型 .程序集变量 账号, 整数型.子程序 _按钮1_被单击父 = 窗口标题取句柄 (“2010”) 谁在核桃编程工作?加班多吗?感觉辛苦吗?我在核桃编程工作,工作辛不辛苦其实主要看心态。你如果认为一份工作做得很辛苦,就是自己不喜欢,只要热爱,就不会有辛苦的感觉。就目前我的状用C语言编写万年历
#include 用c语言编写万年历,要求输出任意一年的某月,能显示出这个月的日历
使用C语言编写万年历
#include
1、书籍:好的书籍是java学习的必备资