dポイントプレゼントキャンペーン実施中!

C言語始めたてで先生にこれ進められて京大の問題らしいのですけど、なかなか進みません、、、
土曜日で改行する方法
月初めの1日の曜日を設定した後にそれ以前の曜日を空白で埋める方法
がずっと悩んでます
どなたか教えてください!!!


特定の月のカレンダーを表示させたい。その月の1日の曜日と、日数を入力さ せて、for文を使用して下記のようなカレンダーを表示させたい。 そのようなプログラムをfor8.cとして書き、数字の 桁が揃っている点も含めて正しく表示されることを確認せよ。

補足:曜日を指定する数字が0から6までの数字でない場合、 また月の日数が28から31までの数字でない場合に、例外処理するのが 望ましいが、可能であれば対応するように。

(実行結果)
% ./a.out
カレンダーを表示させます
表示させたい月は何曜日から始まりますか?次の数字で答えてください
0:日, 1:月, 2:火, 3:水, 4:木, 5:金, 6:土
5
表示させたい月は何日ありますか?数字を入力してください
28
日 月 火 水 木 金 土
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28
%

A 回答 (4件)

https://oshiete.goo.ne.jp/qa/12008894.html

で書いた筈なんだけど、しょーがねぇなぁ。
全然C言語分かってねぇ、って事じゃねぇか。

// ここから

#include <stdio.h>
#include <stdlib.h>

int main(void) {
 char s[3];
 int i, j = 1, m, n, days[42];
 puts("カレンダーを表示させます");
 puts("表示させたい月は何曜日から始まりますか?次の数字で答えてください");
 puts("0:日, 1:月, 2:火, 3:水, 4:木, 5:金, 6:土");
 scanf("%2s%*[^\n]%*c", s);
 m = atoi(s);
 if (m < 0 || m > 6) {goto end;}
 puts("表示させたい月は何日ありますか?数字を入力してください");
 scanf("%2s%*[^\n]%*c", s);
 n = atoi(s);
 if (n < 28 || n > 31) {goto end;}
 for (i = 0; i < 42; i++) {
  if (i < m) {
   days[i] = -1;
  } else if (i < m + n) {
   days[i] = j;
   j++;
  } else {
   days[i] = -1;
  }
 }
 puts(" 日 月 火 水 木 金 土");
 for (i = 0; i < 42; i++) {
  if (days[i] == -1) {
   printf(" ");
  } else if (i % 7 == 0) {
   printf ("\n");
   if (i < m + n) {
    printf (" %2d ", days[i]);
   }
  } else {
   printf (" %2d ", days[i]);
  }
 }
 printf("\n");
 end:
 return 0;
}

// ここまで

とんだ二度手間だ。
「C言語始めたてで先生にこれ進められて京大」の回答画像4
    • good
    • 3

金曜日 1 日から木曜日 28 日を表示する、ではなく、


日曜日 -4 日から週ごとに 5 行分を表示と考えましょう。

[イメージ]
日 月 火 水 木 金 土
-4 -3 -2 -1 +0 +1 +2
...
24 25 26 27 28 29 30

1 から 28 の日付は数値を表示し、
それ以外の日付は空白を表示すれば、
カレンダーの体裁になります。

ちなみに条件によっては 6 行分になることもあるので、
表示行数は決め打ちではなく計算して決めましょう。
    • good
    • 0

>土曜日で改行する方法


7で割った余りが6の時に改行
>月初めの1日の曜日を設定した後にそれ以前の曜日を空白で埋める方法
先月分は曜日の数と同じだからその分空白で埋める
    • good
    • 0

カレンダー系かー


むかしやったなー意外と苦戦した

今やれば簡単にできる気がする
頑張って
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています