Tips

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)

 

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

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

問題

 

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

 

プログラム(test36.c)

1
2
3
4
5
6
7
#include <stdio.h>
 
int main(void){
  char str[10] = "Price:\100.";
  printf("%s\n", str);
  return 0;
}

 

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

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

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

1
gcc test36.c -o test36.exe -W -Wall

 

選択肢A,B,C

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

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

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

 

 

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

1
test36

 

選択肢A,B,C

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

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

解答

問1

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

 

問2

A.ファイルが実行され( Price:@. )と画面に表示される。

 

解説
問1,問2 ※以下、\がバックスラッシュに見えている場合は半角の¥に置き換えて読んでください。日本語環境では半角¥と半角\は同じ文字コードになっている環境があります。
今回は文字列を表示している。

表示したいのは

Price:\100.

という文字列である。

一見すると終端文字(\0)を入れて12文字あるが、それに対して準備した配列が短いため、コンパイルエラーが出たり、-W -Wallオプションにより警告が出たりしそうに見える。

しかし、実際にコンパイルしてみると一切警告やエラーは出ない。これは、\がエスケープ文字の役割を果たしているからである。\ooo(oは0~7の半角数字、3桁まで。)はoooを8進数として解釈させるエスケープ表現である。8進数の100は10進数の64であるが、ASCIIコードの64は@が割り振られている。

したがって、エスケープ後の文字列は

Price:@.

となり、終端文字込みで9文字であるためエラーは起こらない。

 

もし今回のプログラムでPrice:\100と表示したい場合は以下のようにする。文字数が変わるため、配列の要素数が12になっているので注意。

プログラム(test36_1.c)

1
2
3
4
5
6
7
#include <stdio.h>
 
int main(void){
  char str[12] = "Price:\\100.";
  printf("%s\n", str);
  return 0;
}

実行結果

1
2
3
>gcc test36_1.c -o test36_1.exe -W -Wall
>test36_1.exe
Price:\100.

 

 

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

 

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

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

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

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

Recent News

Recent Tips

Tag Search