特定の年または曜日の月間カレンダーを印刷する

特定の年の月間カレンダーを印刷する

トピック

2008年1月1日は火曜日です。2008年がうるう年かどうかを判断するには、任意の月を入力し、その年のその月のカレンダーを印刷します。最初の列に月を入れて、週ごとに配置する必要があります。

分析

まず、調査されているのはうるう年の判断です。

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

2番目:2008年1月1日は火曜日です。つまり、7を均等に割ると余りは2になります。このとき、日数を数えるときは、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