ちょっと横道

  1. 「西暦年数が100の倍数のときは400で割れる年、
    100の倍数でないときは4で割り切れる年を閏年とし、
    その他を平年とする。」
    をそのまま実現すると、



    /* 閏年か平年かを判定するプログラム */
    #include <stdio.h>
    
    main()
    {
    	int	n;
    
    	printf("西暦年を入力して下さい:");
    	scanf("%d", &n );
    
    	if( n % 100 == 0 )
    		if( n % 400 == 0 )
    			printf("%d 年は閏年です。\n", n );
    		else
    			printf("%d 年は平年です。\n", n );
    	else /* n % 100 != 0 */
    		if( n % 4 == 0 )
    			printf("%d 年は閏年です。\n", n );
    		else
    			printf("%d 年は平年です。\n", n );
    }
    /* end of leap00.c */
    /* 閏年か平年かを判定するプログラム */
    #include <stdio.h>
    
    main()
    {
    	int	n;
    
    	printf("西暦年を入力して下さい:");
    	scanf("%d", &n );
    
    	if( n % 100 == 0 )
    	{
    		if( n % 400 == 0 )
    			printf("%d 年は閏年です。\n", n );
    		else
    			printf("%d 年は平年です。\n", n );
    	}
            else /* n % 100 != 0 */
    	{
    		if( n % 4 == 0 )
    			printf("%d 年は閏年です。\n", n );
    		else
    			printf("%d 年は平年です。\n", n );
    	}
    }
    /* end of leap0.c */

  2. 「西暦年数が4で割り切れる年を閏年とし、
    さらに100で割り切れる年は平年に戻し、
    400で割り切れる年は再び閏年にする。」
    をそのまま実現すると、



    /* 閏年か平年かを判定するプログラム */
    #include <stdio.h>
    
    main()
    {
    	int	n;
    
    	printf("西暦年を入力して下さい:");
    	scanf("%d", &n );
    
    	if( n % 4 == 0 )
    		if( n % 100 == 0 )
    			if( n % 400 == 0 )
    				printf("%d 年は閏年です。\n", n );
    			else
    				printf("%d 年は平年です。\n", n );
    		else
    			printf("%d 年は閏年です。\n", n );
    	else
    		printf("%d 年は平年です。\n", n );
    }
    /* end of leap01.c */

  3. 条件判定(if)の条件を否定(not)してみると...



    /* 閏年か平年かを判定するプログラム */
    #include <stdio.h>
    
    main()
    {
    	int	n;
    
    	printf("西暦年を入力して下さい:");
    	scanf("%d", &n );
    
    	if( n % 4 != 0 )
    		printf("%d 年は平年です。\n", n );
    	else if( n % 100 != 0 )
    		printf("%d 年は閏年です。\n", n );
    	else if( n % 400 != 0 )
    		printf("%d 年は平年です。\n", n );
    	else
    		printf("%d 年は閏年です。\n", n );
    }
    /* end of leap02.c */

  4. 上のやり方では、「...閏年です。」とかの表示の仕方を変更する為には、
    2箇所ずつ同じように変更しなければならない。

    /* 閏年か平年かを判定するプログラム */
    #include <stdio.h>
    
    main()
    {
    	int	n;
    
    	printf("西暦年を入力して下さい:");
    	scanf("%d", &n );
    
    	if( 条件 )
    		printf("%d 年は閏年です。\n", n );
    	else
    		printf("%d 年は平年です。\n", n );
    }
    /* end of leap1.c */

  5. この様に判定条件が複雑な場合は、その部分を別の手続き(関数)として実現し、
    判定部分と結果の表示部分を分けて考えた方が良い
本道に戻る