2008 年度コンピュータIIIA(月曜3限)試験問題

解答は時間内に asakawa_comp3a@cis.twcu.ac.jp ヘメールで送信すること。件名は「exam-2008-自分の学生番号」とし、必ず自分宛に Cc: すること。解答のプログラムまたはプログラムの一部は添付ファイルにしてもよいし、メールの本文に直接書き込んでも良い。添付ファイルにする場合には、どのファイルがどの問に対応するかを明記すること。

問1

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

1-1)

int intPtr, x;

intPtr = &x;

1-2)

char *strPtr, string[30];

*strPtr = &string[0];

1-3)

int *intPtr;
double *dblPtr;

dblPtr = intPtr;

1-4)

int main(int argc, char *argv[])
{
   int i;
   for(i=0; i<argc; i++){
       printf("%s", atoi(argv[i]));
   }

問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' ){
               //ここを補う(&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{
/* ここに構造体の宣言が入る */

};

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