三次元配列を使い、その年を入力すると一年分のカレンダーが出力するC言語のプログラムを教えてください。
それで、一ヶ月を六週として数字が当てはまらない所には「0」が入るようにして、後で「0」を空白に変えるようにして、1月の第1週が出力された後、2月の第1週、3月の第1週、1月の第2週、2月の第2週・・・・・と順に表示させるようなプログラムです。
出力結果は横に三か月分、縦に四か月分が出力される(下記)ようにしたいのですが、よろしくお願いします。
出力結果
・・・年
1月 2月 3月
4月 5月 6月
7月 8月 9月
10月 11月 12月
No.1ベストアンサー
- 回答日時:
これは何かの演習問題ですか?
他人のプログラムを見るのも勉強と思いますので参考プログラムを書きますが、何をやっているかは理解して下さいね。(全角スペースを使っています)
#include <stdio.h>
int main(void) {
int i,j,k;
int cal[12][6][7];
int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int year,weekday,day;
scanf("%d",&year);
for (i=0; i<12; i++) for (j=0; j<6; j++) for (k=0; k<7; k++) cal[i][j][k]=0;
/* うるう年判定 */
if (((year%4==0)&&(year%100!=0))||(year%400==0)) mon[1]=29; else mon[1]=28;
/* 1月1日の曜日 */
weekday=((year-1)+(year-1)/4-(year-1)/100+(year-1)/400+(13*13+8)/5+1)%7;
/* 計算 */
day=1;
for (i=0;i<12;) {
for(j=0;j<6;) {
cal[i][j][weekday++]=day++;
if (weekday==7) {weekday=0; j++;} /* 次の週 */
if (mon[i]<day) {i++; day=1; break;} /* 次の月 */
}
}
/* 表示 */
for (i=0;i<12;i+=3) {
printf(" %2d月 %2d月 %2d月\n",i+1,i+2,i+3);
for (j=0; j<6; j++) {
for (k=0; k<7; k++) if (cal[i][j][k]==0) printf(" "); else printf("%2d ",cal[i][j][k]);
printf(" ");
for (k=0; k<7; k++) if (cal[i+1][j][k]==0) printf(" "); else printf("%2d ",cal[i+1][j][k]);
printf(" ");
for (k=0; k<7; k++) if (cal[i+2][j][k]==0) printf(" "); else printf("%2d ",cal[i+2][j][k]);
printf("\n");
}
printf("\n");
}
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの条件付き書式について エクセルでカレンダーを作りました。縦に日付が並んでいて、横にスケジュ 3 2022/10/10 15:32
- Excel(エクセル) エクセル関数について 2 2022/04/13 18:25
- アルバイト・パート バイト週1の定義(数え方)について 1 2022/08/22 21:13
- Excel(エクセル) エクセルシートの合計の変動 5 2022/04/05 15:56
- 妊娠・出産 受精日、排卵日について。 長くなりますが至急ご回答どうかよろしくお願いします。 ルナルナ推定排卵日2 4 2022/04/17 23:36
- Visual Basic(VBA) Sheet2からオートフィルターで売上日を抽出した件数をカウントし、その件数をSheet1のセルB1 2 2023/01/12 12:24
- Excel(エクセル) DATEDIFで作成した勤務年数の並べ替えがうまくいかない 3 2023/07/31 17:09
- Excel(エクセル) 当番表の作成 2 2022/06/15 07:40
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- Visual Basic(VBA) 列 A に同じ日が2つが必要です。 1 2023/03/28 07:25
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
c言語の質問です。 ある月のカレンダーを作る際に、その月の日数とその月の1日の曜日を入力すればできる
C言語・C++・C#
-
万年カレンダーのC言語プログラムを教えてください
C言語・C++・C#
-
西暦・月からカレンダーを表示
C言語・C++・C#
-
-
4
c言語で2000年以降カレンダーを表示するプログラムを書こうと思ってるんですけど、画像のように何故か
C言語・C++・C#
-
5
C言語始めたてで先生にこれ進められて京大の問題らしいのですけど、なかなか進みません、、、 土曜日で改
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10個出力で改行したいのですが...
-
c言語 プログラム ピラミッド
-
printf で二進表示を行いたい。
-
C言語です このプログラミング...
-
strcmp
-
カレンダー作成
-
c言語で2000年以降カレンダーを...
-
C言語のプログラミングです 以...
-
%P と %X の違い
-
二つの整数値の大小比較
-
cshの文字列操作(0埋め)
-
テキストカーソル位置の取得
-
Cプログラムについて
-
困ってます!Cプログラミングに...
-
コンパイルエラーについて
-
三平方の定理を求めるプログラム
-
配列データをExcelファイルとし...
-
switch文を使った四則演算 ど...
-
Cの九九を表示するプログラム...
-
C++でfprintfやprintf,fopenな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
【C言語教えてください】sin波...
-
printf で二進表示を行いたい。
-
c言語でAからZまでを表示する...
-
コマンドラインに出力した文字...
-
strcmp
-
4の倍数を論理演算で表す。。
-
C言語 プログラミング
-
scanfに文字が入力されたときに...
-
C言語での、年複利の計算方法...
-
hit&bolwのプログラミングがで...
-
%P と %X の違い
-
unsigned int型について
-
printf( " %2d", p * q );
-
cshの文字列操作(0埋め)
-
改行について 1行に何個かづ...
-
8人分のテストの点数を入力し、...
-
入力したお金の金額からお札の...
-
三角形の判別
-
テキストカーソル位置の取得
おすすめ情報