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)
※問題に書いてあるプログラムを実行する際は自己責任で実行してください。
問題
次のプログラムを作った。コンパイル、実行に関して、以下の問いに答えよ。
プログラム(test02.c)
#include<stdio.h> #define MAX 1 + 2 int main(void){ int num = MAX * 100; printf("%d", num); return 0; }
問1.次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。
A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の中の空欄を埋めよ。
なお、コマンドを入力する前はディレクトリ内のファイルはtest02.cのみであった。
gcc test02.c
選択肢A,B,C
A.コンパイル成功して(空欄1)が生成される
B.(空欄1)行目でコンパイルエラー
C.コマンドの(空欄1)の部分が間違っているためコンパイルに失敗する
問2.その後、次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。 A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の空欄を埋めよ。
test02
A.(空欄1)というファイルが実行されて(空欄2)と表示される
B.(空欄1)というファイルがないため実行できない
問3.その後、次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。 A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の空欄を埋めよ。
a
A.(空欄1)というファイルが実行されて(空欄2)と表示される
B.(空欄1)というファイルがないため実行できない
解答
問1
A.コンパイル成功して(a.exe)が生成される
問2
B.(test02.exe)というファイルがないため実行できない
※補足:実行ファイルができていないということがわかっていれば正解とする
問3
A.(a.exe)というファイルが実行されて(201)と表示される
解説
問1
#defineというディレクティブを使用しているが、文法上の問題は特にないためコンパイルには成功する。
#defineディレクティブは、以下の書式になっている。
#define マクロ名 処理
#defineはプログラム中でマクロ名を指定すると、コンパイル時にその部分が処理に置き換わってコンパイルされるというディレクティブである。今回はプログラム中のMAXの部分が 1 + 2 に置き換わってコンパイルされることになる。
問2
コンパイル時に-oオプションを指定していないため、作成されるファイル名はaとなる。また、windows環境であるのでexeファイルになる。よって.a.exeが作成される。そのため、test02と指定しても実行されない。
問3
問2の通り、a.exeができており、そのファイルが実行される。実行結果は201と表示される。300ではない。
#defineディレクティブによるマクロが4行目で使用されている。
int num = MAX * 100;
一見するとnumには 3 * 100 = 300が代入されそうだが、実際にはコンパイル時にマクロが展開された際に4行目は以下のようになる。
int num = 1 + 2 * 100;
演算子の計算順位から、2 * 100 の処理が優先されるため、1 + 2 * 100 = 1 * 200 = 201となる。
実践力が身につくC言語講座 連載リンク
競技プログラミングをイメージしたライブラリ活用講座
競技プログラミング風-標準Cライブラリ入門 連載
アルゴリズムをマスターして技術力アップ!
実践アルゴリズム講座 連載
パズルゲームの解析をテーマにしたC++講座
ゲーム解析プログラミング 連載