特定の年の月間カレンダーを印刷する
トピック
2008年1月1日は火曜日です。2008年がうるう年かどうかを判断するには、任意の月を入力し、その年のその月のカレンダーを印刷します。最初の列に月を入れて、週ごとに配置する必要があります。
分析
まず、調査されているのはうるう年の判断です。
- 1、能整除400的。 year%400==0
- 2、能整除4同时不能整除100 。year%4==0&&year%100!=0
2番目:2008年1月1日は火曜日です。つまり、7を均等に割ると余りは2になります。このとき、日数を数えるときは、2に基づいて開始して正しい週を計算する必要があります。
検査ポイントはこの2つだと思います。
うるう年を考慮する必要があるのはなぜですか?うるう年は2月に29日、通常の年に28日なので、これは考慮事項です。
特定のコードを見てみましょう。
コード(ソースコードはここをクリック)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int days(int flag, int month);
void fun6(){
int year = 2008; //这里的月份按照题设是给定了,可以定义输入
int flag = 0;
int month, week, day = 2;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
flag = 1;
printf("2008 year is yes\n");
}
printf("please input 1-12\n");
scanf("%d", &month);
while (1) { // 判断输入的月份是否正确
if (month > 12 || month < 0) {
printf("please input 1-12\n");
scanf("%d", &month); }
else {
break;
}
}
for (int i = 1; i <= month - 1; i++) {
day += days(flag, i);
}
printf("\n");
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "Mon", "Tuse", "Wed", "Thur", "Fri", "Sat", "Sun");
int size = days(flag, month);
for (int i = day, j = 1; i <= day + size && j <= size; i++, j++) {
week = i % 7;
if (i == day && week != 1) {
if (week == 0) {
printf("\t\t\t\t\t");
}
for (int i = 0; i < week - 2; i++) {
printf("\t");
}
}
switch (week) {
case 1:
printf("%d", j);
break;
case 2:
case 3:
case 4:
case 5:
case 6:
printf("\t%d", j);
break;
case 0:
printf("\t%d\n", j);
break;
default:
break;
}
}
}
// 计算天数
int days(int flag, int month){
switch (month) {
case 1:
case 5:
case 3:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
if (flag == 1) {
return 29;
}else {
return 28;
}
}
}
int main(int argc, char const *argv[]){
fun6();
return 0;
}
効果
2に入るとき
効果を確認するには5を入力してください
2019年の大学院試験での具体的な質問は覚えていません。おそらく似ています。当時、診察室は漠然としていて、時間が足りず完璧ではなかったので、今日はそれについて書きましょう。
ご不明な点がございましたら、メッセージを残してご相談ください。より良い解決策がございましたら、メッセージを残してください。