題目1: 準備

ヒント

実験1

8桁の2進数を読み込み,それを10進数に変換して出力するプログラムを作れ.対象となる数値は 0 以上 256 未満の整数に限定してよい.ただし,プログラムは 以下の条件を満たすこと.

  1. 2進数は (長さ8の) int配列を使って表現すること.なお,その配列は main 関数内で宣言すること.

  2. 2進数の変換には専用の関数 convertBinaryToDecimal を作ること.

    /* 引数 binary は,2進数の格納先である配列 (正確にはその先頭ポインタ) */
    /* 戻り値は,変換後の10進数 */
    int convertBinaryToDecimal (int binary[])
    {
      ...
    }
    
  3. プログラミングの際は,実験テキストに示されているようなコーディングスタイルに注意して作成すること.

ソースコードの記述例

#include <stdio.h>

int convertBinaryToDecimal(int binary[]) {
  int i, p, answer;

  /* 以下のソースコードはヒントではあるが,配列 binary の内容を使っていないため
     このままでは間違いである */
  answer = 0;
  p = 1;
  for (i = 0; i < 8; i++) {
    answer += p;
    p *= 2;
  }

  return answer;
}

int main(void) {
  int binary[8];

  /* binary[0] ~ binary[7] へキーボードから入力された 0, 1 を代入する
     (この部分は自分で考えて書くこと) */
  printf("%d\n", convertBinaryToDecimal(binary));

  return 0;
}

入出力例

  • プログラムへの入力例

    $ ./a.out
    0 0 0 0 1 0 0 1
    
  • プログラムからの出力例

    9
    

[必須ではないが作成を推奨する]
2進数の最上位ビットを符号ビットとして扱い,128 〜127 を出力とできるプログラムを作成せよ.ただし,負数は2の補数によって表現されているものとする.

実験2

実験1において自作した関数 (main を除く) をヘッダファイルへ移動させよ. そして,main関数を残したソースコードを,include 文で自作関数を読み込んで使うように変更せよ.

実験3

1個以上のテキストファイルの内容を行番号付きで表示するプログラムを作れ. 表示の対象となるファイルの名前はコマンドライン引数で与えられるものとする.

例えば,以下のようにプログラムを実行したとする.

./a.out foo.txt bar.txt

この実行結果では,foo.txt というファイルの内容が1行目から順に

1: ....... (foo.txt の内容)
2: .......
...
30: ...... 

という具合いに行番号付きで表示され, 引き続いて bar.txt の内容が以下のように表示される.

1: ...... (bar.txt の内容)
2: ......
...
100: ..... 

指定されたファイルの読み出しに失敗した場合はそのファイルの表示をスキップ (無視) する.

ソースコードの記述例

#include <stdio.h>

int main(int argc, char* argv[]) {
  FILE* fp;
  int i, c;

  /* 以下のコードはヒントではあるが,行番号を表示する機能,
     ファイル読み込みに失敗した場合のエラー処理を行っておらず,このままでは未完成である */
  for ( i = 1; i < argc; i++ ) {
    fp = fopen(argv[i], "r");
    while ( (c = fgetc(fp)) != EOF ){
      putchar(c);
    }
    fclose(fp);
  }

  return 0;
}

[必須ではないが作成を推奨する]
テキストファイル中で,所定の文字列が含まれている行だけを,行番号付きで表示するプログラムを作れ.対象となる文字列とテキストファイルの名前は,コマ ンドライン引数としてプログラム実行時に与えられるものとする.指定されるテキストファイルの個数は1個に限定して構わないが,複数個のファイルにも対応 できる方が望ましい.