#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;
}