C言語練習問題
C言語練習問題
環境について
C言語の練習問題です。
開発環境は以下の通り。コンパイラ、OSともに64bit環境である。
PC:MacBook Pro 2011early 15inch
OS:Windows 8.1(デュアルブート) 64bit版
メモリ:16GB(8GB x 2)
CPU:Core i7-2635QM 2.00GHz
コンパイラ:MinGW-w64 5.3.0 (posix, sjlj)
※問題文に書いてあるプログラムを実行する際は自己責任で実行してください。
※※各問題へのリンク一覧を作成しました。
問題
次のプログラムを作った。コンパイル、実行に関して以下の問いに答えよ。
プログラム(test42.c)
1 2 3 4 5 6 7 8 9 | #include <stdio.h> int main( void ){ int i = 0; for ( ;i < 10 ; i++) printf ( "%d " , i); printf ( "Hello" ); return 0; } |
問1.次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。
A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の中の空欄を埋めよ。
なお、コマンドを入力する前はディレクトリ内のファイルはtest42.cのみであった。
1 | gcc test42.c -o test42.exe -std=c99 |
選択肢A,B,C
A.コンパイルに成功して( 空欄1 )が生成される。
B.( 空欄1 )ためコンパイルエラーが起こる。
C.コマンドの( 空欄1 )の部分が間違っているためコンパイルが実行されない。
問2.その後、次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。 A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の空欄を埋めよ。
1 | test42 |
選択肢A,B,C
A.ファイルが実行され( 空欄1 )と画面に表示される。
B.( 空欄1 )というファイルがないため実行できない。
C.コンパイルはされているが、( 空欄1 )という問題があるため実行は危険である。
解答
問1
A.コンパイルに成功して( test42.exe )が生成される。
問2
A.ファイルが実行され( 0 1 2 3 4 5 6 7 8 9 Hello )と画面に表示される。
解説
問1,問2
今回はfor文を用いて数字とHelloを繰り返し画面に表示するプログラムに見える。
一見するとfor文の初期化の部分が空欄だったり、for文の後ろに{ }が無かったりと、うまくいかないように見える。
あるいは、数字とHelloを表示するprintf関数の両方がfor文の対象になっているようにも見える。
C言語の場合、for文は、後ろに{ }が無くても構文としては間違っていない。また、{ }が無い場合、for文の直後の分だけがfor文の対象になる。
よって、数字の表示部分のみがfor文で繰り返され、Helloはfor文が終了した後に表示される。
for文などの基本構文で2文以上を繰り返し対象にしたい場合は、{ }で括る必要がある。
今回のようなソースコードは構文としては間違っていないが、見間違いや勘違いを引き起こす可能性がある。ソースコードの可読性やバグの混入の可能性を考え、チームでコーディング規約を適切に定めてコーディングを行うこと。
おまけ:
言語によってはインデントによってブロックの判断を行っているものもある(pythonなど)ので、言語毎の仕様をきちんと確認すること。
参考:pythonの場合※インデントはタブや空白で同じ高さになるように行う。詳細は省略。詳しく知りたい方はご自身で調べてください。
test42_python.py
1 2 3 | for i in range ( 10 ): print (i) print ( 'Hello' ) |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | >py test42_python.py 0 Hello 1 Hello 2 Hello 3 Hello 4 Hello 5 Hello 6 Hello 7 Hello 8 Hello 9 Hello |
実践力が身につくC言語講座 連載リンク
競技プログラミングをイメージしたライブラリ活用講座
競技プログラミング風-標準Cライブラリ入門 連載
アルゴリズムをマスターして技術力アップ!
実践アルゴリズム講座 連載
パズルゲームの解析をテーマにしたC++講座
ゲーム解析プログラミング 連載