Tips

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)

 

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

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

問題

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

 

プログラム(test44.c)

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main(void){
  int x = 0;
  int y = 100;
  x > 0 ? y = 1 : y = 2;
  
  printf("y = %d", y);
  
  return 0;
}

 

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

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

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

1
gcc test44.c -o test44.exe -std=c99

 

選択肢A,B,C

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

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

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

 

 

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

1
test44

 

選択肢A,B,C

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

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

解答

問1

B.( 条件演算子の部分がおかしい )ためコンパイルエラーが起こる。

 

問2

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

 

解説
問1,問2

今回は条件演算子を利用している。C言語では条件演算子は以下のような処理を行う。

条件 ? 条件が真のときの処理 : 条件が偽のときの処理

今回は以下のように利用している。

1
x > 0 ? y = 1 : y = 2;

一見すると正しいように見えるが、この式は

(条件) ? (真の時の処理) : (偽の時の処理)

の形になっていない。

※挙動から、(条件) ? y = (真の時のyの値 : 偽の時のyの値) = 2 と解釈されてコンパイルエラーになっているものと推測される。

1
x > 0 ? y = 1 : (y = 2);

と記述すれば筆者環境では正しく動く。ただし、最後のみ( )で括るのは可読性が高くない。可読性も考慮し、以下のような書き方ができる。

1
(x > 0) ? (y = 1) : (y = 2);

チームのコーディング規約を確認の上、使用すること。

サンプル

最後のみ( )を付けた場合

プログラム(test44_1.c)

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main(void){
  int x = 0;
  int y = 100;
  x > 0 ? y = 1 : (y = 2);
  
  printf("y = %d", y);
  
  return 0;
}

実行結果

1
2
3
>gcc test44_1.c -o test44_1.exe -std=c99
>test44_1.exe
y = 2

 

すべてに( )を付けた場合

プログラム(test44_2.c)

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main(void){
  int x = 0;
  int y = 100;
  (x > 0) ? (y = 1) : (y = 2);
  
  printf("y = %d", y);
  
  return 0;
}

実行結果

1
2
3
>gcc test44_2.c -o test44_2.exe -std=c99
>test44_2.exe
y = 2

 

三項演算子は書き方によってはプログラムが難読になり、読み間違いにつながることもある。

コーディング規約を確認してから使用すること。

 

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

 

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

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

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

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

Recent News

Recent Tips

Tag Search