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

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

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

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

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Q&A

解決済

4回答

3543閲覧

for文 カレンダーの表示

yoshiteru21

総合スコア44

C

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

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

0グッド

0クリップ

投稿2019/04/12 03:26

編集2019/04/12 06:59

イメージ説明

c言語でfor文を使って画像のように出力させるプログラムを教えてください。
途中までできているコードを載せていますが全く違います

#include <stdio.h> int main(void){ int week, days, i; printf("カレンダーを表示させます\n"); printf("表示させたい月は何曜日から始まりますか?次の数字で答えてください\n"); printf("0:日,1:月,2:火,3:水,4:木,5:金,6:土\n"); scanf_s("%d", &week); printf("表示させたい月は何日ありますか?数字を入力してください\n"); scanf_s("%d", &days); printf("日 月 火 水 木 金 土\n"); for (week = 0; week <= 6; week++)printf(" "); for (i = 1; i <= days; i++){ for (int j = 1; j <= 7; j++){ printf("%3d", i); i++; int d; d = j + week % 7; if (d == 0){ printf("\n"); } } printf("\n"); } return 0; } コード

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoshiteru21

2019/04/12 03:43

そうです。課題として出されているのではなく、ネットで調べ、出てきたものを自分で解いているわけですが・・。 こちらの問題がさっぱりわからず、質問している状況です。
guest

回答4

0

ちょっとひねり過ぎか?

text

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

関数にしちゃってます^^;

c

1 2#include <stdio.h> 3#include <stdlib.h> 4// 標準入力から文字列を読み込み数値に変換する 5static int getNum() 6{ 7 char buf[32]; 8 buf[31] = '\0'; 9 // 10 fgets(buf, sizeof buf - 1, stdin); 11 // 12 return (int)strtol(buf, NULL, 10); 13} 14// カレンダー表示 15static void putCal(int start, int num) 16{ 17 // 18 puts(" 日 月 火 水 木 金 土"); 19 // 20 for (int i = 1; i <= start; i++) { 21 printf("%2s", " "); 22 } 23 // 24 int d = start; 25 for (int i = 1; i <= num; i++) { 26 printf("%3d", i); 27 d = (d + 1) % 7; 28 if (d == 0) { 29 putchar('\n'); 30 } 31 } 32 putchar('\n'); 33} 34// 35int main(void) 36{ 37 // 38 puts("カレンダーを表示させます"); 39 puts("表示させたい月は何曜日から始まりますか?次の数字で答えてください"); 40 puts("0:日,1:月,2:火,3:水,4:木,5:金,6:土"); 41 // 42 int start = getNum(); 43 while (start < 0 || 6 < start) { 44 fputs("0〜6の数字で指定して下さい", stderr); 45 start = getNum(); 46 } 47 // 48 puts("表示させたい月は何日ありますか?数字を入力してください"); 49 int num = getNum(); 50 while (num < 28 || 31 < num) { 51 fputs("28〜31の数字で指定して下さい\n", stderr); 52 num = getNum(); 53 } 54 // 55 putCal(start, num); 56 // 57 return 0; 58} 59

投稿2019/04/12 05:04

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ものすごく久しぶりにC書いたのでガバガバコードです。
Spaceでなくタブ使ってるのでご自身でうまくやってください。

C

1#include <stdio.h> 2int main(void){ 3 // Your code here! 4 int dayweek,days; 5 int i,j; 6 printf("カレンダーを表示させます。\n表示させたい月は何曜日から始まりますか?数字を入れてください\n"); 7 printf("0:日,1:月,2:火,3:水,4:木,5:金,6:土\n"); 8 scanf("%d",&dayweek); 9 printf("何日間ある月ですか?\n"); 10 scanf("%d",&days); 11 printf("日\t月\t火\t水\t木\t金\t土\n"); 12 13 int count; 14 15 int first_week_days = 7 - dayweek; 16 for(i=0; i<dayweek; i++){ 17 printf("\t"); 18 } 19 for(i=0; i<first_week_days; i++){ 20 printf("%d\t",i+1); 21 count = i+1; 22 } 23 printf("\n"); 24 25 while(1){ 26 for(i=0; i<7; i++){ 27 count++; 28 printf("%d\t",count); 29 if(days == count){ 30 goto END; 31 } 32 } 33 printf("\n"); 34 } 35 36 END: 37 printf("\n"); 38 return 0; 39} 40

追記

コード分かりやすくして、スペースにしました。
コメントで解説入れたので参考にしてください。

C

1#include <stdio.h> 2int main(void){ 3 // Your code here! 4 int dayweek,days; 5 printf("カレンダーを表示させます。\n表示させたい月は何曜日から始まりますか?数字を入れてください\n"); 6 printf("0:日,1:月,2:火,3:水,4:木,5:金,6:土\n"); 7 scanf("%d",&dayweek); 8 printf("何日間ある月ですか?\n"); 9 scanf("%d",&days); 10 printf("日 月 火 水 木 金 土 \n"); 11 12 //最初に一週間目の日付が当てはまらない曜日に空白を作る 13 int i; 14 for(i=0; i<dayweek; i++){ 15 printf(" "); 16 } 17 18 //次回出力予定の日にち 19 int current_day = 1; //次に1日から出力したい 20 //次回出力予定の曜日(0~6)が入る 21 int current_dayweek = dayweek; //次に入力された曜日から出力したい 22 23 //その月の日付と同じ回数回す 24 do { 25 printf("%2d ",current_day); 26 27 current_day++; //次回出力予定の日数をインクリメント 28 current_dayweek++; //次回出力予定の曜日をインクリメント 29 30 //次回出力予定の曜日が 土+1 (カレンダーよりも右にはみ出た)場合の処理 31 if(current_dayweek > 6){ 32 printf("\n");//改行を流して 33 current_dayweek = 0; //日曜日に戻す 34 } 35 36 }while(current_day <= days); //次回の出力予定値が、入力された日数を超えたら終わり 37 38 printf("\n"); //最後に改行入れといてあげる 39 return 0; 40 41} 42

投稿2019/04/12 04:20

編集2019/04/12 04:44
kou0179

総合スコア304

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoshiteru21

2019/04/12 04:57

ありがとうございました! ご参考にさせていただきます。
guest

0

ヒントだけ。

  1. 月の始まりの曜日が決まると、「1日までに必要な空白の数」が分かります。
  2. カレンダーの一段は7日と決まっています
  3. カレンダーの出力の最後の日は入力で決まります

なので、「for文を使わずに書く」と、割と簡単に書けますよ。
※使うとしたら「日」のための1ループだけですね

投稿2019/04/12 04:18

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

日付を0以下からカウントする方法もあります.

C

1#include <stdio.h> 2 3int main(void){ 4 int week, days; 5 printf("カレンダーを表示させます\n"); 6 printf("表示させたい月は何曜日から始まりますか?次の数字で答えてください\n"); 7 printf("0:日,1:月,2:火,3:水,4:木,5:金,6:土\n"); 8 scanf("%d", &week); 9 printf("表示させたい月は何日ありますか?数字を入力してください\n"); 10 scanf("%d", &days); 11 12 printf("日 月 火 水 木 金 土\n"); 13 for(int i=1-week, j=1; i<=days; i++,j++) { 14 if(i <= 0) printf(" "); 15 else printf("%3d", i); 16 if(j%7 == 0 || i == days) printf("\n"); 17 } 18 return 0; 19}

投稿2019/04/13 03:38

編集2019/04/13 03:47
jimbe

総合スコア13174

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問