C言語で日数計算と曜日求め

メインメニューへ
C言語環境設定からHelloWorldまで
これからプログラミングをはじめる方へ
基本情報技術者試験トップ
自己紹介
息抜きに、写真で癒し

おはこんばんにちは!
うにゃうにゃエンジニアの猫です(=^・^=)

今日はC言語で、ある日付から別の日付まで何日あるのかカウントするプログラムと、
それを利用して曜日を求めるプログラムを作ってみました。
良かったら使って下さいにゃっ!

その年の1月1日からの日数を計算します。
それには月ごとの日数の配列を作って利用しています。
例えば1月だったら+0、2月だったら+31…と加算日数が配列に入っています。
C言語は配列の要素が0から始まる為、配列の先頭の要素はダミーとして0が入っています。

開始日と終了日を年、月、日ごとに入力して、開始日が3月より前だったら、または終了日が3月以降だったら、
閏(うるう)年かどうか調べて、閏年だったら日付を1つ増やすように計算します。

開始日と終了日の年の差×365とうるう年の調整をして日数を求めました。
では実行して見ます。

今日は2021年(令和3年)1月23日です。
1年前の2020年1月23日までの日数を求めます。
2020年はうるう年で、2月29日が含まれるので、その分加算され、365+1で366日になります。

では、私が生れた1977年5月19日から今日までの日数を調べます。

うわぁぁぁ、こんなに生きているんだ。もっと1日1日丁寧に生きないと!!

ここまでのプログラミングのコードです。

#include <stdio.h>
//ここで引き算している
int hikizan(int start,int goal){
return goal-start;
}


//うるう年かどうかの判定をしている
int isLeapYear(int uruyear){
if((uruyear%4==0 && uruyear%100!=0) || uruyear%400==0){
return 1;
}else{
return 0;
}
}

int main(void)
{
//日付の開始日、終了日の変数
int yearstart,yeargoal,yeardif; //開始年、終了年、終了年-開始年
int monthstart,monthgoal; //開始月、終了月
int daystart,daygoal; //開始日付け、終了日付け
int uruFlg; //うるう年の判定フラグ
int count=0; //うるう年の回数
//月の配列。その年の1月1日からの日数
int tukihi[]={0,0,31,59,90,120,151,181,212,243,273,304,334};

//開始日の入力
printf(“開始日の年を入力してください。開始の年:yearstart=”);
scanf(“%d”,&yearstart);
printf(“開始日の月を入力してください。開始の月:monthstart=”);
scanf(“%d”,&monthstart);
printf(“開始日の日を入力してください。開始の日:daystart=”);
scanf(“%d”,&daystart);
printf(“——————————————-\n”);

//終了日の入力
printf(“終了日の年を入力してください。\n※開始日以降の日付を入力してください※\n終了の年:yeargoal=”);
scanf(“%d”,&yeargoal);
printf(“終了日の月を入力してください。終了の月:monthgoal=”);
scanf(“%d”,&monthgoal);
printf(“終了日の日を入力してください。終了の日:daygoal=”);
scanf(“%d”,&daygoal);

//もしも開始日>終了日だったら
if(daystart>daygoal){
printf(“終了日を開始日以降の日付にしてやり直して下さい。\n”);
return 0;
}
printf(“\n”);

//その年の1月1日からの日数
daystart+=tukihi[monthstart];
daygoal+=tukihi[monthgoal];

//開始年と終了年の差は何年あるか
yeardif=hikizan(yearstart,yeargoal);
//開始日の月が3月より前だったらその年が閏(うるう)年かチェックする
if(monthstart<3){ uruFlg=isLeapYear(yearstart); if(uruFlg==1){ daystart–; } }


//終了日の月が3月以降だったらその年が閏(うるう)年かチェックして、前の年の判定の順準備をする if(monthgoal>=3){
uruFlg=isLeapYear(yeargoal);
if(uruFlg==1){
daygoal++;
}
}
yeargoal–; //終了日の前年のうるう年判定をする準備

//終了日の前年から開始日の年までうるう年か調べる
for(int i=yeargoal;yeargoal>yearstart;yeargoal–)
{
uruFlg=isLeapYear(yeargoal);
if(uruFlg==1){
count++;
}
}
daygoal+=365*yeardif+count-daystart; //日数計算
printf(“%d日です。\n”,daygoal);
}

では、上のプログラムを利用して、曜日を求めてみます。
基準日は1970年1月1日とします。その日は木曜日なので、日数差を7で割った余りが0なら木曜日、
1なら金曜日…と配列に入力して曜日を調べます。


今日2021年1月23日は土曜日ですので、ちゃんと求まりました。

では、馬場ふみかさんが生れた1995年(平成7年)6月21日は何曜日か調べます。


水曜日ですね。

良かったちゃんと動いていた。
では、このプログラムのコードです。


#include <stdio.h>
//ここで引き算している
int hikizan(int start,int goal){
return goal-start;
}


//うるう年かどうかの判定をしている
int isLeapYear(int uruyear){
if((uruyear%4==0 && uruyear%100!=0) || uruyear%400==0){
return 1;
}else{
return 0;
}
}

//曜日を求める
int youbihantei(int nanyou){
return nanyou%7;
}
int main(void)
{

//日付の開始日、終了日の変数
int yearstart,yeargoal,yeardif; //開始年、終了年、終了年-開始年
int monthstart,monthgoal; //開始月、終了月
int daystart,daygoal; //開始日付け、終了日付け
int uruFlg; //うるう年の判定フラグ
int count=0; //うるう年の回数
int week; //曜日を表す配列の添え字

//月の配列
int tukihi[]={0,0,31,59,90,120,151,181,212,243,273,304,334};

//開始日(基準の日を1970年1月1日とする)
yearstart=1970;
monthstart=1;
daystart=1;

//曜日の配列。基準日との日数差を7で割った余りが0になるのが木曜日
char youbi[]={“木”,”金”,”土”,”日”,”月”,”火”,”水”};

printf(“年を入力してください。年:yeargoal=”); scanf(“%d”,&yeargoal); printf(“月を入力してください。月:monthgoal=”); scanf(“%d”,&monthgoal);
printf(“日を入力してください。日:daysgoal=”);
scanf(“%d”,&daygoal); printf(“\n”); //その年の1月1日からの日数 daygoal+=tukihi[monthgoal]; //開始年と終了年の差 yeardif=hikizan(yearstart,yeargoal); //終了日の月が3月以降だったらその

年が閏(うるう)年かチェックする if(monthgoal>=3){ uruFlg=isLeapYear(yeargoal); if(uruFlg==1){ daygoal++; } } yeargoal–; //終了日の前年から1971年までうるう年か調べる for(int i=yeargoal;yeargoal>yearstart;yeargoal–) { uruFlg=isLeapYear(yeargoal); if(uruFlg==1){ count++; } } daygoal+=365yeardif+count-daystart;
week=youbihantei(daygoal);

if(yeargoal<1970){
printf(“1970年1月1日以降の日付を入力してください。\n”);
}else{
printf(“%s曜日です。\n”,youbi[week]);
}
}

ご精読ありがとうございました(=^・^=)mm

馬場ふみかさんの写真集 ■

同じ人類で、ここまで美しい女性がいるのかと、感動しました!!
最強の被写体であり、たっぷりと曲線美が堪能できます。
「スタイル抜群」とか「ナイスボディ」などといった言葉ではとても収まりきらない程の美しさで、まさに神の造形です。
女性の方で、ファッションに興味のある方でしたら服(水着も含め)の着こなし方や見せ方、角度、ポーズ、表情など凄く勉強になりますので、男女ともに楽しめる写真集です。「好きな男性を振り向かせたい」という女性の方にとって、女性としてのお手本になる写真集だと思います。
私は、資格試験やプログラミング学習のリフレッシュに、馬場ふみかさんの写真集を見て、目の保養にしています。参考書と共に、馬場ふみかさんの写真集を勉強のお供にしていて、楽しく勉強が出来たお陰で、実際にIT系国家資格の基本情報技術者試験(以下FE)に高得点一発合格(点数)出来ました。
20年以上前の平成初期ぐらいに(大学生〜新社会人の頃)情報二種や初級シスアドに2度も落ちてしまった私でさえFEに1発合格が出来たのは、精神的な面で、馬場ふみかさんの写真集やドラマやCM、SNSなどの芸能活動が支えになったからです。
私にとって馬場ふみかさんは、まさに勝利の女神様です!!

メインメニューへ
C言語環境設定からHelloWorldまで
これからプログラミングをはじめる方へ
基本情報技術者試験トップ
自己紹介
息抜きに、写真で癒し

投稿者: nekosiestr

プログラミング学習中のロスジェネ(就職氷河期世代)の発達障害者です。 宜しくお願いします。 趣味で写真を撮っています。 プログラミングは、GAS/HTML/CSS/JavaScript/jQuery/PHP、 発達障害は、自閉症スペクトラムASD/ADHD、その他双極性障害やHSP(5人に1人の繊細さん)などの生きづらさを抱えておりますが、それでも楽しく生きて行きたいです!! 写真は、以前はコンパクトデジカメ、現在は、OLYMPUSミラーレス一眼を使っています。

モバイルバージョンを終了