![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_15.png?5a7ff87)
入力された年月日で曜日を求める問題で
このサイトでも似たような質問がいくつかあり(他のサイトでも)
参考になりました、閏年とか日数とか特に助かりました。
(参考と言うよりパクった感じですが
#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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- Excel(エクセル) 週毎の集計 2 2023/08/04 16:56
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミング実行後の表示される値を答えよ #include<stdio.h> void main( 7 2022/05/20 00:07
- C言語・C++・C# プログラミング実行後に表示される値を答えよ #include <stdio.h> void main 4 2022/05/28 10:20
- C言語・C++・C# C言語: ポインタ 5 2022/06/01 08:33
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
よくある 『 第○(1・2・3・4・...
-
月の第一週とは
-
毎○曜日って、使いますか?
-
エクセルで毎月第2週日の水曜日...
-
週2回のペースって だいたい何...
-
エクセル関数質問 セルA2にもし...
-
第○曜日であるかを取得する関数
-
C言語始めたてで先生にこれ進め...
-
土曜日の26時って何曜日の何時...
-
C言語でわからないところがが...
-
指定曜日にMsgBox表示は可能で...
-
毎週同じ曜日にラブホに行くと...
-
C言語での万年カレンダーのソー...
-
曜日を求めるプログラムはどう...
-
ユーザー定義の(aaa)
-
6月の第2 第4火曜日は何日...
-
何曜日が好きですか?
-
ランダムに数字選択
-
Javaについて。
-
一度会っただけで忘れられない...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
月の第一週とは
-
よくある 『 第○(1・2・3・4・...
-
エクセルで毎月第2週日の水曜日...
-
6月の第2 第4火曜日は何日...
-
毎○曜日って、使いますか?
-
週2回のペースって だいたい何...
-
燃えるゴミの日は何曜日ですか?
-
[Excel] ある日の曜日が当月の"...
-
【機械式腕時計のメカニズムの...
-
VBA。複数のChangeイベントをま...
-
Excelで第一〇曜日を求める方法...
-
日本語問題 昨日は何曜日ですか...
-
毎週同じ曜日にラブホに行くと...
-
曜日のなぞ
-
c言語の質問です。 ある月のカ...
-
ユーザー定義の(aaa)
-
今週とは何曜日から何曜日まで...
-
カレンダープログラム、曜日の...
-
曜日と曜の使い分けがわかりま...
-
西暦・月からカレンダーを表示
おすすめ情報