编写万年历C语言高手进

作者&投稿:佼谢 (若有异议请与网页底部的电邮联系)
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 <stdio.h>
#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!=...

资阳市19722432008: 求高手编写一个万年历的C语言程序 -
邹诸凡林: #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 ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网