- ベストアンサー
うるう年の問題 関数
UNIXの授業の課題なんですが、良く分かりません。windowsしか使った事が無かったのでコンパイルやリンクの操作がいまいちです。 Q. 2組の西暦年y1,y2を読み込んで、西暦y1年から西暦y2年までの閏年をすべて表示せよ。 以下の関数(a.c)を用い、main()関数とは別のオブジェクトプログラムを作成しリンクすることによって実行プログラムを作成しろ。追加のリダイレクションを使って提出ファイルはソースプログラムと結果を印刷、とのこと。 #include <stdio.h> int leap_y(int y) { if((y%400==0)||((y%100!=0)&&(y%4==0))) return 1; else return 0; } 上記の関数をa.cとします。 #include <stdio.h> main () { int y1,y2,i; int leap_y(int); scanf("%d %d",&y1,&y2); printf("%d年から%d年までのうるう年は\n",y1,y2); for(i=y1;i<=y2;i++);{ if(leap_y(i)==1){ printf("%d年\n",i); } } } このプログラムをm.cとします。 GNOME端末で cc -c a.c cc -c m.c cc -o k.out a.o m.o cat m.c > k.ans k.out >> k.ans k.ansを印刷 この順でやれば良いと聞いたんですが、結果が出力されませんでした。どこか間違いがあったら指摘して下さい、お願いします。 自宅のPCはLINUXじゃないので今は確認とかできません。申し訳ありませんが回答よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
2つ問題があります。 1つめ セミコロンが余分 for(i=y1;i<=y2;i++);{ ↓ for(i=y1;i<=y2;i++){ 2つめ scanfで2つの整数の入力待ちをしています。 k.out >> k.ans この行の実行で入力待ちになったはずです。 1900 2000改行 などと入力してください。
その他の回答 (2)
- ssk38
- ベストアンサー率44% (22/49)
>端末での操作は、そこを入力すれば他はこれで合っているんでしょうか? あっているようです。 >今日僕が出来なかったのはソースプログラムが変だったからですかね。 そうですね。 for(i=y1;i<=y2;i++);//iを増やすだけのループ {//意味がないブロック開始 if(leap_y(i)==1){//i=y2+1で一回だけ通る printf("%d年\n",i); } }//意味がないブロック終了
お礼
無事に提出できました。 どうもありがとうございました。
- asuncion
- ベストアンサー率33% (2127/6290)
>int leap_y(int); 関数プロトタイプ宣言は、関数の外側に書きます。 >for(i=y1;i<=y2;i++);{ { の直前のセミコロンは余分です。
お礼
何で気付かなかったんでしょうね…。 早急な回答ありがとうございます。
お礼
了解しました。回答ありがとうございます。端末での操作は、そこを入力すれば他はこれで合っているんでしょうか?だとしたら、今日僕が出来なかったのはソースプログラムが変だったからですかね。