Создать календарь на год - C (СИ)
Формулировка задачи:
помогите пожалуйста составить календарь,так что бы при вводе года на экран выводился календарь на весь год.
Решение задачи: «Создать календарь на год»
textual
Листинг программы
#include <stdio.h> #include <time.h> int main() { time_t now; struct tm * timeinfo; int year, m, i, j; char* month[] = { "January","February", "March","April", "May","June", "July", "August","September","October", "November","December"}; printf ("YEAR: "); scanf ("%d",&year); time (&now); //get current timeinfo and modify it to the user's choice timeinfo = localtime (&now); timeinfo->tm_year = year-1900; //years numerated from 1900 timeinfo->tm_mon = 0; m =-1; while(m<12) { for(i=1; i<33; i++) //year days with "overload" { timeinfo->tm_mday = i; mktime (timeinfo); //call mktime: the whole timeinfo for the day will be set if(timeinfo->tm_mon > m) //"end month" event, "overload" processing { printf("\n %s\n",month[timeinfo->tm_mon]); printf("<br>\n"); printf(" Su Mo Tu We Th Fr Sa\n"); printf("<br>\n"); for(j=0;j<(timeinfo->tm_wday);j++) printf(" "); m++; break; } if (m==11 && timeinfo->tm_mon ==0) //"end year" event { m++; break; } printf("%4d",timeinfo->tm_mday); //routine if(timeinfo->tm_wday==6)//"end week" event printf("\n"); } } getchar();getchar(); return 0; }
Объяснение кода листинга программы
Вот список действий, которые выполняются в коде:
- Подключение необходимых библиотек
- Инициализация переменных: year, m, i, j, timeinfo
- Создание массива month с названиями месяцев
- Ввод года с клавиатуры и сохранение его в переменной year
- Получение текущего времени и сохранение его в переменной now
- Приведение текущего времени к выбранному пользователем году
- Инициализация переменной m значением -1
- Запуск цикла while, который выполняется 12 раз
- Внутри цикла while запускается внутренний цикл for, который выполняется 32 раза
- Внутри внутреннего цикла for вычисляется день месяца и сохраняется в переменной timeinfo->tm_mday
- Вызов функции mktime для установки полного времени для текущего дня
- Проверка, если месяц в timeinfo больше текущего месяца m
- Если условие выполняется, то выполняется следующие действия: a. Вывод названия текущего месяца на экран b. Вывод пустой строки c. Вывод дня недели (времяinfo->tm_wday) в виде пробелов d. Увеличение значения m на 1 e. Выход из внутреннего цикла for с помощью оператора break
- Если условие выполняется (m==11 && timeinfo->tm_mon ==0), то выполняется следующие действия: a. Увеличение значения m на 1 b. Выход из внутреннего цикла for с помощью оператора break
- Вывод номера дня месяца в формате DD в виде пробелов
- Если времяinfo->tm_wday равно 6 (суббота), то выполняется вывод символа новой строки
- В конце программы добавлен вызов функции getchar() для обработки ввода пользователя, затем вызов функции getchar() и возврат 0, что означает успешное завершение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д