Tips

C言語練習問題

C言語練習問題

環境について

C言語の練習問題です。※2016年11月21日修正

開発環境は以下の通り。コンパイラ、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)

 

※問題文に書いてあるプログラムを実行する際は自己責任で実行してください。

※※各問題へのリンク一覧を作成しました。

問題

次のプログラムを作った。コンパイル、実行に関して以下の問いに答えよ。

※プログラムの一部を修正 2016.11.21.

修正前

int value = num == 0 ? (value = 0) : num == 1 ? (value = 1) : (value = 2);

修正後

int value;

num == 0 ? (value = 0) : num == 1 ? (value = 1) : (value = 2);

 

プログラム(test46.c)

#include <stdio.h>

int main(void){
 
  int num = 1;
  int value;
  num == 0 ? (value = 0) : num == 1 ? (value = 1) : (value = 2);
  printf("num = %2d\n\r", num);
  printf("value = %2d\n\r", value);
 
  return 0;
}

 

問1.次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。

A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の中の空欄を埋めよ。

なお、コマンドを入力する前はディレクトリ内のファイルはtest46.cのみであった。

gcc test46.c -o test46.exe -std=c99

 

選択肢A,B,C

A.コンパイルに成功して( 空欄1 )が生成される。

B.( 空欄1 )ためコンパイルエラーが起こる。

C.コマンドの( 空欄1 )の部分が間違っているためコンパイルが実行されない。

 

 

問2.その後、次のコマンドをコマンドプロンプトから打ち込んだ。どのような結果になるか。 A,B,Cの選択肢から適切なものを選べ。また、選んだ選択肢の空欄を埋めよ。

 test46

 

選択肢A,B,C

A.ファイルが実行され( 空欄1 )と画面に表示される。

B.( 空欄1 )というファイルがないため実行できない。

C.コンパイルはされているが、( 空欄1 )という問題があるため実行は危険である。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

解答

問1

A.コンパイルに成功して( test46.exe )が生成される。

 

問2

A.ファイルが実行され(

num   = 1
value = 1

)と画面に表示される。

 

解説
問1,問2

今回は条件演算子を利用している。C言語では条件演算子を入れ子構造にして利用することもできる。

最初の条件演算子がtrueとなり、次の条件演算子がfalseとなるため、valueは1となる。

 

そのため、今回のプログラムは問題なくコンパイル・実行が出来る。ただし、条件演算子をネストすると可読性が問題になることが多い。コーディング規約を確認してから使用すること。

 

参考:

以下の様に改行とインデントを利用して記述すると可読性が良くなることがある。チームで確認したうえで適宜利用すること。

※プログラムの一部を修正 2016.11.21.

修正前

int value = num == 0 ? (value = 0)
                        : num == 1 ? (value = 1) 
                                   : (value = 2);

修正後

int value;

num == 0 ? (value = 0)
         : num == 1 ? (value = 1) 
                    : (value = 2);

プログラム(test46_1.c)

#include <stdio.h>

int main(void){
 
  int num = 1;
  int value;
  num == 0 ? (value = 0) 
           : num == 1    ? (value = 1) 
                         : (value = 2);
  printf("num = %2d\n\r", num);
  printf("value = %2d\n\r", value);
 
  return 0;
}

実行結果

>gcc test46_1.c -o test46_1.exe -std=c99
>test46_1.exe
num = 1
value = 1

 

他の問題へのリンク一覧はこちら

 

実践力が身につくC言語講座 連載リンク

競技プログラミングをイメージしたライブラリ活用講座
競技プログラミング風-標準Cライブラリ入門 連載

アルゴリズムをマスターして技術力アップ!
実践アルゴリズム講座 連載

パズルゲームの解析をテーマにしたC++講座
ゲーム解析プログラミング 連載

Recent News

Recent Tips

Tag Search