亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

請學帝看看哪里不對? 為什么不能累加

#include <stdio.h>
int main()
{
??? int year = 2008;
??? int month = 8;
??? int day = 8;
??? int sum = 0;
??? int i = 1;
??? switch(month)
??? {
??????? case 1 :sum==31;
??????? case 2 :sum+=29;
??????? case 3 :sum+=31;
??????? case 4 :sum+=30;
??????? case 5 :sum+=31;
??????? case 6 :sum+=30;
??????? case 7 :sum+=31;
??????? case 8 :sum+=31;break;
??????? case 9 :sum+=30;break;
??????? case 10 :sum+=31;break;
??????? case 11 :sum+=30;break;
??????? case 12 :sum+=31;break;
??????? default :;break;
??? }
??? if(year%4==0&&year%100!=0)
??? sum=sum+day;
??? else
??? sum=sum+day+i;
??? printf("%d年%d月%d日是該年中的第%d天",year,month,day,sum);
?return 0;
}

正在回答

4 回答

理解你的思維,可是寫反了,改為如下:

#include <stdio.h>
int main()?
{?
??? int year = 2008;
??? int month = 8;
??? int day = 8;
??? int sum = 0;
??? int i = 1;
??? switch(month)
??? {
??????? case 12 :sum==30;
??????? case 11 :sum+=31;
??????? case 10 :sum+=30;
??????? case 9 :sum+=31;
??????? case 8:sum+=31;
??????? case 7 :sum+=30;
??????? case 6 :sum+=31;
??????? case 5 :sum+=30;
??????? case 4 :sum+=31;
??????? case 3 :sum+=28;
??????? case 2 :sum+=31;
??????? case 1:sum+=0;
??????? default :;break;
??? }
??? if(year%4==0&&year%100!=0)
??? sum=sum+day;
??? else
??? sum=sum+day+i;
??? printf("%d年%d月%d日是該年中的第%d天",year,month,day,sum);
?return 0;
}

2 回復 有任何疑惑可以回復我~
#1

我就是我顏色不一樣的 提問者

非常感謝!
2016-06-05 回復 有任何疑惑可以回復我~

應該是這樣吧
#include <stdio.h>
int main()
{
??? int year = 2008;
??? int month = 12;
??? int day = 8;
??? int sum = 0;
??? int i = 1;
??? switch(month)
??? {
??????? case 12 :sum+=30;
??????? case 11 :sum+=31;
??????? case 10 :sum+=30;
??????? case 9 :sum+=31;
??????? case 8:sum+=31;
??????? case 7 :sum+=30;
??????? case 6 :sum+=31;
??????? case 5 :sum+=30;
??????? case 4 :sum+=31;
??????? case 3 :sum+=28;
??????? case 2 :sum+=31;
??????? case 1:sum+=0;
??????? default :;break;
??? }
??? if((year%4==0&&year%100!=0)||year%400==0)
??? sum=sum+day+i;
??? else
??? sum=sum+day;
??? printf("%d年%d月%d日是該年中的第%d天",year,month,day,sum);
?return 0;
}

0 回復 有任何疑惑可以回復我~

month=8; ?進入switch后就直接找case8了,然后break。就相當于只算了一個8月份的天數。

0 回復 有任何疑惑可以回復我~

這道題中你對case語句后不加break;情況的理解有些偏差。

首先,我們先看看為什么結果不累加

你的程序結果為39,很明顯是31+8(day)得來的,那么這個31是怎么來的?有人可能理解為來自case 1:? ,但這里沒有break;? 即然程序到這里為什么沒有繼續執行,而是跳出來了呢?很顯然這個31并不是這里的。那么我們看前面,因為mouth=8,所以程序進入swich內,應該直接執行case 8: 的語句,然后跳出來,這樣就可以說清了。

那為什么不是按照你的想法讓前8個疊加后再跳出呢,這就是理解的偏差問題了。雖然咱們前面看到過這樣的知識點:“在case子句后如果沒有break;會一直往后執行一直到遇到break;才會跳出switch語句?!睂嶋H上這句話的前提是“符合條件的正被執行的case子句后如果沒有…………”,你程序中因為mouth=8,所以程序進入swich內,直接執行case 8: 的語句,而不是case 1: 的,那也就用不上剛才提到的規則了。

希望對你有幫助!

?

2 回復 有任何疑惑可以回復我~
#1

我就是我顏色不一樣的 提問者

謝謝你
2016-06-05 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
C語言入門
  • 參與學習       926905    人
  • 解答問題       21533    個

C語言入門視頻教程,帶你進入編程世界的必修課-C語言

進入課程

請學帝看看哪里不對? 為什么不能累加

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號