ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言—万年历打印(详细易懂)

2022-02-07 23:32:20  阅读:216  来源: 互联网

标签:printf 万年历 int 31 30 C语言 year 易懂 month


目录

01、实现效果

02、过程步骤

03、代码


01、实现效果

在这里插入图片描述

02、过程步骤

03、代码

#include<stdio.h>
int Leap_year[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31 };
int Com_year[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 
char Week[7][5] = { "一","二","三","四","五","六","日" };
int year, month, day;
//用户输入日期
int User_Scanf()
{
	printf("请输入年-月-日:");
	while (scanf("%d-%d-%d", &year, &month, &day) != EOF)
	{
		//是否在有效范围内检查
		if (year <= 0 || year >= 10000 || month < 0 || month >= 13 || day < 0 || day >= 31)
		{
			printf("Error!\n");
			continue;
		}
		return 0;
	}
}
//打印星期
void Print_Week()
{
	printf("********************************************************\n");
	printf("\t\t\t万年历\t\t\t\n");
	for (int i = 0; i < 7; i++)
	{
		printf("%s\t", Week[i]);
	}
	printf("\n");
}
//判断闰/平年
int is_Leap_Com(int year)
{
	if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
	{
		return 1;//闰年
	}
	else
		return 0;//平年
}
//计算天数
int Count_Day(int year,int month,int day,int Leap_year[],int Com_year[])
{
	int sum = 0;
	//计算年天数
	if (is_Leap_Com(year) == 1)
	{
		sum += 366;//闰年
	}
	else
		sum += 365;//平年
	
	//计算月天数
	if (is_Leap_Com(year) == 1)
	{
		for (int i = 1; i <=month; i++)
		{
			sum += Leap_year[i];//闰月
		}
	}
	else
	{
		for (int i = 1; i <=month; i++)
		{
			sum += Com_year[i];//平月
		}
	}
	return sum;
}
//打印日历
void Print_Day(int num, int year, int month)
{
	int result = 0, temp = 0;
	result = num % 7;//打印空格
	for (int i = 0; i < result; i++)
	{
		printf("\t");
	}
	temp = 7 - result;//打印除空格外的日历
	if (is_Leap_Com(year) == 1)
	{
		for (int i = 1; i <=Leap_year[month]; i++)
		{
			printf("%d\t", i);
			if (i == temp || (i - temp) % 7 == 0)//判断是否换行
				printf("\n");
		}
	}
	else
	{
		for (int i = 1; i <=Com_year[month]; i++)
		{
			printf("%d\t", i);
			if (i == temp || (i - temp) % 7 == 0)
				printf("\n");
		}
	}
	printf("\n");
	printf("********************************************************\n");
}
int main()
{
	User_Scanf();//用户输入日期
	Print_Week();//打印星期
	int num=Count_Day(year,month,day, Leap_year, Com_year);计算天数
	Print_Day(num,year, month);//打印日历
	return 0;
}

标签:printf,万年历,int,31,30,C语言,year,易懂,month
来源: https://blog.csdn.net/m0_65592409/article/details/122816307

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有