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)
※問題文に書いてあるプログラムを実行する際は自己責任で実行してください。
※※各問題へのリンク一覧を作成しました。
問題
次のプログラムを作った。コンパイル、実行に関して以下の問いに答えよ。
プログラム(test12.c)
#include<stdio.h> int main(void){ for(int i = 0; i < 10; i++){ printf("%d",i); } return 0; }
問1.次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。
A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の中の空欄を埋めよ。
なお、コマンドを入力する前はディレクトリ内のファイルはtest12.cのみであった。
gcc test12.c -o test12.exe -O3 -std=c89
選択肢A,B,C
A.コンパイル成功して(空欄1)が生成される
B.(空欄1)の部分でコンパイルエラー
C.コマンドの(空欄1)の部分が間違っているためコンパイルが実行されない
問2.その後、次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。 A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の空欄を埋めよ。
test12
A.ファイルが実行され(空欄1)と画面に表示される。
B.(空欄1)というファイルがないため実行できない
C.コンパイルはされているが、実行ファイルに(空欄1)という問題があるため実行ができない
解答
問1
B.( for(int i = 0; i < 10; i++){ )の部分でコンパイルエラー
問2
B.( test12.exe )というファイルがないため実行できない
解説
問1,問2
今回はfor文を使用している。問題になったのは以下の部分。
for(int i = 0; i < 10; i++){ }
この構文は、java等では問題が無い。また、c99準拠のプログラムであれば問題ない。しかし、今回はコンパイルオプションで-std=c89と指定しており、c89準拠でコンパイルを行っている。c89では、for文を書くのと同時にループカウンタを宣言することができない。そのため、該当箇所でコンパイルエラーが発生する。
c89準拠では例えば以下のようにすればコンパイルできる。
int i = 0; for(i = 0; i < 10; i++){ }
※1行目の宣言時の初期化はしなくても良いが、初期化せずに使用するとどんな値か不明であり危険。変数は使用前のタイミングで必ず初期化を行うこと。
-O3は、最適化用のオプションで、このプログラムでは動作内容にほとんど影響がない。
-stdオプションはコンパイラの準拠するC言語の規格を指定する。今回はc89準拠になるようにしている。他にもgnu99やc11などを指定することができる。(各規格ごとの内容は省略)
実践力が身につくC言語講座 連載リンク
競技プログラミングをイメージしたライブラリ活用講座
競技プログラミング風-標準Cライブラリ入門 連載
アルゴリズムをマスターして技術力アップ!
実践アルゴリズム講座 連載
パズルゲームの解析をテーマにしたC++講座
ゲーム解析プログラミング 連載