打印英文年历C语言函数,C语言打印年历
voidshow_year(int year)
{inti,j,k,t,n; // 用來輔助計(jì)數(shù)int table[24][21] = {0}; // 年歷數(shù)組int month_day[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; // 每月上限天數(shù)if ((0 == year%4 || 0 == year%400) && 0 != year%100) //閏年檢查,如果是閏年,2月上限天數(shù)改為29
{
month_day[2] = 29;
}
printf ("******************\n");
printf ("%d \n", year);
printf ("******************\n");for (i=0; i<12; i++) // 為了使邏輯更加清晰,一次循環(huán)只完成一個(gè)月的日期填寫,i為當(dāng)前月份
{n=cal_first(i+1); // n為當(dāng)前月份第一天的星期數(shù),cal_first函數(shù)中的月數(shù)必須為1~12,for (j=(i/3)*6; j3)*6+6; j++) // 所以這里傳參時(shí)+1,j用來根據(jù)月數(shù)控制每個(gè)月在年歷數(shù)組中的第一維坐標(biāo)
{ // 坐標(biāo)(縱坐標(biāo))的位置,同樣的,用來根據(jù)月數(shù)控制每個(gè)月在年歷數(shù)組中for (k=(i%3)*7; k3)*7+7; k++) // 第二維坐標(biāo)(橫坐標(biāo))的位置
{
t= (j%6)*7 + k%7 - n + 2; // t用來臨時(shí)記錄當(dāng)前位置應(yīng)該填入年歷數(shù)組的值,為了簡化邏輯,這里通過if (0 >=t) // 數(shù)學(xué)計(jì)算記錄每一個(gè)位置應(yīng)填入的值,(j%6)*7 + k%7計(jì)算出的值是本
{ // 月的第幾個(gè)位置,-n+2就會(huì)計(jì)算出當(dāng)前格內(nèi)正確的日期。這樣做會(huì)導(dǎo)致得出continue; // 負(fù)數(shù)或0,或炒熟每月天數(shù)上限,我們用if + continue將其跳過,這樣
} // 不正確的日期就依然是年歷數(shù)組初始化時(shí)的0if (t <=month_day[i])
{
table[j][k]=t;
}else{continue;
}
}
}
}for (i=0; i<24; i++) // 至此,年歷數(shù)組已經(jīng)全部填好,接下來是打印環(huán)節(jié),相信已經(jīng)比較好理解了
{ // 每隔6行打印標(biāo)頭,7列多打印幾個(gè)空格,遇到數(shù)組中為0則同樣打印空格if (0 ==i)
{
printf ("Jan Feb Mar\n");
printf ("Mon Tue Wen Thu Fir Sat Sun Mon Tue Wen Thu Fir Sat Sun Mon Tue Wen Thu Fir Sat Sun\n");
}if (6 ==i)
{
printf ("Apr May Jun\n");
printf ("Mon Tue Wen Thu Fir Sat Sun Mon Tue Wen Thu Fir Sat Sun Mon Tue Wen Thu Fir Sat Sun\n");
}if (12 ==i)
{
printf ("Jul Agu Sep\n");
printf ("Mon Tue Wen Thu Fir Sat Sun Mon Tue Wen Thu Fir Sat Sun Mon Tue Wen Thu Fir Sat Sun\n");
}if (18 ==i)
{
printf ("Oct Nov Dec\n");
printf ("Mon Tue Wen Thu Fir Sat Sun Mon Tue Wen Thu Fir Sat Sun Mon Tue Wen Thu Fir Sat Sun\n");
}for (j=0; j<21; j++)
{if (7 == j || 14 ==j)
{
printf (" ");
}if (0 ==table[i][j])
{
printf (" ");continue;
}
printf ("%4d", table[i][j]);
}
printf ("\n");
}
}
總結(jié)
以上是生活随笔為你收集整理的打印英文年历C语言函数,C语言打印年历的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 调研AutoGluon数据处理与Tabu
 - 下一篇: [C#/DevExpress]VS201