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)
※問題文に書いてあるプログラムを実行する際は自己責任で実行してください。
※※各問題へのリンク一覧を作成しました。
問題
次のプログラムを作った。コンパイル、実行に関して以下の問いに答えよ。
プログラム(test29.c)
1 2 3 4 5 6 7 8 9 10 | #include <stdio.h> int main( void ){ int num[][] = { {0, 1, 2, 3},{10, 11, 12, 13},{20, 21, 22, 23} }; printf ( "num[1][2] = %d" , num[1][2]); return 0; } |
問1.次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。
A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の中の空欄を埋めよ。
なお、コマンドを入力する前はディレクトリ内のファイルはtest29.cのみであった。
1 | gcc -o test29.exe test29.c |
選択肢A,B,C
A.コンパイルに成功して( 空欄1 )が生成される。
B.( 空欄1 )ためコンパイルエラーが起こる。
C.コマンドの( 空欄1 )の部分が間違っているためコンパイルが実行されない。
問2.その後、次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。 A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の空欄を埋めよ。
1 | test29 |
選択肢A,B,C
A.ファイルが実行され( 空欄1 )と画面に表示される。
B.( 空欄1 )というファイルがないため実行できない。
C.コンパイルはされているが、( 空欄1 )という問題があるため実行結果は不定であり、実行は危険である。
解答
問1
B.( numの第二次元の要素数が指定されていない )ためコンパイルエラーが起こる。
問2
B.( test29.exe )というファイルがないため実行できない。
解説
問1,問2
今回は二次元配列を利用している。二次元配列は以下のように宣言、利用する。
int型で第一次元が3、第二次元が4のnumという配列の宣言および使用例
1 2 3 | int num[3][4]; num[0][0] = 1; printf ( "num[0][0] = %d\n" , num[0][0]); |
初期化子を使用する場合は以下のように宣言しても良い。
1 | int num[][4] = { {0,1,2,3},{10,11,12,13},{20,21,22,23} }; |
今回は初期化子を用いて以下のように二次元配列を宣言している。
1 | int num[][] = { {0,1,2,3},{10,11,12,13},{20,21,22,23} }; |
一見すると問題無いように見える。しかし、test29.cでは、第二次元の要素数を指定していない。C言語の場合、多次元配列で初期化子を利用しても、省略できるのは第一次元の要素数のみである。従って、該当箇所でコンパイルエラーが出る。
今回のプログラムは以下のようにすればコンパイル、実行ができる。
プログラム(test29_1.c)
1 2 3 4 5 6 | #include <stdio.h> int main( void ){ int num[][4] = { {0, 1, 2, 3},{10, 11, 12, 13},{20, 21, 22, 23} }; printf ( "num[1][2] = %d" , num[1][2]); return 0; } |
実行結果
1 2 3 | > gcc test29_1.c -o test29_1.exe >test29 num[1][2] = 12 |
実践力が身につくC言語講座 連載リンク
競技プログラミングをイメージしたライブラリ活用講座
競技プログラミング風-標準Cライブラリ入門 連載
アルゴリズムをマスターして技術力アップ!
実践アルゴリズム講座 連載
パズルゲームの解析をテーマにしたC++講座
ゲーム解析プログラミング 連載