将2D阵列集成到日历打印程序中

Integrating a 2D Array into a Calendar Printing Program

本文关键字:打印 程序 日历 2D 阵列 集成      更新时间:2024-05-24

我决定开始从C++教科书中学习自己的代码,其中一个挑战是创建一个程序,以这种方式打印给定年份的日历,每个月:

-------------January-------------
Sun  Mon  Tue  Wed  Thu  Fri  Sat
1    2
3    4    5    6    7    8    9
10   11   12   13   14   16   17
18   19   20   21   22   23   24
25   26   27   28   29   30   31

我在Microsoft Visual Studio中编写了整个程序,但另一个挑战是使用以下数组将来自getMonthName和dayNumber函数的两个1D数组的数据转换为一个具有2D数组的函数:

// the first number is the month and second number is the last day of the month. 
int yearly[12][2] = 
{{1,31},{2,28},{3,31},{4,30},{5,31},{6,30},{7,31},{8,31},{9,30},{10,31},{11,30},{12,31}}; 

这本教科书没有很好地解释2D阵列,但我知道基本知识。我只是不知道如何引用数组的内容。我可以分配所有的";月份编号";数组的值到一个变量,就像我在这里为变量monthNumber所做的那样,然后从那里开始?如果有人能提供一个如何做到这一点的例子,我将不胜感激。我正在努力吸收尽可能多的信息,所以如果你能解释你的例子是如何运作的,我会欣喜若狂。

#include <iomanip>
#include <string>
#include <iostream>
using namespace std;

int dayNumber(int day, int month, int year)
{
static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1,
4, 6, 2, 4 };
year -= month < 3;
return (year + year / 4 - year / 100 +
year / 400 + t[month - 1] + day) % 7;
}

string getMonthName(int monthNumber)
{
string months[] = { "January", "February", "March",
"April", "May", "June",
"July", "August", "September",
"October", "November", "December"};
return (months[monthNumber]);
}
//number of days in month
int numberOfDays(int monthNumber, int year)
{
// january
if (monthNumber == 0)
return (31);
// february
if (monthNumber == 1)
return (28);
// march
if (monthNumber == 2)
return (31);
// april
if (monthNumber == 3)
return (30);
// may
if (monthNumber == 4)
return (31);
// june
if (monthNumber == 5)
return (30);
// july
if (monthNumber == 6)
return (31);
// august
if (monthNumber == 7)
return (31);
// september
if (monthNumber == 8)
return (30);
// october
if (monthNumber == 9)
return (31);
// november
if (monthNumber == 10)
return (30);
// december
if (monthNumber == 11)
return (31);
}
// display calendar function
void printCalendar(int year)
{
printf ("         Calendar - 2021", year);
int days;
// day from 0 - 6
int current = dayNumber(1, 1, year);

for (int i = 0; i < 12; i++)
{
days = numberOfDays(i, year);
// current month display
printf("n  ------------%s-------------n",
getMonthName(i).c_str());
//columns
printf("  Sun  Mon  Tue  Wed  Thu  Fri  Satn");
// spaces
int k;
for (k = 0; k < current; k++)
printf("     ");
for (int j = 1; j <= days; j++)
{
printf("%5d", j);
if (++k > 6)
{
k = 0;
printf("n");
}
}
if (k)
printf("n");
current = k;
}
return;
}
// main function
int main()
{
int year = 2021;
printCalendar(year);
return (0);
}

如果你需要更多信息,请告诉我,我很乐意提供更多。

我声明了一个全局变量int yearly[12][2];

代码段第90行:

for (int i = 0; i < 12; i++)
{
days = numberOfDays(i, year);
yearly[i][0] = i; //month
yearly[i][1] = days;//days
... ...

for循环执行12次,每个i对应一个月。

Yearly[i][0]是月份,Yearly[i][1]是月份的天数。

2D阵列的样子:

column
Row 0 [0][1]
1 [0][1]
2 [0][1]
... ...
11[0][1]

打印2D阵列的示例:

for (int Row= 0; Row< 12; Row++)
{
std::cout << "{";
for (int column= 0; column< 2; column++)
{
std::cout << yearly[Row][column]<<",";
}
std::cout << "}"<<std::endl;
}