C语言实现显示日历

使用C语言实现日历显示,下面是windows和Linux的代码

1、windows版

#ifdef _WIN32
#define  _CRT_SECURE_NO_WARNINGS
#endif

#include<stdio.h>

/*判断输入的年份是否为闰年
**参数说明:year,要判断的年份
**返回值 1:是闰年,0:不是闰年
*/
int Isleap(int year)
{
	if ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)))
		return 1;
	else
		return 0;
}

/*判断输入年份二月份的天数
**参数说明:year,要判断的年份;month,要判断的月份
**返回值:Day[month-1],上个月(month-1)的天数
*/
int Max_day(int year, int month)
{
	int Day[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	if (Isleap(year) == 1)
		Day[1] = 29;
	return Day[month - 1];
}


/*计算输入的日期是这一年的多少天
**参数说明:year,month,day 分别为输入的年、月、日
**返回值:sum,输入的日期是这一年的多少天
*/
int Total_day(int year, int month, int day)
{
	int sum = 0;
	int i = 1;
	for (i = 1; i < month; i++)
		sum = sum + Max_day(year, i);
	sum = sum + day;
	return sum;
}

/*由输入的日期判断当天是星期几
**参数说明:year,month,day 分别为输入的年、月、日
**返回值:count,0~6,分别表示星期日~星期六
*/
int Weekday(int year, int month, int day)
{
	int count;
	count = (year - 1) + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 + Total_day(year, month, day);
	count = count % 7;
	return count;
}


/*显示输入的日期是星期几
**参数说明:year,month,day 分别为输入的年、月、日
**返回值:无
*/
void display_week(int year, int month, int day)
{
	int count;
	count = Weekday(year, month, day);
	switch (count)
	{
	case 0:printf("\t%d-%d-%d is Sunday\n", year, month, day); break;
	case 1:printf("\t%d-%d-%d is Monday\n", year, month, day); break;
	case 2:printf("\t%d-%d-%d is Tuesday\n", year, month, day); break;
	case 3:printf("\t%d-%d-%d is Wednesday\n", year, month, day); break;
	case 4:printf("\t%d-%d-%d is Thursday\n", year, month, day); break;
	case 5:printf("\t%d-%d-%d is Friday\n", year, month, day); break;
	case 6:printf("\t%d-%d-%d is Saturday\n", year, month, day); break;
	default: system("cls"); printf("error\n");
	}
}

/*显示输入的日期的当月日历
**参数说明:year,month,day 分别为输入的年、月、日
**返回值:无
*/
void display_month(int year, int month, int day)
{
	int i = 0, j = 1;
	int week, max;
	week = Weekday(year, month, 1); //由每月1号确定打印制表符的个数
	max = Max_day(year, month);
	printf("\n\t\t\t%d年%d月", year, month);
	printf("\n\tSUN\tMON\tTUE\tWED\tTHU\tFRI\tSAT\n");
	for (i = 0; i < week; i++)
		printf("\t");
	for (j = 1; j <= max; j++)
	{
		printf("\t%d", j);
		if (i % 7 == 6)
			printf("\n");
		i++;
	}
	printf("\n");
}


int main()
{
	int year, month, day;
	printf("\tplease enter year,month,day: ");
	scanf("%d,%d,%d", &year, &month, &day);
	if (month<1 || month>12 || day<1 || day>31)
	{
		printf("error...\n");
		return -1;
	}
	printf(" \t%d年%d月%d日是这一年的第%d天\n\ ", year, month, day, Total_day(year, month, day));
	display_week(year, month, day);
	display_month(year, month, day);
	return 0;
}

运行结果:



2、Linux版本

#include<stdio.h>

/*判断输入的年份是否为闰年
**参数说明:year,要判断的年份
**返回值 1:是闰年,0:不是闰年
*/
int Isleap(int year)
{
    if( (year%400==0)||((year%4==0)&&(year%100!=0)) )
        return 1;
    else
        return 0;    
}

/*判断输入年份二月份的天数
**参数说明:year,要判断的年份;month,要判断的月份 
**返回值:Day[month-1],上个月(month-1)的天数
*/
int Max_day(int year, int month)
{
    int Day[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    if(Isleap(year)==1)
        Day[1]=29;
    return Day[month-1];
}


/*计算输入的日期是这一年的多少天
**参数说明:year,month,day 分别为输入的年、月、日
**返回值:sum,输入的日期是这一年的多少天
*/
int Total_day(int year, int month ,int day)
{
    int sum=0;
    int i=1;
    for(i=1;i<month;i++)
    sum=sum+Max_day(year,i);
    sum=sum+day;
    return sum;
}

/*由输入的日期判断当天是星期几
**参数说明:year,month,day 分别为输入的年、月、日
**返回值:count,0~6,分别表示星期日~星期六
*/
int Weekday(int year, int month ,int day)
{
    int count;
    count=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400 +Total_day(year,month,day);
    count=count%7;
    return count;
}


/*显示输入的日期是星期几
**参数说明:year,month,day 分别为输入的年、月、日
**返回值:无
*/
void display_week(int year, int month , int day)
{
    int count;
    count=Weekday(year,month,day);
    switch(count)
        {
            case 0:printf("\033[32m\t%d-%d-%d is Sunday\n\033[0m",year,month,day);break;
            case 1:printf("\033[32m\t%d-%d-%d is Monday\n\033[0m",year,month,day);break;
            case 2:printf("\033[32m\t%d-%d-%d is Tuesday\n\033[0m",year,month,day);break;
            case 3:printf("\033[32m\t%d-%d-%d is Wednesday\n\033[0m",year,month,day);break;
            case 4:printf("\033[32m\t%d-%d-%d is Thursday\n\033[0m",year,month,day);break;
            case 5:printf("\033[32m\t%d-%d-%d is Friday\n\033[0m",year,month,day);break;
            case 6:printf("\033[32m\t%d-%d-%d is Saturday\n\033[0m",year,month,day);break;
            default: system("cls");printf("error\n");
        }
}

/*显示输入的日期的当月日历
**参数说明:year,month,day 分别为输入的年、月、日
**返回值:无
*/
void display_month(int year, int month, int day)
{
    int i=0,j=1;
    int week,max;
    week=Weekday(year,month,1); //由每月1号确定打印制表符的个数
    max=Max_day(year,month);
    printf("\033[34m\n\t\t\t%d年%d月\033[0m",year,month);
    printf("\033[31m\n\tSUN\tMON\tTUE\tWED\tTHU\tFRI\tSAT\n\033[0m");
    for(i=0;i<week;i++)
    printf("\t");
    for(j=1;j<=max;j++)
    {
        printf("\t%d",j);
        if(i%7==6)
            printf("\n");
        i++;
    }
    printf("\n");
}


int main()
{
    int year,month,day;
    printf("\tplease enter year,month,day: ");
    scanf("%d,%d,%d",&year,&month,&day);
    if(month<1||month>12||day<1||day>31)
    {
        printf("error...\n");
        return -1;
    }
    printf("\033[32m\t%d年%d月%d日是这一年的第%d天\n\033[0m",year,month,day,Total_day(year,month,day));
    display_week(year,month,day);
    display_month(year,month,day);
    return 0;
}

运行结果:





  • 12
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
下面是用C语言实现单月日历的代码示例,其中使用了数组来存储每个月中每一天的日期: ```c #include <stdio.h> int main() { int month, year, days, start_day; int calendar[6][7] = {0}; // 6行7列的二维数组,用于存储日历 printf("Enter month and year (mm yyyy): "); scanf("%d %d", &month, &year); // 计算该月有多少天 if (month == 2) { if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) { days = 29; } else { days = 28; } } else if (month == 4 || month == 6 || month == 9 || month == 11) { days = 30; } else { days = 31; } // 计算该月第一天是星期几 start_day = (year * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400) % 7; for (int i = 1; i < month; i++) { if (i == 2) { if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) { start_day += 29; } else { start_day += 28; } } else if (i == 4 || i == 6 || i == 9 || i == 11) { start_day += 30; } else { start_day += 31; } } start_day %= 7; // 将日期填入日历数组中 int day = 1; for (int i = 0; i < 6; i++) { for (int j = 0; j < 7; j++) { if (i == 0 && j < start_day) { continue; } if (day <= days) { calendar[i][j] = day++; } } } // 显示日历 printf(" Sun Mon Tue Wed Thu Fri Sat\n"); for (int i = 0; i < 6; i++) { for (int j = 0; j < 7; j++) { if (calendar[i][j] != 0) { printf("%4d", calendar[i][j]); } else { printf(" "); } } printf("\n"); } return 0; } ``` 该代码首先通过用户输入的月份和年份计算出该月有多少天,以及该月第一天是星期几。然后,使用一个6行7列的二维数组来存储该月的日历,日期填入数组中后,再使用循环将日历打印出来。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值