プログラミング入門I 実習課題 2018.11.26

Back to text page


実習課題

  1. switch 文の基本1

    10以上20以下の整数を乱数により1つ発生させ,それが偶数(Even)か奇数(Odd)かを答えるプログラムを作成しましょう.

    Random number: 17
    Odd
    

  2. switch 文の基本2

    0から23の範囲の整数を乱数により1つ発生させ,それを24時間制の時刻とするとき,午前(A.M.)か午後(P.M.)かを答えるプログラムを作成しましょう.

    Time: 17
    P.M.
    

    12時から午後ということにします.
  3. case 句の簡略化

    switch 文の「定数式」の部分には整数値や文字(文字列では無い)を判定 するものしか使用できません.また, case 句は必ず「文」や break を必要とする訳でもありません.そこで,先週の月と日数の問題を switch を使用したものに変更してみましょう.不要な break などの省略を工夫してみましょう.

    日数を表示するための printf 文および break は3回しか使用しません.
  4. 前問と同様な簡潔な処理の練習をします.1から20までの整数をどれか一つ発生させて,それが素数かどうかを表示するプログラムを switch 文を上手く工夫してなるべく簡潔に作りましょう.

    13: prime number
    

    素数でない場合には数字だけを表示させます.

    素数の判別は本来は自動で行うのがスマートなプログラムですが,今回はあらかじめ素数が分かっているものとして処理を考えてください.素数の自動検出はこの後 for 文のところで改めて行います.
  5. 曜日

    1から30までの整数をどれか一つ乱数により発生させ,それを今月の日にちとする.その日が何曜日かを答えるプログラムを作成せよ.

    Nov. 26: Monday
    

    曜日の規則性をまず考えてください.
  6. Liverpool FC 対サンフレッチェ広島FCの夢の対決を今度は switch 文で書いてみましょう.0~3の範囲の整数を乱数により2つ発生させて,それぞれを両チームの得点とします.勝ち負け,もしくは,引き分けの表示を行います.

    Liverpool 0 - 1 Sanfrecce 
    Winner: Sanfrecce Hiroshima FC
    

  7. if 文と switch 文の処理時間の違い

    以下に示すのはまったく意味の無い判別処理を1億回繰り返す際の if 文と switch 文の処理速度の違いを計測するものです.if else で一番下(21回の条件判断)の else の処理を1億回繰り返す場合と,同じような判断(完全に同じでは無いですが)を switch 文で行う場合の比較です.試してみてください.

    #include <stdio.h>
    #include <time.h>
    
    int main(void)
    {
    	int i, num = 100000;
    	clock_t t1, t2;
    	
    	t1 = clock();
    	
    	for(i=1; i<=100000000; i++)
    		if(num<=100)
    			num = 100;
    		else if(num<=200)
    			num = 200;
    		else if(num<=300)
    			num = 300;
    		else if(num<=400)
    			num = 400;
    		else if(num<=500)
    			num = 500;
    		else if(num<=600)
    			num = 600;
    		else if(num<=700)
    			num = 700;
    		else if(num<=800)
    			num = 800;
    		else if(num<=900)
    			num = 900;
    		else if(num<=1000)
    			num = 1000;
    		else if(num<=1100)
    			num = 1100;
    		else if(num<=1200)
    			num = 1200;
    		else if(num<=1300)
    			num = 1300;
    		else if(num<=1400)
    			num = 1400;
    		else if(num<=1500)
    			num = 1500;
    		else if(num<=1600)
    			num = 1600;
    		else if(num<=1700)
    			num = 1700;
    		else if(num<=1800)
    			num = 1800;
    		else if(num<=1900)
    			num = 1900;
    		else if(num<=2000)
    			num = 2000;
    		else if(num<=3000)
    			num = 3000;
    		else
    			num = 100000;
    		
    	t2 = clock();
    		
    	printf("Process time of if_else: %5.2f sec\n", (double)(t2 - t1) / CLOCKS_PER_SEC);
    		
    	t1 = clock();
    		
    	for(i=0; i<=100000000; i++)
    		switch(num){
    			case 100:	num = 100;
    						break;
    			case 200:	num = 200;
    						break;
    			case 300:	num = 300;
    						break;
    			case 400:	num = 400;
    						break;
    			case 500:	num = 500;
    						break;
    			case 600:	num = 600;
    						break;
    			case 700:	num = 700;
    						break;
    			case 800:	num = 800;
    						break;
    			case 900:	num = 900;
    						break;
    			case 1000:	num = 1000;
    						break;
    			case 1100:	num = 1100;
    						break;
    			case 1200:	num = 1200;
    						break;
    			case 1300:	num = 1300;
    						break;
    			case 1400:	num = 1400;
    						break;
    			case 1500:	num = 1500;
    						break;
    			case 1600:	num = 1600;
    						break;
    			case 1700:	num = 1700;
    						break;
    			case 1800:	num = 1800;
    						break;
    			case 1900:	num = 1900;
    						break;
    			case 2000:	num = 2000;
    						break;
    			case 3000:	num = 3000;
    						break;
    			default:	num = 100000;
    						break;
    		}
    	
    	t2 = clock();
    		
    	printf("Process time of switch:  %5.2f sec\n", (double)(t2 - t1) / CLOCKS_PER_SEC);
    	
    	return(0);
    }
    
    


Back to text page