- ベストアンサー
教えてください
西暦年を受け取り、和暦年を返す関数を作成して該当する部分を関数呼び出しにします。また、平成以前の西暦年が渡されたら0を返す。1が返されたら1989年は平成元年です。と表示するのですが、いまいち分かりません。このプログラムを使います。#include <stdio.h> int main(void) { int no; printf("西暦を入力してください。"); scanf("%d", &no); if(no >1988) printf("%dは平成%d年です。\n", no, no-1988); else printf("平成ではありません。\n"); return (0); } 教えてください。お願いします。これは、C言語です。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>?と:の意味がよく分かりません。 条件演算子(または3項演算子)といいます。 (条件)? 条件が成立した時の(式)値:条件が不成立の時の(式)値; ということで、条件によって値を選択するときなどに使います。 例えば、 ret=(AD<1989)? 0 : AD -1988; と if(AD<1989) ret=0; else ret=AD -1988; は同じ意味合いになります。 条件演算子を使うと、上記のretに代入する値が、1つの式で決められます。 また、 return (AD<1989)? 0 : AD -1988; と書けば、上記のような変数retを(必要ないので)省略できます。 >平成であれば年を表示するというのは、どの部分 if(0!=(hYear=toHeisei(no))){//toHeisei()が返す値が0でない時という意味だから /* この部分が平成であれば実行される部分 */ } else printf("平成ではありません。\n");
その他の回答 (5)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
jjjj27さんの判ってないところが、私が良く判って無くて、見当違いな回答だったらごめんなさい。 #2>質問で書いたプログラムの該当する部分を関数呼び出すようにするときどこに呼び出したらいいのかが分かりません。 #2で言えば、 int toHeisei(int AD){ return (AD<1989)? 0 : AD -1988; } の部分が、「西暦年を受け取り、和暦年を返す関数」 です。「平成以前の西暦年が渡されたら0を返す。」ようになっています。 質問文のプログラムでは、 入力された西暦年によって、 ・平成かそうでないか ・平成であれば年を表示するが、1年は、元年と表示する というような処理をしますね。 なので、 関数によって返された和暦年を2ヶ所で使用することになりますから そういった処理を開始する前に、関数を呼び出し、その返値を変数に保存しておきます。 #2では、 if(0!=(hYear=toHeisei(no))){ のように一行で書いていますが hYear=toHeisei(no); if(0!=hYear){ のように2行に分けて書いても同じです。 >1(平成1年)が返さた場合は、「1989年は平成元年です。」と 表示する #2では、関数が1を返した時というのを if(hYear==1) で調べています。 数値を指定して、それを元と表示するようなprintfのオプションは有りませんので、単純に、hYear==1の時、printf("元年です。\n");のように、まるまる文字列で表示しています。 printf("%dは平成", no); printf("元年です。\n"); は、分けて書いてありますが、 printf("%dは平成元年です。", no); とまとめて書いても同じです。
- t_nojiri
- ベストアンサー率28% (595/2071)
>自分で作る関数で和暦年を返す関数を作成するのですが、質問で書いたプログラムの該当する部分を関数呼び出すようにするときどこに呼び出したらいいのかが分かりません。 私の例題ではif文の中で関数callしましたが、BLUEPIXYさんがお書きになってるように変数に代入してもいいです。 あと、returnを使って返すとき、0とか、1とかを返すのが理解できません。 0とか1を返すって言うのは、まあ、関数が成功したとき成功=TRUEを返却する。逆に失敗したとき失敗=FALSEを返却するっていう論理演算の考え方です。 こうやって返却しておけば、実はif文の中の条件判定を書きましたがif(i_seireki_hantei(no) == 1)を、if(i_seireki_hantei(no))と書いても判定出来る事になります。 >質問で1(平成1年)が返さた場合は、「1989年は平成元年です。」と表示するようにするの書いたのですが、そこも分かりません。 これは、printf()の仕様ですから、是非ともネットででも調べてください。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#include <stdio.h> int toHeisei(int AD){ return (AD<1989)? 0 : AD -1988; } int main(void){ int no; int hYear; printf("西暦を入力してください。"); scanf("%d", &no); if(0!=(hYear=toHeisei(no))){ printf("%dは平成", no); if(hYear==1) printf("元年です。\n"); else printf("%d年です。\n", hYear); } else printf("平成ではありません。\n"); return (0); }
補足
自分で作る関数で和暦年を返す関数を作成するのですが、質問で書いたプログラムの該当する部分を関数呼び出すようにするときどこに呼び出したらいいのかが分かりません。あと、returnを使って返すとき、0とか、1とかを返すのが理解できません。質問で1(平成1年)が返さた場合は、「1989年は平成元年です。」と 表示するようにするの書いたのですが、そこも分かりません。詳しく教えてください。
- t_nojiri
- ベストアンサー率28% (595/2071)
i_seireki_hantei(no); scanf("%d", &no);の下にリターン値も何も見ずに呼んでるのは消し忘れです。 済みません。見落としました。
- t_nojiri
- ベストアンサー率28% (595/2071)
あくまで例ですのでそのまま使っても知りませんよ。 #include <stdio.h> int i_seireki_hantei(int i_nengou) { int i_ret = 0; if(i_nengou >1988){ i_ret = 1; }else{ i_ret = 0; } return i_ret; } int main(void) { int no; printf("西暦を入力してください。"); scanf("%d", &no); i_seireki_hantei(no); if(i_seireki_hantei(no) == 1) printf("%dは平成%d年です。\n", no, no-1988); else printf("平成ではありません。\n"); return (0); }
補足
自分で作る関数で和暦年を返す関数を作成するのですが、質問で書いたプログラムの該当する部分を関数呼び出すようにするときどこに呼び出したらいいのかが分かりません。あと、returnを使って返すとき、0とか、1とかを返すのが理解できません。質問で1(平成1年)が返さた場合は、「1989年は平成元年です。」と 表示するようにするの書いたのですが、そこも分かりません。詳しく教えてください。
補足
return (AD<1989)? 0 : AD -1988の?と:の意味がよく分かりません。平成であれば年を表示するというのは、どの部分で書いていますか?何度もすいません。 分からないので宜しくお願いします。