- ベストアンサー
配列がよくわからない・・・。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
前の方が書かれている通り何に配列を使うのか少々疑問ですが、 使うとすればこんな感じではないかと思います。 #include <stdio.h> int main() { int y, m, d, cnt, out; int days[13] = {-1,31,28,31,30,31,30,31,31,30,31,30,31}; // -1はダミー out = 0; printf("年月日を入力せよ.(年は西暦)\n"); scanf("%d%d%d", &y, &m, &d); if(y%4==0) days[2] = days[2] + 1; // 閏年なら2月の日数を+1 for(cnt=1; cnt<m; cnt++) out = out + days[cnt]; out = out + d; printf("元旦から%d日たっています.\n", out); return 0; } 配列の一番目の要素は、第0要素なので、 (1-12の)月と対応させるために使いません。 配列の宣言は第0要素を含めた13になっています。 入力された月の前の月までを、 配列を使うことでカンタンに足しています。 たぶんkanaboomさんはCをはじめたばかりだと思うので(自分もヒトの事言えませんが)、 出来る限りわかりやすく(換言すると回りくどく)書いたつもりです。 それから、ユリウス暦でもグレゴリオ暦でもそんなに変わりません。 このテの質問で困り度が3だと、つい、「宿題では?」と思います。 もし宿題なら自分で解かなければ意味が無いと思いので丸写しはしないで下さい。 って書いた本人がいっても説得力ありませんが。
その他の回答 (3)
- SpiralGalaxy
- ベストアンサー率39% (649/1652)
よくみたら new しなくてもよかったですね。失礼しました。 void CAaaDlg::func1(int year, int month, int day) { CTime ct1(year, month, day, 0, 0, 0); CTime ct2(year, 1, 1, 0, 0, 0); CTimeSpan ts1(ct1.GetTime()); CTimeSpan ts2(ct2.GetTime()); CTimeSpan diff = ts1 - ts2; CString kotae; kotae.Format("%d", diff.GetDays()); AfxMessageBox(kotae); }
- SpiralGalaxy
- ベストアンサー率39% (649/1652)
何がどうわからないのか、御自分でやってみたところ、分からなかったところを書いた方がいいですよ。 Visual C++/MFCで書いてみました。(1分で) void CAaa::func1(int year, int month, int day) { CTime *pt1, *pt2; pt1 = new CTime(year, month, day, 0, 0, 0); pt2 = new CTime(year, 1, 1, 0, 0, 0); CTimeSpan ts1(pt1->GetTime()); CTimeSpan ts2(pt2->GetTime()); CTimeSpan diff = ts1 - ts2; delete pt1; delete pt2; CString kotae; kotae.Format("%d", diff.GetDays()); AfxMessageBox(kotae); } たぶん宿題の参考にはならないと思います。
- coolguys
- ベストアンサー率18% (351/1917)
ドコを配列にしたら良いのでしょうか? 配列のドコが分からないのでしょうか?
関連するQ&A
- C言語の宿題ができません。
演習問題4】 4-1. キーボードから整数値を入力して、奇数か偶数かを表示させる。 (if文で記述する) 4-2. キーボードから2つの整数値を入力して2つの値の大、等、小の関係を表示する。 (if文で記述する) 4-3. 月を入力し、入力した月の日数を表示する。ただし2月は28日とする。 (if文で記述する) 4-4. 月を入力し、入力した月の日数を表示する。ただし2月は28日とする。 (switch文で記述する) 【応用問題4】 r4-1. 問題4-1のプログラムで、さらに値が4の倍数であった場合に4の倍数であること も表示する。 ※ヒント:0は4の倍数ではない r4-2. キーボードから3つの整数値を入力して3つの値の大、中、小の関係を表示 する。 (if文で記述する) r4-3. 月を入力し、入力した月の日数を表示するプログラムで、入力した月が1~12の 範囲を越えていた場合エラーメッセージを表示させる。
- ベストアンサー
- C・C++・C#
- 配列(testを使って)
2 つの実数ベクトル(3 次元)A とBの足し算をしてその結果を表示するプログラムを書きなさい。ただし、ベクトルの値はキーボードから入力する。 testを使った配列によってこのプログラムを作りたいのですが3次元ってところが難しくてわかりません。 誰か分かる人いませんか?
- 締切済み
- Java
- 4年ごとの平均日数が365.2424日と計算したのは誰?
ユリウス暦の4年ごとの平均日数は365.25日ですが グレゴリオ暦で4年ごとの平均日数は365.2424日ですね。 この4年ごとの平均日数が365.2424日というのは いつ、誰によって計算されたものなのでしょうか?
- ベストアンサー
- 天文学・宇宙科学
- プログラミング 配列
要素数が5の配列にキーボードから整数を入力し、最小値を表示する。プラグラムの 実行例で 1番目:1 2番目:2 3番目:3 4番目:4 5番目:5 最小値は1です という風に表示させたいのですが プログラムのソースを教えていただけないでしょうか?
- 締切済み
- C・C++・C#
- 多次元配列の行列
1番 キーボードから3×3の行列の要素を2次元配列に入力した後、その値を表示するプログラムをさくせいせよ 2番 キーボードから3×4の行列の要素を2次元配列に入力した後、転置行列を出力するプログラムをさくせいせよ 3番 2つの行列A(3×3行列)、B(3×3行列)の買う要素の値をキーボードから2つの配列に入力し、2つの行列、並びに、それらの和、差、積の行列を出力するプログラムを作成せよ(Bに単位行列を入れて検算せよ) 4番 2行3列の行列と3行2列の積を求めるプログラムを作成せよ どなたかわからないでしょうか?? 数が多くてすみません。 わかる方お願いします!!
- 締切済み
- C・C++・C#
- 日数を計算する方法
以下のようにして変数の配列を使って、 月の日数を格納しています。 int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31}; これを使って、 元旦から入力された月日の日数を計算したいのですが どの様にすればいいですか? 例えば、 4月5日の場合は、 1月 31日 2月 28日 3月 31日 4月 5日 なので「95日」 ---------------- 途中までのプログラム #include<stdio.h> main(void) { int yy, mm, dd; int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31}; printf( "西暦を入力しなさい" ); scanf( "%d", &yy ); printf( "月を入力しなさい" ); scanf( "%d", &mm ); printf( "日を入力しなさい" ); scanf( "%d", &dd ); /* うるう年判定 */ if (((yy%4==0)&&(yy%100!=0))||(yy%400==0)) mon[1]=29; else mon[1]=28; ・ ・
- ベストアンサー
- C・C++・C#
- キーボード101配列と106配列
同じような症状になった人がいれば教えて頂きたいのですが、 メモ帳やエクセルでテキストを入力している時は106配列になり、 Internet Explorer や Outlook Expressでテキストを入力 している時は101配列となります。 デバイスマネージャのキーボードを確認すると 「101/102 英語キーボードまたは Microsoft Natural PS/2 キーボード」 と表示されていますが、メモ帳などでテキストを入力している時は106配列となる為、 原因は違う所にあるのかな?と思っています。 全てのアプリケーションで106配列でテキストを入力するには どのようにすればよいのでしょうか?
- ベストアンサー
- Windows XP
お礼
ありがとうございます。お察しのとおり、宿題です。 初心者なもので、どんなふうにプログラムを組み立てていけばいいのか さっぱりわからないのに、こんな宿題を出されて困っておりました。 ご指摘のように、あなたの回答を参考に自分で書いてみたいと思います。 がんばります。