Tips

C言語練習問題

C言語練習問題

環境について

C言語の練習問題です。

開発環境は以下の通り。

PC:MacBook Pro 2011early 15inch

OS:Windows 8.1(デュアルブート)

メモリ:16GB(8GB x 2)

CPU:Core i7-2635QM 2.00GHz

コンパイラ:MinGW-w64 5.3.0 (posix, sjlj)

 

※問題文に書いてあるプログラムを実行する際は自己責任で実行してください。

※※各問題へのリンク一覧を作成しました。

 

問題

次のプログラムを作った。コンパイル、実行に関して以下の問いに答えよ。

 

プログラム(test23.c)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct Student{
  char name[16];
  int age;
}Student_t;
 
int main(void){
 
  Student_t* student = (Student_t*)malloc(sizeof(Student_t));
  student.age = 20;
  strcpy(student.name, "TECH");
  printf("Hello, my name is %s!!\n", student.name);
 
  free(student);
 
  return 0;
}

 

問1.次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。

A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の中の空欄を埋めよ。

なお、コマンドを入力する前はディレクトリ内のファイルはtest23.cのみであった。

1
gcc -o test23.exe test23.c

 

選択肢A,B,C

A.コンパイルに成功して( 空欄1 )が生成される。

B.( 空欄1 )ためコンパイルエラーが起こる。

C.コマンドの( 空欄1 )の部分が間違っているためコンパイルが実行されない。

 

 

問2.その後、次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。 A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の空欄を埋めよ。

1
test23

 

選択肢A,B,C

A.ファイルが実行され( 空欄1 )と画面に表示される。

B.( 空欄1 )というファイルがないため実行できない。

C.コンパイルはされているが、( 空欄1 )という問題があるため実行結果は不定であり、実行は危険である。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

解答

問1

B.( studentのメンバへのアクセスする際の演算子がおかしい )ためコンパイルエラーが起こる。

※該当内容が指摘できていれば正解とする。解説参照。

 

問2

B.( test23.exe )というファイルがないため実行できない。

 

解説

問1,問2

今回は構造体を利用している。

以前の練習問題で扱ったように、構造体を利用する場合はmalloc関数やfree関数を利用する必要がある。そのためstdlib.hをincludeしている。

構造体の要素(メンバ)にアクセスする際にはドット演算子( . )かアロー演算子( -> )を用いる。構造体のメンバに直接アクセスする際にドット演算子を利用し、構造体型のポインタが示す構造体のメンバにアクセスする際にアロー演算子を利用する。

 

malloc関数で確保出来るのは、該当するアドレスへのポインタである。従ってmalloc関数で準備した構造体のメンバにアクセスする際にはアロー演算子を用いる。

今回の場合、下記のように記述すればコンパイル、実行が可能。

 

プログラム(test23_1.c)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct Student{
  char name[16];
  int age;
}Student_t;
 
int main(void){
 
  Student_t* student = (Student_t*)malloc(sizeof(Student_t));
  student->age = 20;
  strcpy(student->name, "TECH");
  printf("Hello, my name is %s!!\n", student->name);
 
  free(student);
 
  return 0;
}

実行結果

1
2
3
>gcc -o test23_1.exe test23_1.c
>test23_1
Hello, my name is TECH!!

 

他の問題へのリンク一覧はこちら

実践力が身につくC言語講座 連載リンク

競技プログラミングをイメージしたライブラリ活用講座
競技プログラミング風-標準Cライブラリ入門 連載

アルゴリズムをマスターして技術力アップ!
実践アルゴリズム講座 連載

パズルゲームの解析をテーマにしたC++講座
ゲーム解析プログラミング 連載

Recent News

Recent Tips

Tag Search