入力された年月日で曜日を求める問題で
このサイトでも似たような質問がいくつかあり(他のサイトでも)
参考になりました、閏年とか日数とか特に助かりました。
(参考と言うよりパクった感じですが
#include<stdio.h>
int main() {
int ,months,day,year,sum,i; //「変数 月 日 年 sum iを宣言」
int m_array[12] = {31,28,31,30,31,30,31,31,30,31,30,31};//「その月の最後の日
char*cweek[7] = {"日","月","火","水","木","金","土"};//曜日(1週間)
sum =0;// 「sumを0で初期化」
printf ("input (e.g. ****/**/**)\n>>");//ここで入力
scanf ("%d/%d/%d",&year,&months,&day);//「年 月 日を10進数で出力」
for(i=1;i<year;i++){//「1からユーザーが入力した年までループ」
sum++;
if((i%4==0)&&((i%100!=0))||(i%400==0)){//「閏年かどうか判定し、閏年なら1(29日)を足す」
sum++;
}
}
for (i =0; i < months-1; i++) {
sum += m_array[i];
}
if((i%4==0)&&((i%100!=0))||(i%400==0))//「年が閏年で月が3月以降なら閏年分の1を足す」
if(months>=3){
sum++;
}
}
sum=sum+day-1;
printf("%s曜日",cweek[sum%7]);//曜日の計算と出力//
return 0;
}
このソースの意味で質問なんですけど
このソースでいう前年度の総日数は最初の方に出ているループでだされてますよね?あと最後に出ているfor分、これは前月?までの総日数を求めてる・・・と思います。あと最後のsum=sum+day-1;なんですがこれはdayがその月の日数って事なんですよね?sumは前月で。
ちょっとわかりにくり質問で申し訳ないです。
No.3ベストアンサー
- 回答日時:
★コンパイルして、例えば今日の日付で、正しく曜日が表示されなかったので「質問」された、ということですね。
西暦元年1月1日を起点としたプログラムとなっていますが、
そもそも(「グレゴリオ暦をベース」とした)、
★西暦元年1月1日は、何曜日なんだろう、という疑問が浮かぶかと・・。
http://www.benricho.org/nenrei/youbi.html によると、
★西暦元年1月1日は、「土曜日」と出ます。
示されたソースを目でたどると「日曜日」となる。直さなきゃ。
---------ざっとソースをみると--------------------
☆冒頭ループ内の sum++; は sum += 365; を省略したもの、ということは判っていますか?
( 365 % 7 ) が 1 だからだよね。
☆後半の
if((i%4==0)&&((i%100!=0))||(i%400==0))
の i は year じゃないの?
というか、
if( months >= 3 ){
if( 0 == ( year % 4 ) ) sum++;
if( 0 == ( year % 100 ) ) sum--;
if( 0 == ( year % 400 ) ) sum++;
}
と月の判定を外にした方が分かり易い。
---------ところで---------------------------
☆私の子供の頃は、カレンダーは、「月曜から始まり日曜で改行」
されていたんだけど、いつ頃から「日曜から始まり土曜で改行」
のものが普及したんだろう。
☆週の始まりが日曜なら、週末は土曜まで?「週末の予定は?」
と聞かれたら・・。
☆赤穂浪士の討ち入りは、元禄15年12月14日(西暦1703年1月30日)
らしいけど、12月の始めにマスコミが騒ぐのは・・?。
★年寄りは、そんなこと考えていると、寝つきがいい(笑)。
なるほど、分かりやすいように作るのも必要なんですね
勉強になります
今日の日付はまだ試していませんでした・・
他の年とか日付はすんなりいけたのでこれでいいかなと思っていました
どうやらまだダメみたいですね
No.4
- 回答日時:
現在のグレゴリオ暦をさかのぼるんだったら, 紀元元年1月1日は土曜日にも日曜日にもなりませんぜ>#3.
おまけ:
グレゴリオ暦では 400年に 97回の閏年が入ります. つまり 400年で合計 365×400+97 = 146097日あるんですが, この数字はたまたまですが 7 で割切れます. ということは, 「ある年のカレンダー」と「その 400年前のカレンダー」は曜日に関して全く同じになります.
No.2
- 回答日時:
# ソースの解釈はほぼ良いと思われます。
バグがあるようです、さぁどこでしょう?
全角文字が混入してるとか , が余分とか { が少ないとかではなくて
今日の日付を入れてみたら曜日が異なっておりました。
それとも単に投稿される時の記述間違いなのでしょうか?
いえ、私のコードに間違いがあるようです(足りない?といった感じでしょうか・・よくわかりませんが)
4月4日で入力するとズレがでてるみたいですね
気付きませんでした・・・・
他は大丈夫だったのでこれでいけると思ってて・・・
考え直してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
月の第一週とは
-
週2回のペースって だいたい何...
-
毎○曜日って、使いますか?
-
エクセルで毎月第2週日の水曜日...
-
よくある 『 第○(1・2・3・4・...
-
VBA。複数のChangeイベントをま...
-
土曜日の26時って何曜日の何時...
-
指定曜日にMsgBox表示は可能で...
-
毎週同じ曜日にラブホに行くと...
-
Excel関数で当月の第一日曜日の...
-
Consolidateメソッドの引数のSo...
-
thunderbird 送信日時の曜日表示
-
ジンクスやデジャブは昔起きた...
-
Excelで第一〇曜日を求める方法...
-
携帯電話の曜日が違っていた
-
C言語始めたてで先生にこれ進め...
-
[Excel] ある日の曜日が当月の"...
-
今月は1日が日曜日で、31まであ...
-
日本語問題 昨日は何曜日ですか...
-
Excel VBA 第〇△曜日の場合休日...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
月の第一週とは
-
よくある 『 第○(1・2・3・4・...
-
エクセルで毎月第2週日の水曜日...
-
週2回のペースって だいたい何...
-
毎○曜日って、使いますか?
-
やはり時間割いて叔母の事で10...
-
土曜日の26時って何曜日の何時...
-
[Excel] ある日の曜日が当月の"...
-
VBA。複数のChangeイベントをま...
-
ユーザー定義の(aaa)
-
今週とは何曜日から何曜日まで...
-
曜日と曜の使い分けがわかりま...
-
指定曜日にMsgBox表示は可能で...
-
日本語問題 昨日は何曜日ですか...
-
Consolidateメソッドの引数のSo...
-
for a week tomorrowはどういう...
-
毎週同じ曜日にラブホに行くと...
-
Excel VBA 第〇△曜日の場合休日...
-
Excelで第一〇曜日を求める方法...
-
thunderbird 送信日時の曜日表示
おすすめ情報