ID非公開

2019/8/10 1:53

22回答

C言語のテストで今日出た問題なのですが、、

C言語のテストで今日出た問題なのですが、、 西暦を和暦に変換する関数を用いたプログラム 西暦>2020 令和2年です どんなプログラムになりますか?

ベストアンサー

0

西暦年を和暦に変換するプログラム例(文字列を返す関数) https://edu.clipper.co.jp/pg-2-34.html このリンク先のプログラムをベースに追加&変更しています。 明治より前は未対応です。 -------------------- #include <stdio.h> #include <string.h>//strcpy()を使うのに必要 #define MEIJI 1868 #define TAISHO 1912 #define SHOWA 1926 #define HEISEI 1989 #define REIWA 2019 char *wareki( int y ) { char gg[8]; static char str[30]; //strcpy()を使って、gg[]に和暦を入れる //sprintf()を使って、str[]にgg[]と年数を入れる //strcpy(str1,str2)はstr2(文字列)をstr1にコピーする //sprintf()は第一引数を対象に出力、後はprintfと同様 if(y>=REIWA){ strcpy( gg, "令和" ); y = y-REIWA+1; }else if( y >= HEISEI ) { strcpy( gg, "平成" ); y = y-HEISEI+1; } else if( y >= SHOWA ) { strcpy( gg, "昭和" ); y = y-SHOWA+1; } else if( y >= TAISHO ) { strcpy( gg, "大正" ); y = y-TAISHO+1; } else if( y >= MEIJI ) { strcpy( gg, "明治" ); y = y-MEIJI+1; } else { sprintf( str, "(明治以前は未対応)" ); return str; } if( y == 1 ) sprintf( str, "%s元年", gg ); else sprintf( str, "%s%d年です", gg, y ); return str; } int main(void) { int years; printf("西暦>"); scanf("%d",&years); printf( "%s\n", wareki( years ) ); return 0; }

もっとシンプルにしたもの #include <stdio.h> int main(void) { int y; printf("西暦>"); scanf("%d",&y); if(y>=2019){ printf("令和"); y = y-2019+1; }else if( y >= 1989 ) { printf("平成"); y = y-1989+1; } else if( y >=1926 ) { printf( "昭和" ); y = y-1926+1; } else if( y >= 1912 ) { printf( "大正" ); y = y-1912+1; } else if( y >= 1868 ) { printf( "明治" ); y = y-1868+1; } else { printf( "明治より前は未対応です\n" ); return 0; } if( y == 1 ) printf( "元年です\n" ); else printf( "%d年です\n", y ); return 0; }

その他の回答(1件)

0

どんな関数の仕様かによって違いますが、 基本的な動作は、 2019年を超えていたら、 "令和"と出力して2018を引いた数値を出力します。 2019だった場合は、平成31年と、令和元年(又は令和1年)があるので、 どうするかは作成者次第ですね。