问题:利用 C++的各种控制语句编写一个万年历程序。 要求:显示任何年份的日历,日历以月份顺序排列,每月以星期顺序排列,类似于一 般挂历上的格式。
2016-08-08 17:25
746 查看
#include<iostream>
class calendar
{
//基准为2000,1,1,星期六
int y;
int m;
int d;
int sum ;
public:
calendar(int year, int month)
{
y = year;
m = month;
}
//是否闰年
int isleap()
{
if ((0 == y % 400) || (y % 100 != 0 && 0 == y % 4))
{
return 1;
}
return 0;
}
int count()//计算2016,4
{
sum = 0;
int mon[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
//加上年份
if (y >= 2001)
{
for (int i = 2001; i < y; i++)
{
if ((0 == i % 400) || (i % 100 != 0 && 0 == i % 4))
{
sum += 366;
sum %= 7;
}
else
{
sum += 365;
sum %= 7;
}
}
//加上月份
for (int i = 0; i < m - 1; i++)
{
sum += mon[i];
}
//加上闰年多一天
if (isleap())
{
if (m >= 3)
{
sum += 1;
}
}
sum = sum % 7 ;
}
else
{
for (int i = y+1; i<2001; i++)
{
if ((0 == i % 400) || (i % 100 != 0 && 0 == i % 4))
{
sum += 366;
sum %= 7;
}
else
{
sum += 365;
sum %= 7;
}
}
//加上月份
for (int i = 11; i >= m - 1; i--)
{
sum += mon[i];
}
//加上闰年多一天
if (isleap())
{
if (m <= 2)
{
sum += 1;
}
}
std::cout << sum << std::endl;
sum = sum % 7;
sum = 7 - sum;
}
return sum;
}
void show()
{
std::cout << " " << m << "月份 " << std::endl;
std::cout << "星期一 星期二 星期三 星期四 星期五 星期六 星期天 " << std::endl;
int qi = count();
for (int i = 0; i <qi; i++)
{
std::cout << " ";
}
int mon[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (isleap() && m == 2)
{
mon[2 - 1] = 29;
}
for (int i = 1; i <= mon[m - 1]; i++)
{
std::cout << " " << i<< " ";
if (i < 10)
{
std::cout << " ";
}
qi++;
if (7== qi)
{
std::cout <<std::endl;
std::cout << " " << std::endl;
qi = 0;
}
}
std::cout << "\n\n" << std::endl;
}
};
void main()
{
calendar calen(2000, 2);
calendar calen1(2016, 2);
calen.show();
calen1.show();
system("pause");
}
class calendar
{
//基准为2000,1,1,星期六
int y;
int m;
int d;
int sum ;
public:
calendar(int year, int month)
{
y = year;
m = month;
}
//是否闰年
int isleap()
{
if ((0 == y % 400) || (y % 100 != 0 && 0 == y % 4))
{
return 1;
}
return 0;
}
int count()//计算2016,4
{
sum = 0;
int mon[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
//加上年份
if (y >= 2001)
{
for (int i = 2001; i < y; i++)
{
if ((0 == i % 400) || (i % 100 != 0 && 0 == i % 4))
{
sum += 366;
sum %= 7;
}
else
{
sum += 365;
sum %= 7;
}
}
//加上月份
for (int i = 0; i < m - 1; i++)
{
sum += mon[i];
}
//加上闰年多一天
if (isleap())
{
if (m >= 3)
{
sum += 1;
}
}
sum = sum % 7 ;
}
else
{
for (int i = y+1; i<2001; i++)
{
if ((0 == i % 400) || (i % 100 != 0 && 0 == i % 4))
{
sum += 366;
sum %= 7;
}
else
{
sum += 365;
sum %= 7;
}
}
//加上月份
for (int i = 11; i >= m - 1; i--)
{
sum += mon[i];
}
//加上闰年多一天
if (isleap())
{
if (m <= 2)
{
sum += 1;
}
}
std::cout << sum << std::endl;
sum = sum % 7;
sum = 7 - sum;
}
return sum;
}
void show()
{
std::cout << " " << m << "月份 " << std::endl;
std::cout << "星期一 星期二 星期三 星期四 星期五 星期六 星期天 " << std::endl;
int qi = count();
for (int i = 0; i <qi; i++)
{
std::cout << " ";
}
int mon[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (isleap() && m == 2)
{
mon[2 - 1] = 29;
}
for (int i = 1; i <= mon[m - 1]; i++)
{
std::cout << " " << i<< " ";
if (i < 10)
{
std::cout << " ";
}
qi++;
if (7== qi)
{
std::cout <<std::endl;
std::cout << " " << std::endl;
qi = 0;
}
}
std::cout << "\n\n" << std::endl;
}
};
void main()
{
calendar calen(2000, 2);
calendar calen1(2016, 2);
calen.show();
calen1.show();
system("pause");
}
相关文章推荐
- 用C++写一个日历程序,要求输入年份,显示全年的日历
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归
- 笔试题:编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,自定义以为数组,删除一维数组中所有相同的数,使之只剩一个。数组中的数按由小到大顺序排列,并显示运行所用时间。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 第四题(迅雷笔试题):编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 编写一个计算某个月份的天数程序,请用if-else条件语句实现。要求根据用户输入的月份,判断出月份所包含的天数。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 定义一个结构体变量(包括年、月、日),编写程序,要求输入年月日,程序能够计算并输出改日是本年中的第几天。注意闰年问题。(switch语句)