编写万年历C语言高手进
日历这东西最好先知道一年的第一天是周几这里有个公式(year+(year-1)/4-(year-1)/100+(year-1)/400)%7运行结果图示
我写了一个代码用DevC++4.9.9.2编译通过在VC++6.0下也可以正常编译代码如下#include #include #include #include using namespace std; //By Shilyx oversleep@163.com char *monthname[]={"","January","February","March","April","May","June","July","August","September","October","November","December"};char *weekname[]={"","Mon","Tue","Wed","Thu","Fri","Sat","Sun"};int monthday[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; void pr_week();int GetFirstDayOfMonth(int year,int month);void pr_month(int weekday,int month); int main(int argc, char *argv[]){ int year,month; system("color f0"); if(argc>3) { cout system("pause>nul"); exit(0); } if(argc>1) { year=atoi(argv[1]); if(argc>2) month=atoi(argv[2]); else month=0; if(year30000 || month12) { cout system("pause>nul"); exit(0); } } else { cout cin >>year; cout cin >>month; while(year30000 || month12) { cout cin >>year>>month; } } if(month!=0) { cout pr_month(GetFirstDayOfMonth(year,month),month); } else { system("cls"); //输出全年时进行清屏 cout for(int i=1;i { cout pr_month(GetFirstDayOfMonth(year,i),i); } } system("PAUSE>nul"); return EXIT_SUCCESS;} void pr_week(){ for(int i=1;i cout cout } int GetFirstDayOfMonth(int year,int month){ int firstdayofyear; int firstdayofmonth=0; if((year%4==0 && year%100!=0) || year%400==0) monthday[2]=29; else monthday[2]=28; firstdayofyear=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7; for(int i=1;i firstdayofmonth+=monthday[i]; firstdayofmonth=(firstdayofmonth+firstdayofyear)%7; if(firstdayofmonth==0) firstdayofmonth=7; //得0是不对的 return firstdayofmonth;} void pr_month(int weekday,int month){ int i,j; cout pr_week(); //cout for(i=1;i cout for(j=1;j { cout if(i%7==0 && j!=monthday[month]) cout } cout }
你是哪句不懂啊?
一句一句解释太麻烦
先是定数组啊,然后看是不是闰年,是的话二月加一天。
然后加一下总共有多少天,
最后应该是算一下是周几的意思吧,
我也没太懂那个+1然后/4、/100、/400这个是怎么推算出来的,
不过最后是模7,所以我猜是算周几的意思。
#include <stdlib.h>
#define TRUE 1
enum{Sunday, Monday, Tuesday, Wednesday,
Thursday, Friday, Saturday};/*0,1,2....*/
int M_GetYear(void);
void M_PrintMonthNum(int year);
void M_PrintMonth(int month, int year);
char *M_MonthName(int month);
int M_MonthDays(int year, int month);
int M_IsLeapYear(int year);
int M_YeFirstMonthDay(int year, int month);
void M_BlankUnit(int weekday);
int main(void)
{
int year;
year = M_GetYear();
M_PrintMonthNum(year);
getch();
}
/*************************************************
函数名称:M_GetYear
函数功能:输入一个年份
被本函数调用的函数清单:无
函数返回值:(int)
*************************************************/
int M_GetYear(void)
{
int year;
while(TRUE)
{
printf("(大于1900)请输入年份 : ");
scanf("%d", &year);
if(year > 1900)/*计人最多活106岁*/
{
return year;
}
}
}
/*************************************************
函数名称:M_PrintMonthNum
函数功能:调用每个月份
被本函数调用的函数清单:M_PrintMonth
输入参数:year
函数返回值:(void)
**************************************************/
void M_PrintMonthNum(int year)
{
int month;
for(month = 1; month <= 12; month++)
{
M_PrintMonth(month, year);
printf("\n");
}
}
/*************************************************
函数名称:M_PrintMonth
函数功能:打印万年历
被本函数调用的函数清单:M_MonthName,M_YeFirstMonthDay
,M_BlankUnit..
调用本函数的函数清单:M_PrintMonthNum
输入参数:month, year
函数返回值:(void)
**************************************************/
void M_PrintMonth(int month, int year)
{
int weekday, ndays, day;
printf(" %s", M_MonthName(month));/*打印开头一行的月份*/
printf("\n Su Mo Tu We Th Fr Sa\n");
ndays = M_MonthDays(year, month);
weekday = M_YeFirstMonthDay(year, month);
M_BlankUnit(weekday);
for(day = 1; day <= ndays; day++)
{
printf(" %2d", day);
if(weekday == Saturday)/* 是星期六就打印换行*/
{
printf("\n");
}
weekday = (weekday + 1) % 7;/* 计算是星期几*/
}
if(weekday != Sunday)
printf("\n");
}
/*************************************************
函数名称:MonthName
函数功能:返回每个月份的英文
调用本函数的函数清单:M_PrintMonth
输入参数:month
函数返回值:(char)
**************************************************/
char *M_MonthName(int month)
{
char *name[] = {
"Illegal month",
"January", "February", "March",
"April", "May", "June",
"July", "August", "September",
"October", "November", "December"
};
return (month < 1 || month > 12) ? name[1] : name[month];
}
/*************************************************
函数名称:M_MonthDays
函数功能:返回每个月份的天数
被本函数调用的函数清单:IsLeapYear
调用本函数的函数清单:M_PrintMonth, M_YeFirstMonthDay
输入参数:year, month
函数返回值:(int)
**************************************************/
int M_MonthDays(int year, int month)
{
switch(month)
{
case 2 :
if(M_IsLeapYear(year))/* 如果是闰年*/
{
return 29;
}
return 28;
case 4 : case 6 : case 9 : case 11 :
return 30;
default :
return 31;
}
}
/*************************************************
函数名称:IsLeapYear
函数功能:返回是否是闰年的bool值
调用本函数的函数清单:M_MonthDays
输入参数:year
函数返回值:(int,返回bool值1或0)
**************************************************/
int M_IsLeapYear(int year)
{
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
/*************************************************
函数名称:M_YeFirstMonthDay
函数功能:年份第一个月第一天是星期几,开头enum
从Sunday(0开始),则从(weekday + 1) %7,weekday
是过几天后,能推出几天后就是星期几了,后面依次类推
被本函数调用的函数清单:M_MonthDays
调用本函数的函数清单:M_PrintMonth
输入参数:year, month
函数返回值:(int)
**************************************************/
int M_YeFirstMonthDay(int year, int month)
{
int i, weekday;
weekday = Monday;
for(i = 1900; i < year; i++)
{
weekday = (weekday + 365) % 7;
if(M_IsLeapYear(i))/* 如果是闰年就加1*/
{
weekday = (weekday + 1) % 7;
}
}
for(i = 1; i < month; i++)
{
weekday = (weekday + M_MonthDays(year, i)) % 7;
}
return weekday;
}
/*************************************************
函数名称:M_BlankUnit
函数功能:年份第一个月第一天星期几就要空几个空格
调用本函数的函数清单:M_PrintMonth
输入参数:weekday
函数返回值:(void)
**************************************************/
void M_BlankUnit(int weekday)
{
int i;
for(i = 0; i < weekday; i++)
{
printf(" ");
}
}
编写万年历C语言高手进
define TRUE 1 enum{Sunday, Monday, Tuesday, Wednesday,Thursday, Friday, Saturday};\/*0,1,2...*\/ int M_GetYear(void);void M_PrintMonthNum(int year);void M_PrintMonth(int month, int year);char *M_MonthName(int month);int M_MonthDays(int year, int month);int M_IsL...
用c语言设计一个简单的万年历怎么写代码
30,31};\/\/Days[1~12]存储每个月有多少天,其中二月的天数是可变的(闰年29天,平年28天),这里初始化为28天printf("C语言简单万年历");\/\/打印标题XunHuan:\/\/循环标号(可以通过goto跳转到这里)printf("请输入年份:");\/\/提示输入年份(0~9999)...
求用C语言编写打印万年历的程序代码
int monthDay(int,int);int IsLeapYear(int);main(){ int days,weekDay,year,month=1,d,i;printf("please input the year:\\n");scanf("%d",&year);days=year-1+(year-1)\/400+(year-1)\/4-(year-1)\/100;while(month<=12){ printf("\\t\\t\\t%d-%d\\n",year,month);printf("Sun\\...
用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。根据以上规律,只要...
c语言万年历程序。编写程序打印任意给定的年份的日历或者某年某月的月 ...
以下是一个示例的 C 代码,实现了打印给定年份的日历、某年某月的月历以及查询某一天是星期几的功能:include <stdio.h>\/\/ 判断某年是否为闰年int isLeapYear(int year) { if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { return 1;} return 0;}\/\/ 获取某年某...
C语言编写打印万年历(呼唤高手)
我写了一个代码用DevC++4.9.9.2编译通过在VC++6.0下也可以正常编译代码如下#include #include #include #include using namespace std; \/\/By Shilyx oversleep@163.com char *monthname[]={"","January","February","March","April","May","June","July","August","September","October...
用C语言编万年历要注意什么!!!高手请指点!!!
(年+年\/4+年\/400-年\/100+月日天数-1)\/7=XX……余。余数为星期几。其中:(年+年\/4+年\/400-年\/100)\/7=XX……余。余数为该年1月1日星期数。(注:分数和商数均取整数)但是月日天数有规则:月日天数: 平年 , 闰年 一 月: 0+日数, 0+日数 二 月: 3+日...
用c语言编写万年历,要求输出任意一年的某月,能显示出这个月的日历_百度...
1、首先要判断一个年份是闰年还是平年,用一个子程序来做。2、然后就开始写主程序,首先用scanf得到一个年份。3、在判断这个年份是平年还是闰年后用printf在CMD中打印出来。4、在编写完成后,在Notepad++界面下按下F5,弹出输入框。5、cmd \/k gcc -o "$(CURRENT_DIRECTORY)\\$(NAME_PART).exe""$...
用c语言编写个万年历
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,&...
用C语言怎样做这个万年历啊,哪位大神能够指点一下?
include<iostream>using namespace std;class Date{private: int year,month,day;public: void setYear(int y) { year=y; } void setMon(int m) { month=m; } void setDay(int d) { day=d; } bool isLeapYear() { if(((year%100!=...
邹诸凡林: #include<stdio.h> #include<stdlib.h> char* month_str[]={"January","February","March","April","May","June","July","August","September","October","November","December"}; char* week[]={"Sunday","Monday"...
资阳市19722432008: c语言编写万年历 - ?
邹诸凡林: #include"stdio.h" #include"stdlib.h" #include"windows.h" void welcome(); void getday(int year,int month); void shuru(); void end(); long year; long month; void welcome() {printf("【万年历程序加载中");for(int i=0;i<30;i++){printf("★"...
资阳市19722432008: 怎样用c语言编写一个能显示系统当前日期的万年历 - ?
邹诸凡林: #include void main(){ int i,j,temp,temp_i,day,year; long int yeardays; long int sumday(int year); ...
资阳市19722432008: 用C语言编写一万年历系统 - ?
邹诸凡林: #include<stdio.h>#include <time.h> int*daysandweek(int*y,int*week); bool runnian(int*); void main() { struct tm *local; time_t t; t=time(0); local=localtime(&t); printf("日历---冰之龙制作\n"); int year,*y;int *week,p=1; week=&p; int monthday[]={31,...
资阳市19722432008: 如何用C语言编一个万年历系统 - ?
邹诸凡林: #include int day,year,month; int isLeap() {int isleap; if(((year%4==0)&&!(year%100==0))||(year%400==0))isleap=1; else isleap=0; return isleap;} int lastdayofmonth() {int lastday,isleap; switch (month) {case 1: case 3: case 5: case 7:case 8: case 10: ...
资阳市19722432008: 如何用C语言编写一个万年历系统? - ?
邹诸凡林: //C语言,编译环境:Microsoft Visual C++ 6.0 #include <stdio.h> #include <process.h> int day_s(); int year_s(); int week_s(); void output_month(); void menu(); void output_year(); int year,month; int main() { printf("请输入年月以打印该月日历!\n...
资阳市19722432008: C语言编写万年历系统 - ?
邹诸凡林: 程图吗,有软件的,可以到网上下,我这也有,想要 可以找我#include <stdio.h> int leap (int year) {if(year%4==0&&year%100!=0||year%400==0) return 1; else return 0; } int days_month (int month,int year) { if(month==1||month==3||month==5||month...
资阳市19722432008: C语言程序设计万年历怎么编写 - ?
邹诸凡林: #include int IsLeapYear(int); main() { int i; int day; int year; int temp; int temp_i; long int Year_days = 0; int Year_Start = 1; int Per_Year_Days; int month_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29}; printf("Please enter the year: "); scanf("%d...
资阳市19722432008: c语言 万年历的程序设计 - ?
邹诸凡林: #include <windows.h> #include <winnt.h> #include<iostream>#include<iomanip> using namespace std; int week(int,int,int); //根据年月日判断星期几 int leap_year(int); //判断闰年 void display_year(int ); //显示某年日历 void demand_day(int,int,...
资阳市19722432008: 用C语言编写万年历程序 - ?
邹诸凡林: #include<reg51.h>sbit rs=P3^5;sbit rw=P3^6;sbit en=P3^7;sbit K2=P3^3;sbit K3=P3^4;sbit K1=P3^2;static int temp1=0;unsigned char second;unsigned char minite;unsigned char hour;unsigned char day=14;unsigned char month=11;unsigned ...