C入門3 課題

1. Cの授業をすると、決まって、「次のようなプログラムを書いたけど様子がおかしい」という質問を受けます。
  教員はなんと答えるとよいでしょう。

#include <stdio.h>

int main(void)
{
    int x = 10;
    printf("変数の中身は%dです。\n", x);
    return 0;
}

 A printfのあたりをよく見てみましょう。
 B %dが全角ですぜ。(こういうのは半角で書こうね。)
 C よくあることだよ。
 D その他(どうせなら、おもしろい解答募集)

2. Cの授業をすると、決まって、「次のようなプログラムを書いたけど様子がおかしい」という質問を受けます。
  教員はなんと答えるとよいでしょう。(ちなみに、これは危険なプログラムです。)

#include <stdio.h>

int main(void)
{
    int x;
    printf("整数を入力してください:");
    scanf("%d", x);
    printf("入力した整数は%dですね。", x);
    return 0;
}

 A scanfのあたりをよく見てみましょう。
 B &が抜けてやすぜ。
 C これもよくあることなんだ。
 D その他

3. Cの授業をすると、決まって、「コンパイルしたら、エラーメッセージが20個もでました」
  「もういやです」という質問(?)を受けます。
  教員はなんと答えるとよいでしょう。

 A エラーを出さないプログラマなんかいないよ。
 B 一箇所のミスが複数のエラーに数えられてるだけで、そんなにエラーはないと思うよ。
   まず、一番上のエラーメッセージを見て、そこら辺を直してみましょう。
 C 私はいつも「エラーが200個を超えたのでこれ以上コンパイルできません」というメッセージを出してるよ。
   そういうの見たことある?
 D コンパイルエラーってかわいいじゃん。(実行時エラーは怖い。)

4. 次のプログラムをコンパイルするとエラーになります。どうしてでしょうか。
  答がわかっても、一度、コンパイルしてエラーを見ておいてください。

#include <stdio.h>

int main(void)
{
    printf("整数を入力してください:");
    int x;
    scanf("%d", &x);
    printf("あなたが入力した値は%dですな。\n", x);
    return 0;
}

5. 次のプログラムは、コンパイル・実行できるでしょうか?
  実行できた場合、どのようになるでしょうか?
  まず、考えてから、試してください。
  このようなコメントをどう思いますか?

/***********************************
  プログラム名 :sum.c
  用途     :足し算
  Copyright (c):Ken Kobayashi
************************************/
#include <stdio.h>

int main(void)
{
    int a, b;
    printf("整数を入力してください:");
    scanf("%d", &a);
    printf("整数を入力してください:");
    scanf("%d", &b);
    printf("和:%d", a + b);
    return 0;
}

6. 「コメントのないプログラムはバグだ」という人がいます。
  一方で、「コメントはなるべくいれない方がよい」という人もいます。
  以下の例を参考に(しなくてもいいです)、両者の主張の理由を推測し、自分の考えを述べてください。

/***********************************
  プログラム名 :sub.c
  用途     :引き算
  Copyright (c):Ken Kobayashi
************************************/
#include <stdio.h>

int main(void)
{
    /* int型変数aとbを用意する */
    int a, b;
    /* 整数入力をうながす */
    printf("整数を入力してください:");
    /* ユーザの入力を変数aに受け取る */
    scanf("%d", &a);
    /* 整数入力をうながす */
    printf("整数を入力してください:");
    /* ユーザの入力を変数bに受け取る */
    scanf("%d", &b);
    /* 和を出力する */
    printf("差:%d", a - b);
    return 0;
}

7. ユーザに現在の年齢を入力してもらい、

現在の年齢 :(現在の年齢)
5年後の年齢 :(5年後の年齢)
10年後の年齢:(10年後の年齢)

のように出力するプログラムを書いてください。ただし、「(現在の年齢)」などには、実際の数値が入るとします。

8. 本文解説(C入門3)で見たように、足し算は「+」で表わされます。引き算は「-」、掛け算は「*」、割り算は「/」です。
  つまり、aとbを数値型の変数(数値をいれる変数)としたときに

  a + b :aとbを足したもの
  a - b :aからb引いたもの
  a * b :aとbを掛けたもの
  a / b :aをbで割ったもの

という意味になります。(ただし、整数の場合、割り算の答は、小数点以下切り捨てになります。)
 これから、問5のプログラムを改造して、ユーザが入力した2つの整数の和差積商を計算して表示するものにしてください。実行結果は、次のようになるようにします。

和:(足し算の答)
差:(引き算の答)
積:(掛け算の答)
商:(割り算の答)

ただし、「(足し算の答)」などには、実際に計算した答の数値が入るものとします。

(おまけ) 問8のような課題を出す意図はなんだと思いますか?


解答例

C入門3
C入門目次
ホーム