C语言编写日历--《Blind-Stab》

今天有一个小伙伴问我这题,然后写了一下。(用到了基姆拉尔森计算公式) 

 输入一个整数年比如2019和一个整数月比如2,输出当月日历 (注意闰年的情况)

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int year,month;
	int W;//基姆拉尔森计算公式计算出星期几
	int day = 1;//置为1,用来求所求月的1号为星期几
	int flag = 0;//判断闰平年的标记
	int daycounts;//所求月份的天数
	int c = 0;//格式控制计数换行变量
	 
	printf("请输入整数年月:");
	scanf("%d%d",&year,&month);
	//保留原始年份月份 
	int y = year;int m = month;
	//判断闰年平年,用flag标记 flag=1为闰年,flag=0即还是为初始值则为平年 
	if (year%4==0&&year%100!=0||year%400==0){
		flag = 1; 
	}
	 
	 //根据月份和是否闰年,得到该月天数 
	if (month == 1||month == 3|| month == 5|| month == 7||month == 8|| month == 10 || month == 12) {
		//无论是平年闰年,1 3 5 7 8 10 12都是31天 
		daycounts = 31;
	}else if(month == 2&&flag==1){
		//如果是闰年,并且是2月,天数daycounts为29天 
		daycounts = 29;
	}else if(month == 2&& flag == 0){
		//如果是平年,并且是2月,天数daycounts为28天 
		daycounts = 28;
	} else{
		//除了这几种情况,其他全为30天 
		daycounts = 30;
	}
	
	//判断month,如果是 1 2月,那就改为13 14 
	if (month==1||month==2){
		year = year - 1;
		month = month + 12;
	} 
	
	//代入公式 W,记录该月的1号为星期几,因为day我设置了1
	//求一号星期几,是为了控制日历格式,即前面空出多少格 
	W = (1+day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
	
	//你可以记者,下面这句话是清屏作用,但是头文件要写#include<stdlib.h>因为它在这个库里 
	system("cls");
	
	//控制格式,排版好看一点 
	printf("\t\t%d年%d月\n\n",y,m);
	printf("星期日  星期一  星期二  星期三  星期四  星期五  星期六\n");
	
	//这个for循环是根据W为星期几,来控制前面应该空几个空 
	for (int i = 0; i < W; i++){
		printf("\t");//这里的  "\t" 相当于一下4个空格单位 
		c++;//c用来计数,就是记录输了几个空格了 
	}
	for (int i = 1; i <= daycounts;i++){
		printf("  %d\t",i);
		c++;
		//这里就是c的作用,7个c为一个单位换行。 
		if (c%7==0){
			printf("\n");
		}
	}

	return 0;
}

代码输出效果: 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值