根據(jù)收集到的數(shù)據(jù),1017,1018也是錯誤率比較高,容易卡住的題目。
在講題目,之前,有必要先把if這一邏輯判斷的條件先給大家理清一下。
首先先看兩個或者多個if同用的情況:
if (條件1)
{
//語句1
}
if (條件2)
{
//語句2
}
這種格式中,程序會依次判斷條件1和條件2是否成立并根據(jù)結(jié)果決定是否執(zhí)行語句1和語句2,也就是說,第一個 if 塊和第二個 if 塊沒有影響。(多個if同用的情況以此類推)
另一種情況是if和else if共用的情況
if (條件1)
{
//語句1
}
else if (條件2)
{
//語句2
}
if 塊和 else if 塊本質(zhì)上是互斥的!也就是說,一旦語句1得到了執(zhí)行,程序會跳過 else if 塊,else if 塊中的判斷語句以及語句2一定會被跳過;同時語句2的執(zhí)行也暗含了條件1判斷失敗和語句1沒有執(zhí)行;當(dāng)然還有第3個情況,就是條件1和條件2都判斷失敗,語句1和語句2都沒有得到執(zhí)行。
簡單來說,第一種情況是兩種條件都會進行判斷,而第二種情況只要其中一種情況成立,另外一種情況必定失敗,有判斷的先后順序。
-
兩個if是可以先后執(zhí)行的,單 if...else if 就只能執(zhí)行一個!
如果可以把上面的理論了解了我們就可以繼續(xù)來看接下來的題目
1017:判斷正整數(shù)位數(shù)
- 題目描述
給定一個不多于5位的正整數(shù),判斷它是幾位數(shù),并輸出。 - 輸入
一個不多于5位的正整數(shù)。 - 輸出
輸出正整數(shù)的位數(shù),單獨占一行。 - 參考代碼:
#include<stdio.h>
main()
{
int a;
scanf("%d",&a);
if(a/10000>=1)
printf("5");
if(a/1000>=1&&a/1000<10)
printf("4");
if(a/100>=1&&a/100<10)
printf("3");
if(a/10>=1&&a/10<10)
printf("2");
if(a/1>=1&&a/1<10)
printf("1");
}
- 代碼解析:
此處代碼是我以前寫的沒有經(jīng)過優(yōu)化的代碼。雖然看起來可讀性較差,但它明顯符合了上面解釋的第一種情況,多種if共用的情況。每個if單獨判斷,互不影響。
這里的代碼,是把每一位數(shù)的考慮都算在內(nèi)了,也就是把每一位數(shù)的限制都做到位,這樣就不會影響其他if的判斷。至于如何判斷它是幾位數(shù),這屬于數(shù)學(xué)范圍的范疇,在此不做討論,每個人解法不同,如果沒有思路的也可以參考往期的文章
1018: 奇數(shù)偶數(shù)
- 題目描述
輸入一個整數(shù),判斷該數(shù)是奇數(shù)還是偶數(shù)。 - 輸入
輸入整數(shù)n。 - 輸出
如果該數(shù)是奇數(shù)就輸出“odd”,偶數(shù)就輸出“even”(輸出不含雙引號)。 - 參考代碼:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n%2==0)
printf("even\n",n);
else
printf("odd\n",n);
return 0;
}
- 代碼解析:
這里的代碼符合的是if類型的第二種情況,也就是if...else if 的情況。此處else沒有判斷條件的原因是因為奇數(shù)偶數(shù)只有兩種情況,即非奇即偶的情況。(其實此處問題有BUG,網(wǎng)站判斷例子沒有判斷0的情況,眾所周知0是整數(shù)。。。)所以這里直接采用if else表示即可。 - else表示除了以上情況外的所有情況。
這里需要說明的是,以上的兩個參考代碼分別采用了兩種情況,并不代表這兩道題只能分別單獨用這兩種方法去解。
如果你能用參考代碼的另一種解法完成這道題,歡迎你把自己的代碼發(fā)到評論區(qū)以和大家一起參考學(xué)習(xí)。