確認問題1の解答:変数、条件文、繰り返し文

問題1

int型の変数a,b,c,dの値がそれぞれ2,2,5,8であるとする。このとき、 以下の各式が真であれば「true」、偽であれば「false」と答えよ。

  1. a == b
  2. c == d
  3. a != c
  4. a < d
  5. b > c
  6. b * c <= d
  7. a % 2 == 0
  8. d % a == c

解答

  1. true
  2. false
  3. true
  4. true
  5. false
  6. false
  7. true
  8. false

問題2

xをint型、yをdouble型の変数とするとき、次の計算の結果を答えよ。

  1. x = 8 - 5 * 3 / 2;
  2. x = 8 - 5 * 3. / 2;
  3. y = 8 - 5 * 3 / 2;
  4. y = 8 - 5 * 3. / 2;
  5. x = 3 * 4 / 5;
  6. x = 3 * 4 / 5.0;
  7. y = 3 * 4 / 5;
  8. y = 3 * 4 / 5.0;

解答

  1. 1
  2. 0
  3. 1.0(または1.000000)
  4. 0.5 (0.500000)
  5. 2
  6. 2
  7. 2.0 (2.000000)
  8. 2.4 (2.400000)

問題3

下記のプログラムを実行した場合の出力結果を答えよ。

#include <stdio.h>

int main(void)
{
    int     x;
    double  y;

    x = 9 - 4 * 6 / 8 + 5;
    printf("x = %d\n", x);

    x = 20 + 2 * 9 / 6 - 15;  
    printf("x = %d\n", x);

    x = 9 % 5 + 4 * 4 - 3 / 6; 
    printf("x = %d\n", x);

    x = 2.7 / 3 + 0.11; 
    printf("x = %d\n", x);

    y = 3 / 5 * 5; 
    printf("y = %f\n", y);

    y = (double) 3 / 5 * 10; 
    printf("y = %f\n", y);

    y = 3 / 5 * (double)10; 
    printf("y = %f\n", y);

    return (0);
}

解答

x = 11
x = 8
x = 20
x = 1
y = 0.000000
y = 6.000000
y = 0.000000

問題4

次のプログラム(kadai.c)をコンパイルして実行させるまでの手順に関する下記 の問いに答えよ。

 1:#include <stduio.h>
 2:
 3:int main(void) 
 4:
 5:    int a, b;
 6:
 7:
 8:    printf(好きな整数を2つ入力してください。\n");
 9:    scanf(*****(1)*****);
10:
11:    printf("和 = %d\n", a+b):
12:    printf("差 = %d\n", a-b);
13:
14:    return0
15:
16:}
  1. 上記の(1)において、入力された2つの整数を変数a,bに代入したい。そのた めに必要な書式を(つまり、*****(1)*****に必要なもの)を答えよ。
  2. プログラム「kadai.c」をコンパイルするために、kterm上でどのように入力 すべきか答えよ。
  3. コンパイルの結果、エラーが表示され、コンパイルは成功しなかった。 「kadai.c」において、何行目に誤りが存在するか、また誤りを修正した正 しい解答を答えよ。
  4. 上記の修正を経て、コンパイルした結果、エラーが返されなかった。そこで 実行させるために、kterm上でどのように入力すべきか答えよ。

解答:

  1. "%d%d", &a, &b
  2. gcc kadai.c
    (または cc kadai.c)
    (gcc kadai.c -o kadai)
    (gcc -o kadai kadai.c)
  3. ./a.out
    (または、./kadai)

問題5

下記にはプログラムの一部が示されている。**********の行において、(1)-(3) の行を当てはめたときの出力結果を答えよ。

int i, sum;

sum = 0;
for (i=0; i<10; i++) {
    *******************
}
printf ("合計=%d\n", sum);
  1. sum += i;
  2. sum += i/2;
  3. sum += i/2.0;

解答:

  1. 合計=45
  2. 合計=20
  3. 合計=20

問題6

下記にはプログラムの一部が示されている。**********の行において、(1)-(3) の行を当てはめたときの出力結果を答えよ。

int i, sum;

*******************
for (i=1; i<=5; i++) {

    if (i % 2 == 0) {
        sum *=  i;
    } else {
        sum +=  i;
    }
}

printf ("sumの値は%dです。\n", sum);
  1. sum = 1;
  2. sum = 5;
  3. sum = 10;

解答:

  1. sumの値は33です。
  2. sumの値は65です。
  3. sumの値は105です。

問題7

次のプログラムで、イの部分が、

  1. m = 60
  2. m = 10

のそれぞれの場合について、画面に出力される結果をプログラムを書いて実行し、確認 せよ。

#include <stdio.h>

int main(void)
{
    int j, k, r, m;

    for(j=3,k=1,r=2,イ; m < 200; k++) {
        m *= r;
        if (k == j) printf("m = %d\n", m);
    }

    printf("k = %d\n", k);
    printf("m = %d\n", m);

    return (0);
}

解答:

  1. k = 3
    m = 240
  2. m = 80
    k = 6
    m = 320

課題8

次のプログラムの*********の部分に下のa)から e)までの 文をそれぞれ1つずつ挿入したときに、printf文によって表示される値を、プログラム を書いて実行し確認せよ。

int x=5, y=5, z=5;

***************************
printf("x=%2d y=%2d z=%2d\n" ,x, y, z);
  1. z = ++ y;
  2. z -= y --;
  3. z = x ++ - -- y;
  4. z *= ++ x - x;
  5. z += -- x * y ++;

解答:

  1. x= 5 y= 6 z= 6
  2. x= 5 y= 4 z= 0
  3. x= 6 y= 4 z= 1
  4. x= 6 y= 5 z= 0
  5. x= 4 y= 6 z= 25

須ア純一 京都大学大学院 工学研究科社会基盤工学専攻 空間情報学講座
[C言語 演習問題トップページ] [須ア純一ホームページ]