剰余を求める〜何故switchなのか?〜

 入力した整数を4で割った余りを求めて、入力した数と共に、表示するプログラムの色々 →即練習問題へ
  1. 余りが0なのか、1なのか、2なのか、をif文で判定すると...



    /* 4で割った余りを求めて表示するプログラム */
    #include <stdio.h>
    
    main()
    {
    	int	n;
    
    	printf("整数を入力して下さい:");
    	scanf("%d", &n );
    
    	if( n % 4 == 0 )
    		printf("%d を4で割った余りは、0です。\n", n );
    	else if( n % 4 == 1 )
    		printf("%d を4で割った余りは、1です。\n", n );
    	else if( n % 4 == 2 )
    		printf("%d を4で割った余りは、2です。\n", n );
    	else /* n % 4 == 3 */
    		printf("%d を4で割った余りは、3です。\n", n );
    }
    /* end of mod0.c */

  2. 剰余を毎回計算しているのは無駄だから...

    /* 4で割った余りを求めて表示するプログラム */
    #include <stdio.h>
    
    main()
    {
    	int	n, r;
    
    	printf("整数を入力して下さい:");
    	scanf("%d", &n );
    
    	r = n % 4;
    	if( r == 0 )
    		printf("%d を4で割った余りは、0です。\n", n );
    	else if( r == 1 )
    		printf("%d を4で割った余りは、1です。\n", n );
    	else if( r == 2 )
    		printf("%d を4で割った余りは、2です。\n", n );
    	else /* r == 3 */
    		printf("%d を4で割った余りは、3です。\n", n );
    }
    /* end of mod1.c */

  3. この様なelse ifを書き連ねるのに疲れたら...



    /* 4で割った余りを求めて表示するプログラム */
    #include <stdio.h>
    
    main()
    {
    	int	n, r;
    
    	printf("整数を入力して下さい:");
    	scanf("%d", &n );
    
    	r = n % 4;
    	switch( r ) /* 実は変数 r は不要で switch( n%4 ) で良い! */
    	{
    	case 0:
    		printf("%d を4で割った余りは、0です。\n", n );
    		break;
    	case 1:
    		printf("%d を4で割った余りは、1です。\n", n );
    		break;
    	case 2:
    		printf("%d を4で割った余りは、2です。\n", n );
    		break;
    	case 3: 
    		printf("%d を4で割った余りは、3です。\n", n );
    		break;
    	default: /* 此処には絶対に来ないから、上の case 3: は default: でも良い! */
    		printf("此処には来ないはず!\n");
    		break; /* 一般に最後の break; は不要! */
    	}
    }
    /* end of mod2.c */

  4. 実は、余りを表示するだけなら、もっとスマートに実現できる!

    /* 4で割った余りを求めて表示するプログラム */
    #include <stdio.h>
    
    main()
    {
    	int	n, r;
    
    	printf("整数を入力して下さい:");
    	scanf("%d", &n );
    
    	r = n % 4;
    	printf("%d を4で割った余りは、%dです。\n", n, r );
    	/* 後でこの余り(r)を使わないのなら、
    	printf("%d を4で割った余りは、%dです。\n", n, n%4 );
    	と、変数 r も使わなくて良い! */
    }
    /* end of mod3.c */

  5. これでは練習にならないので、次のように仕様を変更!

      仕様

    1. 整数をキー入力する
    2. その数nが4で割り切れるときは、「nは4で割り切れます。」と表示し、
      その数nが4で割り切れないときは、「nを4で割った余りは、rです。」と余り求めて表示する
      例:「26を4で割った余りは、2です。」
    /* 4で割った余りを求めて表示するプログラム */
    #include <stdio.h>
    
    main()
    {
    	int	n, r;
    
    	printf("整数を入力して下さい:");
    	scanf("%d", &n );
    
    	/* さーぁ考えよう! */
    }
    /* end of mod4.c */


  6. こんなこともできるぞ!〜switch文の便利な使い方〜

      仕様

    1. 整数をキー入力する
    2. その数nが偶数か奇数か、そして4で割った余りを表示する
      例:「26 は偶数で、4で割った余りは、2です。」
    /* 偶奇を判定し、4で割った余りを求めて表示するプログラム */
    #include <stdio.h>
    
    main()
    {
    	int	n, r;
    
    	printf("整数を入力して下さい:");
    	scanf("%d", &n );
    
    	switch( r = n % 4 ) /* 代入式の値は左辺値の値となる */
    	{
    	case 0:
    	case 2:
    		printf("%d は偶数で、4で割った余りは、%dです。\n", n, r );
    		break;
    	case 1:
    	case 3: 
    		printf("%d は奇数で、4で割った余りは、%dです。\n", n, r );
    		break; /* 一般に最後の break; は不要! */
    	/* 上で全ての場合が尽されているので、
    	default:
    	は不要! */
    	}
    }
    /* end of mod5.c */

戻る