情報科学演習
2012.12.03

Back to index page



  1. 本日の作業内容

  2. 宿題の結果について

    今回はコンパイルエラーはありませんでした.しかし,無限ループのものが残念ながら出てきました.採点対象外です.

    b1140

    以下は,いつものように問題のある答案です.まずは,次のもの.

            for(i=1;i<=9;i++)
                    printf("   %d",i);
                    printf("  10  Average\n");
    

    インデントもおかしいですが,それ以前に %d 記法の基本を忘れているので,無用な場合分けが入っています.他にも必要の無い if 文を使用した例なども多く見られました.注意してください.

            printf("  1   2   3   4   5   6   7   8   9  10   Average\n");
    

    上のは例によって,絶対にやっちゃダメなものです.2年生以上に多く見られたのが残念です.

            for(i=1;i<=10;i++){
                    printf(" %2d ",i);
                    i;
            }
    

    上のものはよくわからない i; だけの行があります.何なのでしょうか?

                            b = rand( ) % 899 + 100;
    

    乱数の間違いは今年度は減ったと思いますが,依然として上のような間違いが出てきます.どうして理解できないのか,よくわかりません.

    以下はいつものようにインデントの悪い例です.わからない人は質問してください.

            printf("  average");
            printf("\n");
                    for(l=1;l<=10;l++){
                    sum=0;
                    i=rand()%6+5;
                    for(m=1;m<=i;m++){
                    j=rand()% 900 + 100;
                    printf("%d " ,j);
                    sum += j;
                    }
                    for(;m<=10;m++){
                    printf("    ");
                    }
                    sum=sum/i;
                    printf("  %7.1f\n",sum);
            }
    
    	printf("  average");
    	printf("\n");
    	for(l=1;l<=10;l++){
    		sum=0;
    		i=rand()%6+5;
    		for(m=1;m<=i;m++){
    			j=rand()% 900 + 100;
    			printf("%d " ,j);
    			sum += j;
    		}
    		for(;m<=10;m++){
    			printf("    ");
    		}
    		sum=sum/i;
    		printf("  %7.1f\n",sum);
    	}
    

                    for(l=1; l<=44-4*a; l++)
                    printf(" ");
                    printf("%.1f\n",sum/a);
    

                   for(j=1;j<=b;j++){
                            a = rand() % 900 + 100;
                            sum += a;
                            printf("%d ", a);
                    }
                            for(n=1;n<=44-b*4;n++)
                                    printf(" ");
    

  3. 前回の復習

    for 文が始まると,変数の値がループが回るたびにどのように変わっていくのか,十分に把握しておく必要があるのですが,そこをフォローするのが難しいのも事実です.そのため,変数の値の遷移をノートなどで確認していくことが重要です.例えば,以下のように考えてみましょう.

    #include <stdio.h>
    
    main()
    {
    	int i, j;
    	
    	for(i=0; i<=5; i++){             //  <- loop1
    		for(j=0; j<i; j++)        //  <- loop2
    			printf("   ");
    			
    		for(j=i; j<=i+5; j++){      //  <- loop3
    			printf("%2d ", j);
    		}
    		
    		printf("\n");
    	}
    	
    	return(0);
    }
    

    のようなプログラムで変数 i j がどのように変わっていくのか見てみましょう.

    loop1loop2loop3
    ijj
    0-0
    1
    2
    3
    4
    5
    10-
    -1
    2
    3
    4
    5
    6
    20-
    1
    -2
    3
    4
    5
    6
    7
    - - - -
    50-
    1
    2
    3
    4
    -5
    6
    7
    8
    9
    10

    この変数の変化と実際の実行結果との対応を考えてみてください.

  4. 多重の for

    前回に引き続き多重のループの練習を今日も行いますが,ループの処理の学習の 初期には変数の値がどのように変化しているのか,注意して行くと間違いに気づ いたり,処理の無駄に気づいたりということが多いので,分からなくなってきた ら,メモ用紙などに変数の値の遷移を書いて見直してみてください.

  5. 実習

    実習の演習問題は当日ご案内します.

  6. 次回の予習範囲

    教科書のp.42からp.48の while 文を予習してきてください.

    なお,来週10日(月)は出張のため休講です.御注意下さい.

  7. 宿題

    授業の終わりに宿題の案内をします.ただし,問題を見ることができるのは4日以降です.

    10.184.10.130/report/

    にアクセスして問題を見てください.

    今回は提出期限は12/17(月)の10:00です.


目次ページに戻る