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)
※問題文に書いてあるプログラムを実行する際は自己責任で実行してください。
※※各問題へのリンク一覧を作成しました。
問題
次のプログラムを作った。コンパイル、実行に関して以下の問いに答えよ。
プログラム(test50.c)
#include <stdio.h> int main(void){ int num = 0; switch(num){ case 0: printf("A"); if(0){ case 1: printf("B"); } if(0){ case 2: printf("C"); } printf("D"); default: printf("E"); } return 0; }
問1.次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。
A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の中の空欄を埋めよ。
なお、コマンドを入力する前はディレクトリ内には3つのファイル(test50.c)のみであり、それ以外のファイルはなかった。
gcc test50.c -o test50.exe -W -Wall -std=c99
選択肢A,B,C
A.コンパイルに成功して( 空欄1 )が生成される。
B.( 空欄1 )ためコンパイルエラーが起こる。
C.コマンドの( 空欄1 )の部分が間違っているためコンパイルが実行されない。
問2.その後、次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。 A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の空欄を埋めよ。
test50
選択肢A,B,C
A.ファイルが実行され( 空欄1 )と画面に表示される。
B.( 空欄1 )というファイルがないため実行できない。
C.コンパイルはされているが、( 空欄1 )という問題があるため実行は危険である。
解答
問1
A.コンパイルに成功して( test50.exe )が生成される。
問2
A.ファイルが実行され( ADE )と画面に表示される。
解説
問1,問2
今回はswitch文を利用している。一見するとswitch文の中のif(0)がおかしなように見える。しかし、このif(0)は次の1セクションを飛ばすという動きになる。
今回の場合、最初のcase文に引っかかると残りのif(0)が実行されるため、11行目や16行目は無視され20行目は実行される。また、breakが無いため23行目も実行される。
そのためADEと表示される。
うまく使えばswitch文の使い方が広がるが、ぱっと見の可読性はあまり高くない。チームのルールを確認し、気を付けて利用すること。
なお、今回は以下のサイトを参考に作成しました。ほかにも面白いコードが載っているので是非ご覧ください。
トリッキーコードネット – マニアック(トリッキー)なプログラミング情報が満載の中の以下のページ
実践力が身につくC言語講座 連載リンク
競技プログラミングをイメージしたライブラリ活用講座
競技プログラミング風-標準Cライブラリ入門 連載
アルゴリズムをマスターして技術力アップ!
実践アルゴリズム講座 連載
パズルゲームの解析をテーマにしたC++講座
ゲーム解析プログラミング 連載