解答例16-3

【問1】

#include <stdio.h>

/* 曜日の列挙型の宣言 */
enum week {SUN, MON, TUE, WED, THU, FRI, SAT};

enum week youbi( int y, int m, int d );

int main( void )
{
	int yy, mm, dd;
	enum week w;

	printf( "西暦を入力しなさい" );
	scanf( "%d", &yy );
	printf( "月を入力しなさい" );
	scanf( "%d", &mm );
	printf( "日を入力しなさい" );
	scanf( "%d", &dd );

	/* 曜日の算出 */
	w = youbi( yy, mm, dd );

	printf( "%d年%d月%d日は", yy, mm, dd );
	switch( w ) {
	case SUN:
		printf( "日曜日です\n" );
		break;
	case MON:
		printf( "月曜日です\n" );
		break;
	case TUE:
		printf( "火曜日です\n" );
		break;
	case WED:
		printf( "水曜日です\n" );
		break;
	case THU:
		printf( "木曜日です\n" );
		break;
	case FRI:
		printf( "金曜日です\n" );
		break;
	case SAT:
		printf( "土曜日です\n" );
		break;
	default:
		printf( "エラーです\n" );
	}

	return 0;
}

/*** 曜日取得関数 ***/
enum week youbi( int y, int m, int d )
{
	int w;

	if( m == 1 || m == 2 ) {
		y = y - 1;
		m = m + 12;
	}
	/* Zellerの公式 */
	w = ( 5 * y/4 - y/100 + y/400 + ( 26 * m + 16 ) /10 + d ) % 7;

	return ( enum week ) w;
}

戻る


banner初心者のためのポイント学習C言語」
Copyright(c) 2000-2004 TOMOJI All Rights Reserved