要求:輸入年份輸出這一年的日歷
注意:公元1900年一月一日是星期一,這一年是平年
思路:獲取輸入的年份y,首先獲取從公元1900年到(y-1)年
的天數,然后獲得該年份的第一天是星期幾,進行輸出。
這次實例,我花費了很長的時間,最后發現錯誤的原因出在在求某一年是閏年還是平年的時候,我沒有田間return語句,也就是沒有返回值,真是醉了。
我感覺這次我寫代碼的時候一點感覺都沒有。哎,真是的,一顆老鼠屎,壞了一鍋粥啊。
下面是我的代碼:
~~~
#include <stdio.h>
//從1900年開始計算天數
#define BEGIN 1900
/**
* 要求:輸入年份輸出這一年的日歷
* 注意:公元1900年一月一日是星期一,這一年是平年
* 思路:獲取輸入的年份y,首先獲取從公元1900年到(y-1)年
* 的天數,然后獲得該年份的第一天是星期幾,進行輸出。
*
* @brief main
* @return
*/
int isRun(int year);
int main(void)
{
//獲取用戶輸入的年數
int year;
//存放從公元1年到year-1年的天數
int days = 0;
//用于保存星期幾
char **weeks[] = {"MON","TUE","WED","THU","FRI","SAT","SUN"};
//二維數組,第一行用于存放閏年的月份
//第二行用于存放平年的月份
int runPing[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},
};
printf("Please enter the year:\n");
scanf("%d",&year);
int m;
/**計算從1900年到(year-1)的天數 **/
for(m = BEGIN;m < year;m++){
if(isRun(m)){
days += 366;
}else{
days += 365;
}
}
int which = 0;
//判斷year這一年是閏年還是平年
if(isRun(year)){
which = 1;
}else{
which = 0;
}
//進行輸出
for(m = 0;m < 12;m++){
printf("MONTH:%d\n",m+1);
//對7進行取余就能求得某一天是星期幾
int week = days % 7;
if(week == 0){
week = 7; //如果余數是0,則為星期日
}else{
week += 1; //如果余數不是0,則余數+1,就是星期幾
}
int i;
//對上一個月的進行制表操作
for(i = 0;i < 7;i++){
printf("%s\t",weeks[i]);
}
printf("\n");
for(i = 1;i<week;i++){
printf("\t");
}
int n = 0;
//輸入某一個月的日期
for(n = 0;n < runPing[which][m];n++){
//在需要的時候進行換行操作
if(n%7 == (7-week+1)){
printf("\n");
}
printf("%d\t",n+1);
}
printf("\n\n");
days += runPing[which][m];
}
return 0;
}
/**
* @brief isRun 用于判斷年year是否是閏年
* @param year 被判斷的那一年
* @return
* 0 - 表示是平年
* 1 - 表示是閏年
*/
int isRun(int year){
int run = 0;
/**
* 閏年的判斷條件:
* 1:能夠被400整除
* 2:能夠被4整除,但是不能被100整除
*/
if(((year%4==0)&&(year%100!=0)) || (year%400==0)){
run = 1;
}else{
run = 0;
}
return run;
}
~~~
下面是我的程序的輸出:

- 前言
- 實例一:HelloWorld
- scanf函數學習
- 實數比較
- sizeof()保留字獲取類型的大小
- 自增/自減學習
- C學習if條件判斷和for循環
- C實現的九九乘法表
- C實現一個比較簡單的猜數游戲
- 使用C模擬ATM練習switch..case用法
- 記錄一個班級的成績練習一維數組
- C數組實現矩陣的轉置
- C二維數組練習
- 利用數組求前n個質數
- C實現萬年歷
- C實現數組中元素的排序
- C實現任意進制數的轉化
- C判斷一個正整數n的d進制數是否是回文數
- C使用遞歸實現前N個元素的和
- 鋼材切割問題
- 使用指針比較整型數據的大小
- 指向數組的指針
- 尋找指定元素
- 尋找相同元素的指針
- 整數轉換成羅馬數字
- 字符替換
- 從鍵盤讀入實數
- C實現字符行排版
- C實現字符排列
- C實例--判斷一個字符串是否是回文數
- 通訊錄的輸入輸出
- 撲克牌的結構定義
- 使用“結構”統計學生成績
- 報數游戲
- 模擬社會關系
- 統計文件中字符個數
- C實現兩個文件的內容輸出到同一個屏幕