|
>1月1日からm月d日までの経過日数を計算するcalcdayを完成せよという大学の過大なのですが以下の通りに組んでみました。なにかおかしいところはあるでしょうか?ただし条件としてm月d日を引数として受け取り、1月1日以降の経過日数をtotalに求め、totalを返却値とすることとあります。実は引数と返却値の使い方もよくわかっていないのでそこのところも教えていただけるとありがたいです。
前にも似たような質問がありましたのでプログラムが残っていました。
関数名dayofyear()をcalcday()に変えればOKですね。西暦は絶対に必要
です。というのは西暦がないとその年が閏年かどうか判別できなくなり、
2月以降の日数が正しく求められない事があるからです。
daysをtotalに変える事も必要ですね。後は適当にいじって下さい。
#include <stdio.h>
int mdays[][12] = {{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
int isleap(int year)
{
return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
}
int dayofyear(int y, int m, int d)
{
int i;
int days; /* 日数 */
days = d;
for (i = 1; i < m; i++)
days += mdays[isleap(y)][i - 1];
return days;
}
int main(void)
{
int y, m, d, days;
printf("年(西暦) 月 日?");
scanf("%d %d %d", &y, &m, &d);
days = dayofyear(y, m, d);
printf("1月1日から %d 日経過しています。\n", days);
return 0;
}
|