信息設(shè)計(jì)網(wǎng)站百度網(wǎng)盤(pán)服務(wù)電話6988
目錄😋
任務(wù)描述
相關(guān)知識(shí)
1、switch 結(jié)構(gòu)基本語(yǔ)法
2、示例代碼及解釋
3、使用注意事項(xiàng)
4、判斷閏年的條件
編程要求
測(cè)試說(shuō)明
通關(guān)代碼
測(cè)試結(jié)果
任務(wù)描述
本關(guān)任務(wù):編寫(xiě)程序?qū)崿F(xiàn):從鍵盤(pán)上輸入一個(gè)年月日(以空格或回車(chē)分隔),要求出該天是該年的第幾天(注意判斷該年是否是閏年)。
相關(guān)知識(shí)
為了完成本關(guān)任務(wù),你需要掌握:
- switch 結(jié)構(gòu)的使用
- 判斷閏年的條件
1、switch 結(jié)構(gòu)基本語(yǔ)法
在 C語(yǔ)言?中,
switch
語(yǔ)句的基本形式如下:switch (expression) {case constant_expression_1:// 語(yǔ)句序列1break;case constant_expression_2:// 語(yǔ)句序列2break;// 可以有更多的case分支default:// 默認(rèn)語(yǔ)句序列break; }
expression
:這是一個(gè)整型或枚舉類(lèi)型的表達(dá)式。在 C++ 中,switch
表達(dá)式的類(lèi)型通常是int
、char
(本質(zhì)上也是一種小整數(shù)類(lèi)型)或者枚舉類(lèi)型。例如,int num = 3; switch(num)
是合法的,其中num
是一個(gè)整數(shù)變量。constant_expression
:每個(gè)case
后面跟著一個(gè)常量表達(dá)式。這個(gè)常量表達(dá)式的值必須是在編譯時(shí)就能確定的整型或枚舉類(lèi)型的值,并且在同一個(gè)switch
語(yǔ)句中,不同case
后的常量表達(dá)式的值必須互不相同。例如,case 1
、case 'a'
(字符a
的 ASCII 值是 97,也是一個(gè)整數(shù))、case MyEnum::VALUE
(MyEnum
是一個(gè)枚舉類(lèi)型)都是合法的。break
:當(dāng)執(zhí)行到break
語(yǔ)句時(shí),程序會(huì)跳出switch
語(yǔ)句塊,繼續(xù)執(zhí)行switch
語(yǔ)句后面的代碼。如果沒(méi)有break
語(yǔ)句,程序會(huì)繼續(xù)執(zhí)行下一個(gè)case
分支的代碼,這種現(xiàn)象稱為 “fall - through”(貫穿),在某些情況下可能是有意為之,但在大多數(shù)情況下可能會(huì)導(dǎo)致意外的行為。default
:default
分支是可選的。當(dāng)expression
的值與所有case
后的常量表達(dá)式的值都不匹配時(shí),就會(huì)執(zhí)行default
分支中的代碼。
2、示例代碼及解釋
下面是一個(gè)簡(jiǎn)單的示例,根據(jù)用戶輸入的整數(shù)來(lái)輸出不同的星期幾:
#include <stdio.h> int main() {int day;printf("請(qǐng)輸入一個(gè)1 - 7之間的整數(shù)來(lái)表示星期幾:");scanf("%d", &day);switch (day) {case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf("星期三\n");break;case 4:printf("星期四\n");break;case 5:printf("星期五\n");break;case 6:printf("星期六\n");break;case 7:printf("星期日\(chéng)n");break;default:printf("輸入錯(cuò)誤,請(qǐng)輸入1 - 7之間的整數(shù)。\n");break;}return 0; }
在這個(gè)示例中:
- 首先通過(guò)
scanf
函數(shù)從用戶那里獲取一個(gè)整數(shù)day
。- 然后
switch
語(yǔ)句根據(jù)day
的值進(jìn)行判斷。如果day
的值為 1,就會(huì)執(zhí)行case 1
分支中的代碼,輸出 “星期一”,然后遇到break
語(yǔ)句跳出switch
語(yǔ)句塊。如果day
的值為其他合法的值(2 - 7),就會(huì)執(zhí)行相應(yīng)case
分支中的代碼。如果day
的值不在 1 - 7 這個(gè)范圍內(nèi),就會(huì)執(zhí)行default
分支中的代碼,提示用戶輸入錯(cuò)誤。
3、使用注意事項(xiàng)
- 避免忘記
break
語(yǔ)句:如果忘記添加break
語(yǔ)句,可能會(huì)導(dǎo)致程序執(zhí)行的結(jié)果不符合預(yù)期。例如:int num = 2; switch (num) {case 1:printf("One");case 2:printf("Two");case 3:printf("Three");break; }
在這個(gè)例子中,因?yàn)?code>num = 2,程序會(huì)先執(zhí)行
case 2
分支中的printf("Two");
,但是由于沒(méi)有break
語(yǔ)句,程序會(huì)繼續(xù)執(zhí)行case 3
分支中的printf("Three");
,最終輸出 “TwoThree”。
- 正確使用數(shù)據(jù)類(lèi)型:
switch
表達(dá)式和case
后的常量表達(dá)式都應(yīng)該是整數(shù)類(lèi)型(包括字符類(lèi)型)。如果使用其他類(lèi)型(如浮點(diǎn)數(shù)),編譯器會(huì)報(bào)錯(cuò)。例如,double num = 3.0; switch(num)
是不合法的。- 合理使用
default
分支:default
分支可以用于處理意外情況或者未預(yù)料到的輸入。在一些復(fù)雜的程序中,它可以作為一種錯(cuò)誤處理或者默認(rèn)行為的機(jī)制。但是在某些情況下,如果已經(jīng)確定了所有可能的輸入情況,也可以不使用default
分支。
4、判斷閏年的條件
- 能被4 整除但不能被 100 整除的年是閏年;
- 能被 400 整除的年也是閏年。
編程要求
根據(jù)提示,在右側(cè)編輯器補(bǔ)充代碼,根據(jù)輸入的年份計(jì)算并輸出程序結(jié)果。
測(cè)試說(shuō)明
平臺(tái)會(huì)對(duì)你編寫(xiě)的代碼進(jìn)行測(cè)試:
測(cè)試輸入:
2012 5 30
預(yù)期輸出:
sum days of 2012 - 5 - 30 : 151
?測(cè)試輸入:
2023 9 12
預(yù)期輸出:
sum days of 2023 - 9 - 12 : 255
開(kāi)始你的任務(wù)吧,祝你成功!
通關(guān)代碼
#include<stdio.h>
int main()
{int year,month,day,days=0 ;//printf("please input year-month-day:" ) ;/*********Begin*********/scanf("%d %d %d", &year, &month, &day);switch(month){case 12:days += 30;case 11:days += 31;case 10:days += 30;case 9:days += 31;case 8:days += 31;case 7:days += 30;case 6:days += 31;case 5:days += 30;case 4:days += 31;case 3:days += 28;if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){days += 1;}case 2:days += 31;case 1:days += day;break;return 0;}/*********End**********/ printf( "sum days of %d - %d - %d : %d" ,year,month,day, days ) ;return(0);
}