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)
※問題文に書いてあるプログラムを実行する際は自己責任で実行してください。
※※各問題へのリンク一覧を作成しました。
問題
次のプログラムを作った。コンパイル、実行に関して以下の問いに答えよ。
プログラム(test16.c)
#include <stdio.h> #include "myStruct.h" int main(void){ Student_t* student = (Student_t*)malloc(sizeof(Student_t)); printf("Hello World!\n"); student->age = 20; printf("%d", student->age); free(student); return 0; }
プログラム(myStruct.h)
typedef struct Student{ char name[16]; int age; }Student_t;
問1.次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。
A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の中の空欄を埋めよ。
なお、コマンドを入力する前はディレクトリ内のファイルはtest16.cとmyStruct.hの2つのファイルのみであった。
gcc -o test16.exe test16.c -O3
選択肢A,B,C
A.コンパイル成功して(空欄1)が生成される
B.(空欄1)ためコンパイルエラー
C.コマンドの(空欄1)の部分が間違っているためコンパイルが実行されない
問2.その後、次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。 A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の空欄を埋めよ。
test16
選択肢A,B,C
A.ファイルが実行され(空欄1)と画面に表示される。
B.(空欄1)というファイルがないため実行できない
C.コンパイルはされているが、実行ファイルに(空欄1)という問題があるため実行ができない
解答
問1
B.( stdlib.hをincludeしていない )ためコンパイルエラー
※該当内容が指摘できていれば正解とする。解説参照。
問2
B.( test16.exe )というファイルがないため実行できない
解説
問1,問2
今回は構造体を利用しており、構造体の定義はヘッダファイルに記述している。
構造体を利用するにはmalloc関数でメモリを確保している。malloc関数で確保した領域は使い終わったらfree関数で開放する必要がある。
malloc関数やfree関数はstdlib.hに定義されているため、stdlib.hを取り込んでいないとこれらの関数を使用する部分でコンパイルエラーが発生する。そのことが指摘できていれば正解。
なお、今回のソースコードは次のようにすればコンパイル、実行が可能になる。myStruct.hは問題文と同様。
#include <stdio.h> #include <stdlib.h> #include "myStruct.h" int main(void){ Student_t* student = (Student_t*)malloc(sizeof(Student_t)); printf("Hello World!\n"); student->age = 20; printf("%d", student->age); free(student); return 0; }
結果は以下の通り。
Hello World! 20
実践力が身につくC言語講座 連載リンク
競技プログラミングをイメージしたライブラリ活用講座
競技プログラミング風-標準Cライブラリ入門 連載
アルゴリズムをマスターして技術力アップ!
実践アルゴリズム講座 連載
パズルゲームの解析をテーマにしたC++講座
ゲーム解析プログラミング 連載