見出し画像

C言語で Java Silver レベルの問題を作ってみる No.19

 プログラミング言語って、しばらく触れてないと細かな部分を忘れてしまいますよね。また、複数のプログラミング言語を習得している人は、頭がこんがりますね。

 そんな方におススメしたいのが、資格試験の問題を1日5問程度解いていく方法です。毎日のスキマ時間を活用して短時間で知識レベルを維持することが出来ますよ。Javaならば、Silverの問題集が最適です。
 Silverを既に取得している人も、これから取得を目指している人もぜひ試してみてください。

 さて、この記事では、タイトルの通り、C言語をテーマにしています。
問題を毎日5問投稿していきますので、C言語を習得中の方、C言語の知識を維持されたい方は、ぜひご活用ください。


■ 構造体

□ 1. 次のプログラムをコンパイルし、実行したときの結果として、正しいものを選びなさい。(1つ選択)

#include <stdio.h>

struct Data {
    int value;
};

void modify(struct Data *d) {
    d->value = 100;
}

int main(void) {
    struct Data data = {50};
    modify(&data);
    printf("Value: %d\n", data.value);
    return 0;
}

A.   「 Value: 50」と出力される
B. 「Value: 100」と出力される
C. 「Value: 0」と出力される
D. コンパイルエラーが発生する


□ 2. 次の構造体に関する説明として、正しいものを選びなさい。(1つ選択)

A. 構造体は異なるデータ型を持つことができる
B. 構造体は同じデータ型の集まりである
C.  構造体は常に固定長の配列である
D.    構造体はクラスのように継承をサポートしている


□ 3. 次のプログラムをコンパイルし、実行したときの結果として、正しいものを選びなさい。(1つ選択)

#include <stdio.h>

struct Point {
    int x;
    int y;
};

int main(void) {
    struct Point points[2] = {{1, 2}, {3, 4}};
    printf("%d, %d\n", points[0].x, points[1].y);
    return 0;
}

A. 1,2
B. 3,4
C. 2,3
D. 1,4

□ 4. 次のプログラムをコンパイルし、実行したときの結果として、正しいものを選びなさい。(1つ選択)

#include <stdio.h>

struct Rectangle {
    int width;
    int height;
};

int main(void) {
    struct Rectangle r1 = {10, 20};
    struct Rectangle r2 = r1; 
    printf("Width: %d, Height: %d\n", r2.width, r2.height);
    return 0;
}

A.  「Width: 10, Height: 20」と表示される
B.   「Width: 0, Height: 0」と表示される
C.    コンパイルエラーが発生する
D.    実行時エラーが発生する


□ 5. 次のプログラムのように構造体を定義する説明として、正しいものを選びなさい。(2つ選択)

#include <stdio.h>

typedef struct {
    int x;
    int y;
} Point;

int main(void) {
    Point p = {5, 10};
    printf("X: %d, Y: %d\n", p.x, p.y);
    return 0;
}

A.     typedef を使用すると、構造体や型に別名を付けることができ、コードの可読性が向上する。
B. typedef を使用すると、型名の長さをが短くすることもでき、コードを書く際の効率が向上する。
C. typedef を使用することで、ポインタ型の宣言を省略することができる。
D. typedef はプログラムの実行速度を向上させる効果がある。



解答

1.B

構造体定義:
struct Data という構造体を定義しています。この構造体は、整数型のメンバー value を持ちます。

関数定義:
modify という関数が定義されており、引数として struct Data 型のポインタ d を受け取ります。この関数では、d が指し示す構造体の value メンバーを 100 に設定します。d->value は、ポインタ経由で構造体のメンバーにアクセスするための構文です。

main 関数:
struct Data 型の変数 data を宣言し、初期値 50 を設定します。
modify 関数を呼び出し、data のアドレスを渡しています。これにより、関数内で data の value が変更されます。
最後に data.value を出力し、変更後の値を表示します。
出力結果は Value: 100 になります。これは、modify 関数によって value が 100 に設定されたためです。

2.A

A. 正しい。構造体は複数のメンバーを持つことができ、これらのメンバーは異なるデータ型で定義できます。

B. 誤り。構造体は異なるデータ型のメンバーを持つことができます。

C. 誤り。構造体は固定長の配列ではなく、任意のデータ型のメンバーを持つことができ、配列とは異なる構造です。

D. 誤り。C言語の構造体はオブジェクト指向の概念を持たず、クラスのような継承はサポートしていません。

したがって、正しい選択肢は A です。

3.D

このプログラムでは Point という構造体が定義されています。
また、points という配列が Point 構造体のインスタンスで初期化されています。
points[0] は {1, 2} であり、x は 1、y は 2 です。
points[1] は {3, 4} であり、x は 3、y は 4 です。

printf()で、points[0].x とpoints[1].yが出力されますので、
points[0].x の 1 
points[1].y の4 
が出力されます。

4.A

このプログラムでは、Rectangle という構造体が定義されており、width と height という二つの整数型メンバーを持ちます。
r1 という構造体のインスタンスが初期化され、width は 10、height は 20 になります。
r2 に r1 を代入しています。この操作は、r1 の全てのメンバーの値を r2 にコピーします。したがって、r2.width は 10、r2.height は 20 になります。
printf()で r2.width と r2.height の値が出力されます。結果として「Width: 10, Height: 20」と表示されます。

5.A B

A. 正しい。typedef により、型に分かりやすい名前を付けることで、コードの可読性が向上します。
B. 正しい。型名が短くなることで、コードを書く際の手間が軽減されます。
C. 誤り。typedef は型名を別名にするだけで、ポインタ型の宣言を省略するものではありません。
D. 誤り。typedef は型の別名を定義するものであり、実行速度には影響を与えません。



本日の学習内容

お疲れ様でした。
継続は力なりです。
明日も頑張りましょう!


この記事が気に入ったらサポートをしてみませんか?