生年月日から(年齢)、(曜日)を出力
Posted: 2010年5月26日(水) 10:33
今、生年月日から年齢と曜日を出すプログラムを作成していますが年齢は表示できるのですが曜日を出力のやり方が分かりません。
文字なので「%c」だと思って試すと「@」になってしまいます。
曜日の計算式は聞きましたが、それが何曜日になるのかが分からないのでご教授いただけないでしょうか
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int Leap_Year(int);
int Last_Day(int yy,int mm);
int Day_of_the_Week(int yy,int mm,int dd);
int main(void){
int Today=20100401;
int yy,mm,dd,Birth,nen;
int Ld[/url]={0,31,28,31,30,31,30,31,31,30,31,30,31};
do{
printf("生年=");
rewind(stdin);
scanf("%d",&yy);
}while(yy<1 || yy>(Today/10000));
do{
printf("生月=");
rewind(stdin);
scanf("%d",&mm);
}while(mm<1 || mm>12);
if(Leap_Year(yy)==1) Ld[2]=29;
else Ld[2]=28;
do{
printf("生日=");
rewind(stdin);
scanf("%d",&dd);
}while(dd<1 || dd>Ld[mm]);
Birth=yy*10000+mm*100+dd;
nen=(Today-Birth)/10000;
printf("年齢=%d\n",nen);
printf("曜日=%c\n",Day_of_the_Week);
rewind(stdin);
getchar();
return 0;
}
int Day_of_the_Week(int yy,int mm,int dd)
{
if(mm<3) {yy--; mm+=10;}
else {mm-=2;}
return((yy+(yy/4)-(yy/100)+(yy/400)+(13*mm+34)/5+dd)%7);
}
int Leap_Year(int);
int Last_Day(int yy,int mm)
{
if(mm==2) return(28+Leap_Year(yy));
else return((mm<8)? 30+mm%2:31-mm%2);
}
int Leap_Year(int yy)
{
if((yy%4)!=0) return(0);
if((yy%100)!=0) return(1);
if((yy%400)!=0) return(0);
return(1);
}
文字なので「%c」だと思って試すと「@」になってしまいます。
曜日の計算式は聞きましたが、それが何曜日になるのかが分からないのでご教授いただけないでしょうか
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int Leap_Year(int);
int Last_Day(int yy,int mm);
int Day_of_the_Week(int yy,int mm,int dd);
int main(void){
int Today=20100401;
int yy,mm,dd,Birth,nen;
int Ld[/url]={0,31,28,31,30,31,30,31,31,30,31,30,31};
do{
printf("生年=");
rewind(stdin);
scanf("%d",&yy);
}while(yy<1 || yy>(Today/10000));
do{
printf("生月=");
rewind(stdin);
scanf("%d",&mm);
}while(mm<1 || mm>12);
if(Leap_Year(yy)==1) Ld[2]=29;
else Ld[2]=28;
do{
printf("生日=");
rewind(stdin);
scanf("%d",&dd);
}while(dd<1 || dd>Ld[mm]);
Birth=yy*10000+mm*100+dd;
nen=(Today-Birth)/10000;
printf("年齢=%d\n",nen);
printf("曜日=%c\n",Day_of_the_Week);
rewind(stdin);
getchar();
return 0;
}
int Day_of_the_Week(int yy,int mm,int dd)
{
if(mm<3) {yy--; mm+=10;}
else {mm-=2;}
return((yy+(yy/4)-(yy/100)+(yy/400)+(13*mm+34)/5+dd)%7);
}
int Leap_Year(int);
int Last_Day(int yy,int mm)
{
if(mm==2) return(28+Leap_Year(yy));
else return((mm<8)? 30+mm%2:31-mm%2);
}
int Leap_Year(int yy)
{
if((yy%4)!=0) return(0);
if((yy%100)!=0) return(1);
if((yy%400)!=0) return(0);
return(1);
}