プログラミング入門 情報科学演習
2017.01.30

Back to index page



  1. 本日の作業内容

  2. 宿題の結果について

    今回も残念ながら採点の対象外の答案が出てしまいました.気をつけましょう.

    コンパイルエラー: b1629 b1556

    コアダンプ: b1569

    そして久しぶりに大馬鹿者が出てきました.情けないです.この二人も採点対象外です.

    大馬鹿者: b1664 b1669

    さて,今回は大体は良かったのですが,一部に問題も見られました.以下はその例ですので,参考にしてください.

                    a = rand()%100 + 1;
    

    まだ乱数の発生範囲についてよくわかっていない人がいます.そろそろきちんと理解して欲しいです.

            for(i=0; i<=6;i++)
                    for(j=0; j<=7;j++)
    

    大小比較を行って値を入れ替えるときに,一回終わっている部分を参照しないようにしましょう.これまでの解答例でも示していますし.

            for(i=0;i<=7;i++){
                    for(j=i+1;j<=7;j++){
    

    意外とこの書き方も多かったです.これも前回説明したのですが,変数 i の範囲が最適ではないので,余分に1回ループが回ります.

            for(i=0; i<=7;i++){
                    a=strlen(class[i]);
                    printf("%s  ",class[i]);
                    if(a==3)
                            printf(" ");
            }
    

    原点はしていませんが,こんな苦労をしなくても printf には便利な機能がありますし,教科書のp.69にある例題5.6にも載っていますがね.

            for(i=0; i<=7; i++){
                    for(j=i+1; j<=8; j++){
    

    これは添字と配列の要素数が理解できていない例ですね.

            int a, i, j, score[8][2]={{0,0},{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0}}, tmp;
    

    こういう初期化はもういいかげん for 文使ってやりませんか?

            for(i=0;i<=7;i++){
                    num=rand()%101;
                    record[i][1]=num;
                    record[i][0]=i;
                    ary[i]=strlen(class[i]);
    
                    for(j=0;j<=ary[i];j++){
                            printf("%c",class[i][j]);
                    }
                    if(ary[i]<=3){
                                    printf(" ");
                            } 
                    printf("  ");
            }
    

    苦労していますね.その割にはよくない結果のはずでしたが?添字と要素の数はちょっと違いますからね.でも,結果を less に渡してみれば気づくはずですけど.

    
    Eng^@   Math^@  Phys^@  Chem^@  Bio^@   Geo^@   Law^@   Econ^@  
      14    50     4    33    34    26    70    85  
    
    Econ^@  Law^@   Math^@  Bio^@   Chem^@  Geo^@   Eng^@   Phys^@  
      85    70    50    34    33    26    14     4  
    

            for(i=0;i<2;i++){                               
                    for(j=0;j<8;j++){                                               
            
                            if(i==0)                                
                                    printf("%-4s  ", class[j]);                     
                            if(i==1){
                                    record[j][1] = rand () % 101;
                                    record[j][0] = j;                               
                                    printf("%4d  ", record[j][i]);
                            }
                    }
                    printf("\n");
            }
    

    これも変なことになっていませんかね.

            for(i=0;i<8;i++){
                    record[i][0]=i;
                    record[i][1]=rand()%101;
                    num=strlen(class[i]);
                            if(num==4){
                                    printf("%s  ",class[i]);
                            }
                            else{
                                    printf("%s   ",class[i]);
                            }       
            }
    

    面倒くさいやりかたですね.

            record[0][0] = 0;
            record[0][1] = rand() % 101;
            printf("%4d",record[0][1]);
            for(i=1;i<=7;i++){
                    record[i][0] = i;
                    record[i][1] = rand() % 101;
                    printf("%6d",record[i][1]);
            }
    

    for 文の前の余分な1回は何?

  3. 期末試験について

    期末試験ですが,いつものように柱の部分の席を避けて座ってください.席の指定はありません.また,教科書やノートの持込は可能ですし,過去のテキストや種々の解答例 \(^o^)/ の参照も可能です.ただし,他の学生の画面を見るのは禁止です.

    携帯電話は電源を切ってカバンの中に入れてください.携帯電話が鳴動した場合には不正行為として扱うことがありますので,注意してください.

    また,4コマ目と5コマ目の受講生の入れ換えですが,短期間で不正な行動を制限する方法として以下のようにしますので,御了解下さい.

    • 1年生は,試験終了後は教室前側の扉から廊下に出て,東側エレベータもしくは非常階段で移動してください.西側へは移動できません.

    • 過年度生は1年生が退室するまで教室西側出入口付近および廊下で待機してください.1年生が退室した後着席できます.

  4. 解答用紙

    本日の作業で,模擬的に練習する解答用紙はこれを使用します.これ自身がプログラムですので,使い方に注意してください.

    提出の必要はありませんが,コンパイル等の作業は必ず行ってください.

  5. 実習

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

  6. メンター学習室について

    2/1(水)が最後のメンター学習室となります.それ以外の時間でも質問などありましたら,縄手まで連絡してください.


目次ページに戻る