情報領域演習第一:P演習

電気通信大学情報理工学域I類 (情報系)
2018年度後学期


[一覧に戻る]


課題G0

課題Gでは,C言語のポインタに関する演習を行う.

例えば,次のような問題を考える.

問題

関数 void swap(int *ap, int *bp) を使って,int型へのポインタ変数 ap, bpが指すint型の数値*ap, *bpを交換し,ポインタ変数 ap が指す数値を *bp,ポインタ変数 bp が指す数値を *ap としたい.
そのような関数 void swap(int *ap, int *bp) を作成せよ.それを用いて,与えられた2つの整数を,与えられた順とは逆順に出力するプログラムを作成せよ.

入力仕様

出力仕様

入力    => 出力
3 2     => 2 3
-10 10  => 10 -10
987 654 => 654 987

進め方

  1. まず,Emacsなどのエディタを使ってプログラムを作成する.例えば,g0.cというファイル名で,次の内容を持つファイルを作成する.Emacsを起動するためには,ターミナルで,「emacs &」と入力すればよい.
    #include <stdio.h>
    
    void swap(int *ap, int *bp) {
      int t;
      t = *ap;
      *ap = *bp;
      *bp = t;
      return;
    }
    
    int main(void) {
      int a, b;
      scanf("%d %d", &a, &b);
      swap(&a, &b);
      printf("%d %d\n", a, b);
      return 0;
    }
    
    このプログラムの動きを理解することは重要であるので,分からない場合は考えるか,質問をすること.
  2. プログラムを作成したら,「例」通りにプログラムが動くのか試す.ターミナル上で「gcc」を用いてコンパイルし,実行してみよ.
    % gcc g0.c
    % ./a.out
    3 2 ← 自分で入力する
    2 3 ← プログラムの出力が返ってくる
    % ./a.out
    -10 10 ← 自分で入力する
    10 -10 ← プログラムの出力が返ってくる
    %
    
    「例」に書かれているものだけではなく,自分で考えた例についても実行して,正しく動いていそうか確認するとよい.
  3. 例通りに動いていることを確認したら,チェッカを動かして,本当によいか確認する.チェッカの動かし方は「提出法」に書いてある.

    提出法

    CED (CentOS) にて,プログラムを作成したディレクトリで以下を実行せよ.
    % ~oa000833/enshu1p/checker_g0.rb ソースファイル名
    
    例えば,g0.cというファイルを作成したならば,次のコマンドを実行する.
    % ~oa000833/enshu1p/checker_g0.rb g0.c
    
    ここで「%」はコマンドプロンプトを意味するので,入力してはならない.

    「Submission successfully completed.」と表示されれば,提出が完了したことになる. それ以外の表示がされている場合は,プログラムにおかしなところ (バグ) があるか,入力したコマンドが間違っている.確認して,提出完了となるまで試してみよ.分からない場合は,教員かTAに質問をせよ.

    なお,checkerは入力と出力の関係が正しいかどうかだけを確認していて,プログラムが問題文通りに作られているかどうかまで確認していない.例えば,この課題の場合,swapという関数を作成しなくても,Submission successfully completedとなる場合がある.注意すること.


[一覧に戻る]


[Teaching Top] [Top]
okamotoy@uec.ac.jp