C言語編 第3章 変数 解答ページ

先頭へ戻る

問題①

問題① 次のうち、変数名として使えないものを全て選んで下さい。


変数名として使えないものは、「double」と「123」の2つです。「double」は、変数の型として使われているキーワードなので、変数名としては使えません。「123」は、数字だけの名前なので、やはり変数名としては使えません。

小文字と大文字は区別されるので、キーワードである小文字の「return」は使えませんが、「RETURN」なら使えます。ただ、紛らわしいので使わない方が良いでしょう。

「_123」は、変数名として使用できますが、先頭が「_」で始まる名前は、 コンパイラの実装のために予約されているので、避けるべきです。

問題②

問題② 不定値を、printf関数で出力してみて下さい。


次のようなプログラムを作成して、実行してみます。

#include <stdio.h>

int main(void)
{
	int num;
	
	printf( "%d\n", num );

	return 0;
}

実行結果:



コンパイルを行ったときに、警告が出ることもあるでしょう。 警告は、エラーと違って実行は可能ですが、本来は警告も取り除くべきです。

ここでは、警告を無視して実行しますが、その結果は不定です。 いきなり、エラーメッセージが出て終了するかも知れませんし、何かよく分からない値が出力されるかも知れません。 これは危険なプログラムの典型ですから、変数の初期化は忘れずに行う必要があります。 ここで知っておいて欲しいことは、初期化を忘れたら、どんな結果になるか不明で、まったく予想できないということです。

問題③

問題③ printf関数の "%d" 変換指定子を使って、浮動小数点数を出力するとどうなるか試してみて下さい。


これも簡単なプログラムで実験できます。

#include <stdio.h>

int main(void)
{
	printf( "%d\n", 3.141592 );

	return 0;
}

実行結果:

-57999238

円周率の冒頭部分を "%d" で出力してみました。 実行結果は、まったく違う値になります。 この結果から分かるように、浮動小数点数を "%d" で出力するからといって、 小数点以下だけが無視されるような結果にはなりません。

問題②と同様、これも危険なプログラムになり得ます。 こちらの場合は、警告すら出さないコンパイラもあるので、うっかり間違える可能性を否定できません。 printf関数は、何かと危険をはらんでいることを意識しましょう。

問題④

問題④ 次のプログラムの実行結果を答えて下さい。

#include <stdio.h>

int main(void)
{
    int a = 10;
    int b = 20;
    
    printf( "a: %d, b: %d\n", a, b );
    
    a = b;
    printf( "a: %d, b: %d\n", a, b );
    
    b = 30;
    printf( "a: %d, b: %d\n", a, b );
    
    a = b;
    printf( "a: %d, b: %d\n", a, b );

    return 0;
}


宣言と同時に初期化を行っており、まずは変数a の値は 10、変数b の値は 20 です。

次に、「a = b;」として、変数b の値を変数a へコピーしています。変数b の値は 20 でしたから、変数a の値も 20 になります。

次に、「b = 30;」として、変数b の値が 30 に上書きされます。変数a は無関係なので 20 が入ったままです。

次に、「a = b;」として、変数b の値を変数a へコピーしています。変数b の値は 30 になっているので、変数a の値も 30 になります。

ということで、実行結果は以下のようになります。

実行結果:

a: 10, b: 20
a: 20, b: 20
a: 20, b: 30
a: 30, b: 30


参考リンク



更新履歴

'2018/5/11 章のタイトルを変更(「変数を宣言する」->「変数」)
練習問題に問題④を追加。

'2018/5/4 用語を統一(予約語 -> キーワード)

'2018/1/27 全面的に文章を見直し、修正を行った。

'2011/2/5 単に「小数」と表記していた箇所を「浮動小数点数」に改めた。

'2008/9/14 新規作成。



第3章のメインページへ

C言語編のトップページへ

Programming Place Plus のトップページへ


このエントリーをはてなブックマークに追加
rss1.0 取得ボタン RSS