題組內容
四、請寫出下列 C 語言算式: (每小題 15 分,共 30 分)
⑴假設 month 為整數變數。請利用三元運算子寫一個 C 語言算式(expression) 。假 如 month 的值為一個 31 天的月份則算式值等於 31,假如 month 的值為一個 30 天 的月份則算式值等於 30,假如 month 的值等於 2,則算式值等於 28,假如 month 的值小於 1 或是大於 12,算式值等於-1。
詳解 (共 4 筆)
詳解
#include
#include
int main(void)
{
int month;
int day;
scanf("%d", &month);
if(month>=1 && month <=12)
{
if(month == 2)
{
day = 28;
printf("%d", day);
}
else if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
{
day = 31;
printf("%d", day);
}
else
{
day = 30;
printf("%d", day);
}
}
else
{
day = -1;
printf("%d", day);
}
return 1;
}
詳解
這題重點應該是三元運算子(?:)
#include
int main(void) {
int day;
int month;
for(int i = 0 ; i < 14 ;i++){
month = i;
day = (month<1 || month>12 ? -1 :
(month == 2 ? 28 :
(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month== 12 ? 31 :30)));
printf("%d : %d\n", month, day);
}
return 0;
}
輸出為:
0 : -1
1 : 31
2 : 28
3 : 31
4 : 30
5 : 31
6 : 30
7 : 31
8 : 31
9 : 30
10 : 31
11 : 30
12 : 31
13 : -1
詳解
int month;
int days;
if (month>=1 && month<=12){
if(month ==2){
days=28;
}else{
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
days=31;
}else{
days=30
}
}
}else{
days=-1;
}
return days;
詳解
在C語言中,使用三元運算子? :可以實現條件選擇。對於給定的month值,我們可以使用嵌套的三元運算子來實現你的要求。下面是根據你的描述寫出的表達式:
c
Copy code
int days = (month < 1 || month > 12) ? -1 :
(month == 2) ? 28 :
(month == 4 || month == 6 || month == 9 || month == 11) ? 30 :
31;
這個表達式首先檢查month是否在有效的月份範圍內(1至12),如果不是,則結果為-1。如果month等於2(二月),則結果為28天(這裡沒有考慮閏年的情況)。接著檢查month是否為4、6、9或11月,這些月份有30天。如果上述條件都不滿足,則假定month為其他月份,即有31天。
Copy code
int days = (month < 1 || month > 12) ? -1 :
(month == 2) ? 28 :
(month == 4 || month == 6 || month == 9 || month == 11) ? 30 :
31;
這個表達式首先檢查month是否在有效的月份範圍內(1至12),如果不是,則結果為-1。如果month等於2(二月),則結果為28天(這裡沒有考慮閏年的情況)。接著檢查month是否為4、6、9或11月,這些月份有30天。如果上述條件都不滿足,則假定month為其他月份,即有31天。
注意:這個表達式沒有考慮閏年二月可能有29天的情況,如果需要考慮閏年,則需要添加額外的邏輯來處理。