質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

受付中

c言語でカレンダーの表示をしたい

retoruto1257
retoruto1257

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

3回答

0評価

0クリップ

50閲覧

投稿2018/03/07 08:48

現在C言語で西暦と月を入力することで、その一か月分のカレンダーを作っています。
日付と曜日の出力をさせることが出来たのですが、
この日付けの横に祝日や休日のマークを出るようにしたいのですがどのように書けばいいのでしょうか。
よろしくお願いします。

C言語

#include <stdio.h> #include <stdlib.h> int leap_year(int year); /*うるう年*/ int day_month(int year,int month); /*月と日*/ void print_calendar(int year,int month); /*カレンダーの表示*/ int week_day(int year,int month,int day); /*週と曜日*/ int holi_day(int year,int month); /*祝日*/ /*入力部分*/ int main(void){ int year; /*年*/ int month; /*月*/ char year_num[9999]; /*西暦の入力*/ printf("西暦を入力してください(1~9999)\n"); printf("year -->"); fgets(year_num, 16, stdin); year=atoi(year_num); if(1>year || year>9999){ printf("エラーです入力しなおしてください\n"); }else{ printf("入力された西暦は%dです\n",year); } char month_num[12]; /*月の入力*/ printf("月を入力してください(1~12)\n"); printf("month -->"); fgets(month_num, 16, stdin); month=atoi(month_num); if(1>month || month>12){ printf("エラーです入力しなおしてください\n"); }else{ printf("入力された月は%dです\n",month); } print_calendar(year, month); /*カレンダーの表示*/ return 0; } /*** カレンダーの表示 ***/ /* (仮引数)y:西暦年 m:月 (返却値)なし */ void print_calendar(int year, int month) { int day_count, first_day, last_day; first_day = week_day(year, month, 1); /* 1日の曜日を求める */ last_day = day_month(year, month); /* 月の最終日を求める */ printf(" ** %d年%d月 **\n", year, month); printf(" 日 月 火 水 木 金 土\n"); printf("---------------------\n"); for (day_count = 1; day_count <= first_day; day_count++) { /* 1日まで空白で埋める */ printf(" "); } for (day_count = 1; day_count <= last_day; day_count++) { /* 最終日まで表示する */ printf(" %2d", day_count); if ( (day_count + first_day) % 7 == 0) { /* 土曜日で改行する */ putchar('\n'); } } } /*月最後の日*/ int day_month(int year,int month){ int day =0; int last_days[]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; /*月の最後の日*/ if(month == 2) { day = last_days[month-1] + leap_year(year); } /*うるう年なら+1される*/ else if (month >= 1 && month <= 12) { day = last_days[month - 1]; /*2月以外はリスト通り*/ } return day; } /*月初めの曜日*/ int week_day(int year,int month,int day){ if(month == 1) { year = year - 1; month = 13; } /*公式を使うため1月を13月、2月を14月として扱う*/ else if(month == 2) { year = year - 1; month = 14; } /*ツェラーの公式*/ return (5 * year / 4 - year / 100 + year / 400 + (26 * month + 16) / 10 + day) % 7; } int leap_year(int year){ int leap_years = 0; if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) { leap_years = 1; } return leap_years; } int holi_cheek(int year ,int month ,int day){ /*祝日の選定*/ int date = (5 * year / 4 - year / 100 + year / 400 + (26 * month + 16) / 10 + 1) % 7; /*曜日を調べる*/ /*==============================================*/ /* 休日判定関数 */ /* ・動 作 :休日判定を行い,マークを返します。*/ /* ・仮引数 :年, 月, 日, 曜日 */ /* ・戻り値 :次のいずれか1文字。 */ /* :@:日曜, *:土曜, :平日 */ /* :#:祝日, $:休日, &:振替 */ /*==============================================*/

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

ttyp03
ttyp03

2018/03/08 00:26

マークの出力方法がわからない?判定方法(holi_check関数の中身)がわからない?どちらですか?質問は明確にしましょう。
retoruto1257
retoruto1257

2018/03/08 02:47

コメントありがとうございます。 正直マークの出力方法と判定方法の両方分かりません。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。