打印某一年的月份日历或者某天星期几

打印某一年的月份日历

题目

2008年1月1日为星期二,判断2008年是否为闰年,输入任意一个月份,打印该年该月的日历,要求按周排齐,星期一排第一列。

分析

第一:考察的就是闰年的判断。

 - 1、能整除400的。 year%400==0
 - 2、能整除4同时不能整除100 。year%4==0&&year%100!=0

第二: 2008年1月1日是星期二,说明整除7的时候余数是2,这时候我们算天数的时候要在2的基础上开始,才能算出正确的星期

我觉得考察点就是这两个吧。
为什么要考虑闰年,闰年2月是29天,平年是28天,所以这一块的考虑。
下面我们看一下具体的代码吧。

代码(源码点击这里)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int days(int flag, int month);
void fun6(){    
	int year = 2008;    //这里的月份按照题设是给定了,可以定义输入
	int flag = 0;    
	int month, week, day = 2;    
	if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)    {  
	      flag = 1;       
	      printf("2008 year is yes\n");    
	}    
	printf("please input 1-12\n");    
	scanf("%d", &month);    
	while (1)    {        // 判断输入的月份是否正确 
		if (month > 12 || month < 0)        {
         		printf("please input 1-12\n");      
        	        scanf("%d", &month);        }        
                else        {           
                        break;     
                } 
          }
         for (int i = 1; i <= month - 1; i++)    {      
            day += days(flag, i);    
         }   
        printf("\n");  
        printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "Mon", "Tuse", "Wed", "Thur", "Fri", "Sat", "Sun");
        int size = days(flag, month);  
        for (int i = day, j = 1; i <= day + size && j <= size; i++, j++)    {     
     	   week = i % 7;      
     	   if (i == day  && week != 1)        {      
     	         if (week == 0)   {        
     	                 printf("\t\t\t\t\t");         
     	          }
                  for (int i = 0; i < week - 2; i++)   {    
                     printf("\t");        
                 } 
           }
        switch (week)    {        
        	case 1:            
        	      printf("%d", j);           
        	      break;       
        	 case 2:         
        	 case 3:        
        	 case 4:         
        	 case 5:         
        	 case 6:           
        	      printf("\t%d", j);            
        	      break;        
        	 case 0:           
        	      printf("\t%d\n", j);
                      break;
                 default:           
                      break;       
            }   
       }
   }
   // 计算天数
   int days(int flag, int month){    
   	switch (month)    {    
   		case 1:   
   	        case 5:    
   	        case 3:    
   	        case 7:    
   	        case 8:    
   	        case 10:    
   	        case 12:        
   	        	return 31;    
   	        case 4:    
   	        case 6:    
   	        case 9:    
   	        case 11:        
   	        	return 30;    
   	        case 2:        
   	        	if (flag == 1)        {            
   	        		return 29;       
   	        	 }else        {            
   	        	       return 28;       
   	        	  }    
   	    }
 }
 int main(int argc, char const *argv[]){    
 	 fun6();   
 	 return 0;
}

效果

输入2的时候,
在这里插入图片描述

输入5看效果

在这里插入图片描述
2019年研究生考试的一道题,具体的题目不记得的,大概相类似吧。当时考场上,模模糊糊,时间紧迫没有写完美,今天就在写一下吧。

如果有什么问题,欢迎留言,探讨啊,如果有更好的解决办法,也欢迎留言啊。

猜你喜欢

转载自blog.csdn.net/honeylife/article/details/100574556
今日推荐