2008 年度コンピュータIIA(月曜3限)試験問題解答例

問 1

次のプログラムの断片は誤りである。その誤りを指摘せよ。

1-1)

整数型の変数 intPtr に x のアドレスを代入しようとしている。

1-2)

strPtr の前の * (アスタリスク)が要らない。

strPtr = &string[0];

1-3)

ポインタ型の変数に互換性がないにもかかわらず代入しようとしている。

1-4)

printf()の第一引数が "%s" ではなく "%d" でなければならない。

問2.

入力された文章を逆順に印刷するプログラム reverse.c を作りたい。例えば, "this is a pen." と入力すると
.nep a si siht
と出力するように。以下のソースコードの抜けている部分を補って正しく動く ようにせよ。
解答を以下に示す。

#include <stdio.h>

void reverse(char *str);

int main(void)
{
       char str[100];

       printf("文章を入力してください:");
       gets(str);

       reverse(str);
       printf("\n");
       return 0;
}

void reverse(char str[])
{
       if ( str[0] != '\0' ){
               reverse(&str[1]);
               putchar(str[0]);
       }
}

問3

次のプログラムは,コマンドラインの引数を順に印刷するプログラムである。 ところが一カ所誤りがあって正しく動作しない。正しく動作するように修正 せよ。
解答を以下に示す。

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

 for(i=0; i<argc; i++)
   printf("argv[%d]=%s\n", i, argv[i]);

 return 0;
}

問4

次のプログラムには構造体の宣言が抜けている。構造体 health は 文字列へのポインタ *name と double 型の変数 height と weight が入る。 正しく動作するように構造体の宣言の部分を書け。

#include <stdio.h>
#include <stdlib.h>

struct health{
 char *name;
  double height;
  double weight;
};

int main(void)
{
 double bmi;
 struct health h;

 h.name = (char *)malloc(100*sizeof(char));

 printf("氏名を入力してください。");
 scanf("%s", h.name);
 printf("%sの身長(m)を入力してください。", h.name);
 scanf("%lf", &h.height);
 printf("%sの体重(kg)を入力してください。", h.name);
 scanf("%lf", &h.weight);

 bmi = h.weight / (h.height * h.height);

 printf("BMI(体格指数)は%fです。\n", bmi);
 printf("判定は");
 if (bmi <= 17.5)
   printf("やせすぎです。\n");
 else if(bmi <= 19.7)
   printf("やせ気味です。\n");
 else if(bmi <= 24.1)
   printf("標準です。\n");
 else if(bmi <= 26.3)
   printf("ふとり気味です。\n");
 else
   printf("肥満です。\n");

 free(h.name);

 return 0;
}

Back to Shin's Home Page

Shin-ichi ASAKAWA
asakawa@ieee.org