這是慕課網上面的問題,下面是我的代碼。運行出來啥也沒有
#include<stdio.h>
int main()
{
int year=2008;
int month=8;
int day=8;
int flag; int sum; if(year%4==0&&year%100==0|year%100==0&&year%4!=0)
flag=1;
else flag=0;
switch(month)
{
case 1:sum=(31);break;
case 2:sum=(sum+28);break;
case 3:sum=(sum+31);break;
case 4:sum=(sum+30);break;
case 5:sum=(sum+31);break;
case 6:sum=(sum+30);break;
case 7:sum=(sum+31);break;
case 8:sum=(sum+31);break; //這里沒有用8天加,而是用31-23 case 9:sum=(sum+30);break; case 10:sum=(sum+31);break;
case 11:sum=(sum+30);break;
case 12:sum=(sum+31);break; sum-=23+flag; //sum-=23的意思是用八月的31-23天就等于8天
printf("%d年%d月%d日是該年的第%d天",year,month,day,sum);
}
return 0;
}
因為粘貼效果不好,下面還有一張圖片。答案是221天

uj5u.com熱心網友回復:
printf("%d年%d月%d日是該年的第%d天",year,month,day,sum);這個列印要放到switch外面才能用列印
uj5u.com熱心網友回復:
好勒好勒謝謝
uj5u.com熱心網友回復:
我的運行結果也錯了
uj5u.com熱心網友回復:
結果肯定是錯啊,你這個并沒有把8月前面幾個月的天數相加。switch里的case只會執行一個。你把break去掉看看會有什么效果
uj5u.com熱心網友回復:
if(year%4==0&&year%100==0|year%100==0&&year%4!=0) 這一句判斷條件
if(year%4==0&&year%100!=0||year%400==0)
uj5u.com熱心網友回復:
當被測驗的變數等于 case 中的常量時,case 后跟的陳述句將被執行,直到遇到 break 陳述句為止。當遇到 break 陳述句時,switch 終止,控制流將跳轉到 switch 陳述句后的下一行。
不是每一個 case 都需要包含 break。如果 case 陳述句不包含 break,控制流將會 繼續 后續的 case,直到遇到 break 為止。
uj5u.com熱心網友回復:
#include<stdio.h>
void fun(int arr[], int len)
{
arr[0] = 2;
printf("addr_in_fun:%p\n", &arr);
}
int main()
{
int year = 2008;
int month = 8;
int day = 8;
int flag;
int sum = 0; //-----sum賦初值----------
if (year % 4 == 0 && year % 100 == 0 || year % 100 == 0 && year % 4 != 0)//---|改為||
flag = 1;
else
flag = 0;
for (int i = 0; i < month; ++i)//----添加for回圈-------------
{
switch (month)
{
case 1:
sum = (31);
break;
case 2:
sum = (sum + 28);
break;
case 3:
sum = (sum + 31);
break;
case 4:
sum = (sum + 30);
break;
case 5:
sum = (sum + 31);
break;
case 6:
sum = (sum + 30);
break;
case 7:
sum = (sum + 31);
break;
case 8:
sum = (sum + 31);
break; //這里沒有用8天加,而是用31-23 case 9:sum=(sum+30);break; case 10:sum=(sum+31);break;
case 11:
sum = (sum + 30);
break;
case 12:
sum = (sum + 31);
break;
}
}
//-----------把以下兩行代碼移至for回圈之外---------------------
sum -= 23 + flag; //sum-=23的意思是用八月的31-23天就等于8天
printf("%d年%d月%d日是該年的第%d天", year, month, day, sum);
return 0;
}
VS2015 C++環境除錯結果
uj5u.com熱心網友回復:
你要用回圈來加,如果不想用for就想用switch的話,把月份從后往前寫,然后把break去掉。因為switch case的機制是從上往下判斷,知道遇到滿足case的開始執行后面,而一旦開始執行case 那么執行完就會繼續往后執行,知道遇到break或switch結束,所以你倒過來寫,一月放最后可以達到回圈加的效果,會先判斷幾月,然后從那個月開始往下都加,記得去掉break這樣寫的花,具體邏輯你想想怎么實作加轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/95894.html
標籤:C語言
上一篇:求助:非遞回遍歷二叉樹,為什么運行結果是堆疊已滿???
下一篇:海量客戶端的一種實作方法可行嗎
