2015年6月6日 星期六

d067:文文的求婚--續集 (1 行版) (18)

d067: 文文的求婚--續集 (1 行版) (18)

更新時間:2016/12/20
內容
  承 a004,珊珊終於學成歸國了,文文的考驗時刻也到了。走出了迎客大廳,珊珊問:「What type of the year was I born in?」文文很有自信的回答:「閏年!」可是珊珊卻說:「No, It was a LEAP YEAR!」看來文文要娶到珊珊,還得先把英文練一練。
輸入說明
  輸入只有一行,其中含有一個正整數 y,代表珊珊生日的西元年份。
輸出說明
  若 y 是閏年,請輸出「a leap year」,否則請輸出「a normal year」。
範例輸入
  1992
範例輸出
  a leap year
提示
背景知識
  if 陳述式



想一想,再看解答~


我的解題想法
  使用邏輯判斷式 if,判斷「西元年被4整除且不被100整除,或被400整除」者即為閏年。

♠使用判斷式 if-else 的解法
程式碼
#include <stdio.h>
int main(void){
    int y;
    scanf("%d",&y); 
    if(((y%4==0)&&(y%100!=0))||(y%400==0)){
        printf("a leap year");
    }else{
        printf("a normal year");
    }
    return 0;
}
程式碼解析
#1:引入標準輸入/輸出串流。
#2:主程式開始,回傳引數int,沒有參數。
#3:宣告1個整數(int)變數「y」,範圍–2,147,483,648 到 2,147,483,647。
#4:從標準輸入讀取格式化數據。讀取1個整數(%d),指定值給「y」。
#5:邏輯判斷式 if 開始。判斷 是不是閏年((y%4==0)&&(y%100!=0))||(y%400==0)。
#6:將格式化數據顯示到標準輸出。輸出字串「a leap year」。
#7:邏輯判斷 else。
#8:將格式化數據顯示到標準輸出。輸出字串「a normal year」。
#9:邏輯判斷式 if 結束。
#10:主程式回傳整數「0」。
#11:主程式結束。





♠使用 三元運算子 ? : 的解法
程式碼
#include <stdio.h>
int main(void){
    int y;
    scanf("%d",&y);
    printf("%s",((y%4==0)&&(y%100!=0))||(y%400==0) ? "a leap year" : "a normal year");
    return 0;
}
程式碼解析
#1:引入標準輸入/輸出串流。
#2:主程式開始,回傳引數int,沒有參數。
#3:宣告1個整數(int)變數「y」,範圍–2,147,483,648 到 2,147,483,647。
#4:從標準輸入讀取格式化數據。讀取1個整數(%d),指定值給「y」。
#5:將格式化數據顯示到標準輸出。輸出1個字串(%s)「((y%4==0)&&(y%100!=0))||(y%400==0) ? "a leap year" : "a normal year"」。
如果 ((y%4==0)&&(y%100!=0))||(y%400==0) 成立,則輸出 a leap year ;否則輸出 a normal year 。
#6:主程式回傳整數「0」。
#7:主程式結束。