2001 年度コンピュータ基礎及演習 I テスト模範解答

オペレーティングシステム

マイクロソフトウィンドウズなどのオペレーティングシステムは、様々な機能 を提供している。OS の提供する機能に関して、次の問いに答えなさい。

  1. カットバッファとはなにか?

    編集作業などで、削除したものを一時的に貯めておく記憶領域

  2. カットバッファの使い方を、例を挙げて説明しなさい。

    カットバッファは「削除」「コピー」「貼り付け」により操作する。 「削除」は指定した領域を削除し、削除したものをカットバッファに保存する。 「コピー」は指定した領域を、削除せずにカットバッファに保存する。 「貼り付け」はカットバッファの内容をポインタで示した指定位置に挿入する。

    例えば、 abcdefghi という文字列に対して、 def が指定領域だとする。 この時、「削除」を行うと、文字列は abcghi となり、カットバッファの内容は def になる。 一方、「コピー」を行うと、文字列は abcdefghi のままで、カットバッファの内容は def になる。 カットバッファの内容が def の時、文字列 jklmnop の l と m の間を指定して「貼り付け」を行うと、文字列は jkldefnop になる。

  3. ファイルとはなにか説明しなさい。

    データの集まり。コンピュータでは名前をつけて管理する。

  4. 標準入力、標準出力とはなにか説明しなさい。

    コマンド行で実行されるプログラムが仮定している入力ファイルと、出力ファイル。通常はそれぞれキーボードと画面出力が割り当てられる。 但し、リダイレクトにより入出力ともファイルに割り当てることが可能。

マイクロソフト製品

  1. マイクロソフト社のワードやエクセルが作る標準のファイル(.doc や .xls)を電子メールの添付ファイルとして送るのは問題がある場合がある。 どのような場合問題があり、またどのような場合に問題がないか説明しなさい。

    問題点としては次のことが考えられる。 相手先にマイクロソフトワードやエクセルがない場合、内容を読むことができない。 また、一般にこれらのファイルは内容に比べて巨大なサイズになるため、内容の割に相手に負担させる通信料がかさむ。 さらにこれらのファイルはコンピュータウィルスが感染する。 従って、相手がこれらのファイルを受信することと、それに伴うデメリットを了承していれば問題ないが、了承していない場合は迷惑をかけることになる。 一方、了承していればソフトウェアの専用ファイルであるため、情報を利用する際に、ソフトウェアの機能を全て使うことができる。

  2. エクセルで作成した情報を添付ファイルを使用せずに電子メールで送る 手順を説明しなさい。

    1. 情報をテキストファイルまたは CSV 形式でセーブする
    2. メモ帳などでセーブした内容を表示する。
    3. メールソフトを起動する。
    4. メモ帳に表示されている内容をカット & ペーストしてメールに貼り込む。

プログラミング1

次のプログラムを読み、各問いに答えなさい。

#include <stdio.h>
main(){
  int a=5;
  float b=2718E-3;
  char c='c';
  char d[]="abcdef";

  printf("%a %b\n%c\n%d\n",a,b,c,d);
}  

問い

  1. 上記のプログラムは誤っている。誤りを指摘し、誤っている行を書き直 しなさい。(特にカンマとピリオドなど、各記号の違いが明確になるように注 意しなさい)
    printf("%d %f\n%c\n%s\n",a,b,c,d);
    
  2. 直したプログラムを実行するとどのような出力がでるか?
    5 2.718
    c
    abcdef
    

プログラミング2

次のプログラムを読み、各問いに答えなさい。

#include <stdio.h>
main()
{
  float a=3.0;
  float b=6.0;
  float x;

  printf("%fx + %f = 0",a,b);
  if(a!=0){
    x=b/a;
    printf("解は\%f。\n ",x);
  }else{
    if(b!=0){
      printf("(A)");
    }else{
      printf("任意の x は式を満す。\n");
    }
  }
}

問い

  1. このプログラムはなにをするプログラムか説明しなさい。

    方程式 ax+b =0 を解くプログラムである。

  2. 上の(A)にはどのような文字が入るか答えなさい。

    「解なし」

  3. このプログラムは一箇所間違っている。その間違いを指摘し、間違いを 直しなさい。
    x=b/a; → x=-b/a;
    
  4. (A)を正しく設定し、誤りを直したプログラムに対して、次の問いに答 えなさい。
    1. このプログラムを実行するとなにを出力するか?
      3.00000 x + 6.00000 = 0 解は -2.00000
      
    2. 次のように a,b が設定されているとき、なにが出力されるか?
      1.   float a=2.0;
          float b=1.0;
        
        2.00000 x + 1.00000 = 0 解は -0.50000
        
      2.   float a=0.0;
          float b=1.0;
        
        0.00000 x + 1.00000 = 0 解なし
        
      3.   float a=0.0;
          float b=0.0;
        
        0.00000 x + 0.00000 = 0 任意の x は式を満たす。
        

プログラミング3

次のプログラムを読み、各問いに答えなさい。

#define BUFSIZE 512
#include <stdio.h>

main()
{
  char c,a[BUFSIZE];
  int i,j;

  for(i=0;i<5;i++){
    j=0;
    while((c=getchar())!='\n'){
      a[j]=c;
      j++;
    }
    a[j]='\0';
    printf("%s\n",a);
  }
}

問い

  1. このプログラムはなにを行うものか説明しなさい。

    入力を 5 行読んで表示するプログラム

  2. このプログラムは重大な欠陥がいくつかある。どのような欠陥か説明しなさい。

    EOF を考慮していない。つまり、 5 行以内にファイルが終ると誤動作する。

  3. この欠陥を取り除くにはプログラムの流れを変更しなければならない。 どのように変えればよいか日本語で説明しなさい。 (日本語で説明できない場合は、 C 言語でプログラムを書き直しても良い)

    一文字ずつ読む度に EOF かを判断し、 EOF でなく 5 行以内であれば表示するようにする。

    #include <stdio.h>
    main(){
      int n;
      char c;
    
      while(((c=getchar())!=EOF)&&(n<5)){
        printf("%c",c);
        if(c=='\n'){
          ++n;
        }
      }
    }