欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言實現(xiàn)的一個萬年歷小程序

 更新時間:2014年07月05日 11:53:42   投稿:junjie  
這篇文章主要介紹了C語言實現(xiàn)的一個萬年歷小程序,具有一定的參考價值,做C語言日期計算的朋友可以參考下

該程序簡單地輸入一個年份(1901年之后的年份),隨后程序輸出該年份十二個月的日歷。

#include<stdio.h>

#define Mon  1
#define Tues 2
#define Wed  3
#define Thur 4
#define Fri  5
#define Sat  6
#define Sun  0

#define January_days  31
#define February_days  28
#define March_days  31
#define April_days  30
#define May_days   31
#define June_days   30
#define July_days   31
#define August_days  31
#define September_days 30
#define October_days  31
#define November_days  30
#define December_days  31

#define first1month January_days
#define first2month January_days+February_days
#define first3month January_days+February_days+March_days
#define first4month January_days+February_days+March_days+April_days
#define first5month January_days+February_days+March_days+April_days+May_days
#define first6month January_days+February_days+March_days+April_days+May_days+June_days
#define first7month January_days+February_days+March_days+April_days+May_days+June_days \
	     +July_days
#define first8month January_days+February_days+March_days+April_days+May_days+June_days \
	     +July_days+August_days
#define first9month January_days+February_days+March_days+April_days+May_days+June_days \
	     +July_days+August_days+September_days
#define first10month January_days+February_days+March_days+April_days+May_days+June_days \
	     +July_days+August_days+September_days+October_days
#define first11month January_days+February_days+March_days+April_days+May_days+June_days \
	     +July_days+August_days+September_days+October_days+November_days

int known_weekday = Tues;
int known_year = 1901;
int konwn_month = 1;
int known_day = 1;

int day_count(int month)
{	
	switch(month)
	{
		case 1: return 0;break;
		case 2: return first1month;break;
		case 3: return first2month;break;
		case 4: return first3month;break;
		case 5: return first4month;break;
		case 6: return first5month;break;
		case 7: return first6month;break;
		case 8: return first7month;break;
		case 9: return first8month;break;
		case 10: return first9month;break;
		case 11: return first10month;break;
		case 12: return first11month;break;
	}
}


/*char * month_name(int month)
{
	switch(month)
	{
		case 1:
			return "January";
			break;
		case 2:
			return "February";
			break;
		case 3:
			return "March";
			break;
		case 4:
			return "April";
			break;
		case 5:
			return "May";
			break;
		case 6:
			return "June";
			break;
		case 7:
			return "July";
			break;
		case 8:
			return "August";
			break;
		case 9:
			return "September";
			break;
		case 10:
			return "October";
			break;
		case 11:
			return "November";
			break;
		case 12:
			return "December";
			break;
		default:
			break;
	}
}*/

char * month_name(int month)
{
	switch(month)
	{
		case 1:
			return "一月";
			break;
		case 2:
			return "二月";
			break;
		case 3:
			return "三月";
			break;
		case 4:
			return "四月";
			break;
		case 5:
			return "五月";
			break;
		case 6:
			return "六月";
			break;
		case 7:
			return "七月";
			break;
		case 8:
			return "八月";
			break;
		case 9:
			return "九月";
			break;
		case 10:
			return "十月";
			break;
		case 11:
			return "十一月";
			break;
		case 12:
			return "十二月";
			break;
		default:
			break;
	}
}

/*按格式打印某年某月名稱*/
void first_line_print(int month, int year)
{
	//printf("%20s %d \n",month_name(month),year);
	printf("%8d年 %s \n",year, month_name(month));
}

/*按格式打印星期名稱*/
void week_print()
{
	//printf("%-6s%-6s%-6s%-6s%-6s%-6s%-6s\n","Sun.", "Mon.", "Tues.", "Wed.", "Thur.", "Fri.", "Sat.");
	printf("%-3s%-3s%-3s%-3s%-3s%-3s%-3s\n","日", "一", "二", "三", "四", "五", "六");
}

/*計算該年該月份與已知日子之間的距離天數(shù)*/
int date_distance_count(int month, int year)
{
	int leap_year_count = 0;
	int i;
	int distance;

	if (year > known_year)
	{
		for (i=known_year; i<year; i++)
		{
			if(((i%4 == 0) && (i%100 != 0) ) || (i%400 == 0))
			{
				leap_year_count++;		
			}
		}

		if (month > 2)
		{
			if(((year%4 == 0) && (year%100 != 0) ) || (year%400 == 0))
			{
				leap_year_count++;		
			}
		}
	}
	else
	if (year == known_year)
	{
		if (month > 2)
		{
			leap_year_count = 1;
		}
	}
	

	distance = (year - known_year)*365 + leap_year_count + day_count(month);

	return distance;	
}

/*確定該月份第一天是星期幾*/
int makesure_firstday_weekday(int month, int year)
{
	int date_distance = 0;
	int weekday;

	date_distance = date_distance_count(month, year);
	weekday = (known_weekday + date_distance)%7;

	return weekday;	
}

/*依次打印出該月份的日子*/
void print_in_turn(int month, int firstday, int year)
{
	int i = 1;
	int weekday;

	switch(firstday)
	{
		case Sun:
			break;
		case Mon:
			printf("%-3s","");
			break;
		case Tues:
			printf("%-6s","");
			break;
		case Wed:
			printf("%-9s","");
			break;
		case Thur:
			printf("%-12s","");
			break;
		case Fri:
			printf("%-15s","");
			break;
		case Sat:
			printf("%-18s","");
			break;
	}

	switch(month)
	{
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
		{
			for(i=0; i<31; i++)
			{
				weekday = (firstday + i)%7;
				printf("%-3d",i+1);
				
				if(weekday == Sat)
				{
					printf("\n");
				}					
			}
			break;
		}
		case 2:
		{
			if(((year%4 == 0) && (year%100 != 0) ) || (year%400 == 0)) /*閏年*/
			{
				for(i=0; i<29; i++)
				{
					weekday = (firstday + i)%7;
					printf("%-3d",i+1);
					
					if(weekday == Sat)
					{
						printf("\n");
					}					
				}
				break;
			}
			else /*平年*/
			{
				for(i=0; i<28; i++)
				{
					weekday = (firstday + i)%7;
					printf("%-3d",i+1);
					
					if(weekday == Sat)
					{
						printf("\n");
					}					
				}
				break;
			}
		
		}
		case 4:
		case 6:
		case 9:
		case 11:
		{
			for(i=0; i<30; i++)
			{
				weekday = (firstday + i)%7;/*計算該天是星期幾*/
				printf("%-3d",i+1);
				
				if(weekday == Sat)
				{
					printf("\n");/*如果是星期六,則換行*/
				}					
			}
			break;
		}			
	}
}

void date_print(int month, int year)
{
	int firstday;

	firstday = makesure_firstday_weekday(month, year);
	print_in_turn(month, firstday, year);
	printf("\n");
}

void main_month(int month, int year)
{
	first_line_print(month, year);
	week_print();
	date_print(month, year);
	printf("\n\n");
}

void main_calendar(int year)
{
	int i;
	for(i=1; i<=12; i++)
	{
		main_month(i, year);
	}
}

int main()
{
	int year;

	printf("請輸入年份:year = ");
	scanf("%d",&year);
	printf("\n");

	while(year < 1902)
	{
		printf("請輸入大于1901的年份\n");

		printf("請輸入年份:year = ");
		scanf("%d",&year);
		printf("\n");
	}
	
	main_calendar(year);
	
	scanf(" ");
	return 0;
}

運行效果圖:

相關(guān)文章

  • OpenCV實現(xiàn)傾斜文字校正

    OpenCV實現(xiàn)傾斜文字校正

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)傾斜文字校正,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • c語言中字符串分割函數(shù)及實現(xiàn)方法

    c語言中字符串分割函數(shù)及實現(xiàn)方法

    下面小編就為大家?guī)硪黄猚語言中字符串分割函數(shù)及實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • 淺談C/C++中指針和數(shù)組的不同

    淺談C/C++中指針和數(shù)組的不同

    本文主要解析了C/C++中數(shù)組和指針的區(qū)別,文章簡單易懂,對各位的工作學(xué)習(xí)有所幫助,有需求的朋友可以了解下
    2020-05-05
  • 二分查找算法在C/C++程序中的應(yīng)用示例

    二分查找算法在C/C++程序中的應(yīng)用示例

    這篇文章主要介紹了二分查找算法在C/C++程序中的使用示例,文中最后提到了使用二分查找法一個需要注意的地方,需要的朋友可以參考下
    2016-03-03
  • 一文詳解C語言操作符

    一文詳解C語言操作符

    這篇文章主要詳細介紹了C語言的操作符,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • C語言音樂播放器實例代碼

    C語言音樂播放器實例代碼

    文章給大家分享了用C語言音樂播放器的實例代碼,對此有需要的朋友參考學(xué)習(xí)下。
    2018-07-07
  • C++中cout輸出中文信息亂碼問題及解決

    C++中cout輸出中文信息亂碼問題及解決

    這篇文章主要介紹了C++中cout輸出中文信息亂碼問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 關(guān)于雙向鏈表的增刪改查和排序的C++實現(xiàn)

    關(guān)于雙向鏈表的增刪改查和排序的C++實現(xiàn)

    下面小編就為大家?guī)硪黄P(guān)于雙向鏈表的增刪改查和排序的C++實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C++ OpenCV實戰(zhàn)之文檔照片轉(zhuǎn)換成掃描文件

    C++ OpenCV實戰(zhàn)之文檔照片轉(zhuǎn)換成掃描文件

    這篇文章主要為大家介紹一個C++?OpenCV的實戰(zhàn)——文檔照片轉(zhuǎn)換成掃描文件,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-09-09
  • C語言中的數(shù)據(jù)整除判斷問題

    C語言中的數(shù)據(jù)整除判斷問題

    這篇文章主要介紹了C語言中的數(shù)據(jù)整除判斷問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論