⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c11.cpp

📁 《C++程序设计习题及解答》配套代码VC版
💻 CPP
字号:
// c11.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <iostream.h>
#include <iomanip.h>

int FirstDayOfYear( int y );
int DaysOfMonth( int m );
void PrintMonth( int m );
void PrintHead( int m );
bool IsLeapYear( int y );

int weekDay;
int year;

int main(int argc, char* argv[])
{
	cerr << "请输入您想要打印的年份:\n";
	cin >> year;

	if ( year < 1 )
	{
		cerr << "年份不能小于1。\n";
		return -1;
	}

	weekDay = FirstDayOfYear( year );

	cout << "\n\n\n\n\n               " << year << " 年\n";
	cout << "\n ===========================================";

	for ( int i = 1; i <=12; i++ )
		PrintMonth( i );

	return 0;
}

void PrintMonth( int m )
{
	PrintHead( m );
	int days = DaysOfMonth( m );
	
	for ( int i = 1; i <= days; i ++ )
	{
		cout << setw(5) << i;
		weekDay = ( weekDay + 1 ) % 7;
		if ( weekDay == 0 )
		{
			cout << endl;
			cout << "      ";
		}
	}
}

void PrintHead( int m )
{
	cout << "\n\n" << setw(6) << m << "月  日  一   二   三   四   五   六\n";
	cout << "      ";
	for ( int i = 0; i < weekDay; i ++ )
		cout << "     ";
}

int DaysOfMonth( int m )
{
	switch( m )
	{
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12: 
		return 31;
		break;
	case 4:
	case 6:
	case 9:
	case 11:
		return 30;
		break;
	case 2:
		if ( IsLeapYear( year ) )
			return 29;
		else
			return 28;
	}
	
	return 0;
}

bool IsLeapYear( int y )
{
	return ( ( y %4 == 0 && y % 100 != 0 ) || y % 400 == 0 );
}

int FirstDayOfYear( int y )
{
	long n;
	n = y * 365;
	for ( int i = 1; i < y; i++ )
		n += IsLeapYear( i );

	return n %= 7;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -