#include <stdio.h> int main(void) { int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int m, d, s, i; scanf("%d", &m); scanf("%d", &d); s = 0; for (i=0; i<m-1; i++) { s += days[i]; } s += d; printf("%d\n", s); return 0; }以下は実行結果。
% ./a.out 1 1 1 % ./a.out 12 31 365 % ./a.out 5 28 148 %
この変換機能を関数md2totalに切り出し、ある月日と別の月日の間の 経過日数を表示するプログラムを作れ。
#include <stdio.h> int md2total(int m, int d) { // ここを埋める。 } int main(void) { int m1, d1, m2, d2; scanf("%d", &m1); scanf("%d", &d1); scanf("%d", &m2); scanf("%d", &d2); printf("%d\n", md2total(m2, d2) - md2total(m1, d1)); return 0; }実行すると、例えば次のようになる。
% ./a.out 5 28 7 31 64 %(5月22日から7月31日までは70日。)
#include <stdio.h> int main(void) { int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int s, i; scanf("%d", &s); for (i=0; i<12; i++) { s -= days[i]; if (s <= 0) { s += days[i]; break; } } printf("%d %d\n", i + 1, s); return 0; }実行例は以下の通り。
% ./a.out 1 1 1 % ./a.out 200 7 19 % ./a.out 365 12 31 %この変換機能を関数total2mdに切り出し、同じような動作をする プログラムを作れ。 total2mdは2つの値を返す必要があり、そのためポインタ渡しで 「書き換えてもらう」形にする。
#include <stdio.h> void total2md(int s, int *m, int *d) { // ここを埋める。 } int main(void) { int m, d, x; scanf("%d", &x); total2md(x, &m, &d); printf("%d %d\n", m, d); return 0; }