下記の int getWeekOf1からmain最終行までのプログラムのやっていることを教えてください。
追記:このプログラムは自分の前回の質問で提示していただいたプログラムです。
#include <stdio.h> #include <string.h> #define YEAR 2021 #define MONTH 1 #define WEEKof1 5 #define MON_WIDTH 30 enum { ROW = 3, COL = (12/ROW) }; int dayOfMonth[2][12] = { {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} }; int leapYear(int year) { return (year % 4) == 0; } void getCalender(char s[8][MON_WIDTH], int y, int m, int wof) { int cal[6][7]; int dom = dayOfMonth[leapYear(y)][m - 1]; int i, d; for (i = 0; i < wof; i++) cal[0][i] = 0; for (d = 0; d < dom; d++) { int row = (wof + d) / 7; int col = (wof + d) % 7; cal[row][col] = d + 1; } for (i = wof + dom; i < 7 * 6; i++) { int row = i / 7; int col = i % 7; cal[row][col] = 0; } sprintf(s[0], " %4d年%2d月 ", y, m); sprintf(s[1], " 日 月 火 水 木 金 土"); for (i = 0; i < 6; i++) { s[i + 2][0] = '\0'; char tmp[10]; for (d = 0; d < 7; d++) { if (cal[i][d] == 0) sprintf(tmp, " "); else sprintf(tmp, " %2d", cal[i][d]); strcat(s[i + 2], tmp); } } } int getWeekOf1(int year,int month,int this_year_wof1) { int m; int serial_day = 0; int wof1; for (m = 1; m < month;m++){ serial_day += dayOfMonth[leapYear(year)][m-1]; } wof1 = (serial_day + this_year_wof1) % 7; return wof1; } void main(void) { char calender[12][8][MON_WIDTH]; int i,row,col; int m; int wof1; for (m = 1; m <= 12; m++){ wof1 = getWeekOf1(YEAR,m,WEEKof1); getCalender(calender[m-1], YEAR, m, wof1); } for (row = 0;row < ROW;row++){ for (int i = 0; i < 8; i++) { for (col = 0; col < COL; col++){ printf("%s ",calender[row*COL+col][i]); } printf("\n"); } } }
回答2件
あなたの回答
tips
プレビュー