Monday, June 14, 2010

[C++]-Lesson 1 : 画面への出力とキーボードからの入力

LinuxにGCCをインストールすればコンパイルして実行することは可能です。

How to Compile C++ with gcc:-
Single source file programs:
    Compile:
        $ g++ / $ c++ 
        $ g++ file.cpp / $ c++ file.cpp

    Display Result:
        ./a.out

    Set output file name option:
        $ g++ file.cpp -o prog1

Multiple source file programs:-
    Compile each separately and then link them into a.out
        $ g++ -c file.cpp
        $ g++ -c other.cpp
        $ g++ file.o other.o

    Compile each separately and then link them into prog2
     $ g++ -c file.cpp
     $ g++ -c other.cpp
     $ g++ file.o other.o -o prog2
Lesson 1 : 画面への出力とキーボードからの入力

1-2 コンソール画面への出力:

Source:001
--------------------------------------------------
// 画面への出力を行うプログラム
#include <iostream>
using namespace std;
int main()
{
        std::cout << "初めてのC++プログラム。\n";
        std::cout << "画面に出力しています。\n";
}
--------------------------------------------------
Result:001
初めてのC++プログラム。
画面に出力しています。
--------------------------------------------------
Point:
- ソースプログラムには、作成者自身を含めた《読み手》に伝えるべきコメントを簡潔に記入する。
- ヘッダーにはライブラリに関する重要な情報が格納されている。プログラムで利用するライブラリに関する情報が格納されているヘッダーをインクルードする。
- 外部への入出力は、文字が流れる川であるストリームを経由して行う。(入出力ストリーム : <iostream>)
- C++のプログラムの本体はmain関数である。プログラム実行時には、その中の文字が順次実行される。
- 文は原則としてセミコロンで終わる。
- 長い文字列リテラルは、空白類(空白類文字と注釈)をはさんで、分割して表記できる。

演習問題:
1-1 : ヘッダー<iostream>をインクルードする指令が欠如していると、どうなるか。プログラムでコンパイルしてみましょう。
1-2 : Source:001のプログラムからusing指令を削除して、coutをstd::coutに変更したプログラムを作成しましょう。
1-3 : 文の終端を示す;が欠如しているとどうなるか。プログラムをコンパイルしてみましょう。
1-4 : 下に示すように、1行に1文字ずつ名前を表示するプログrむを作成しましょう。
      言
      語

      太
      郎


1-3 変数:演算結果の出力

Source:006
--------------------------------------------------
// 二つの整数値18と63の和を求めて表示
#include <iostream>
using namespace std;
int main()
{
        cout << "18と63の和は" << 18 + 63 << "です。\n";
}
--------------------------------------------------
Result:006
18と63の和は81です。
--------------------------------------------------
Source:007
#include <iostream>
using namespace std;
int main()
{
        int x;          // xはint型の変数
        int y;          // yはint型の変数

        x = 63;         // xに63を代入
        y = 18;         // yに18を代入

        cout << "xの値は" << x << "です。\n";                   // xの値を表示
        cout << "yの値は" << y << "です。\n";                   // yの値を表示
        cout << "合計は" << x + y << "です。\n";                // xとyの合計を表示
        cout << "平均は" << (x + y) / 2 << "です。\n";  // xとyの平均を表示
}
--------------------------------------------------
Result:007
xの値は63です。
yの値は18です。
合計は81です。
平均は40です。
--------------------------------------------------
Source:007
// 二つの変数xとyの合計と平均を表示(変数は不定値)
#include <iostream>
using namespace std;
int main()
{
        int x;          // xはint型の変数(不定値となる)
        int y;          // yはint型の変数(不定値となる)

        cout << "xの値は" << x << "です。\n";                   // xの値を表示
        cout << "yの値は" << y << "です。\n";                   // yの値を表示
        cout << "合計は" << x + y << "です。\n";                // xとyの合計を表示
        cout << "平均は" << (x + y) / 2 << "です。\n";  // xとyの平均を表示
}
--------------------------------------------------
Result:008 (x, yの値が初期化されてなくてゴミが入ってしまいます。実行するたび結果が変わります。)
xの値は-1075048344です。
yの値は4460532です。
合計は-1070587812です。
平均は-535293906です。
--------------------------------------------------
Source:009
// 二つの変数xとyの合計と平均を表示(変数を明示的に初期化)
#include <iostream>
using namespace std;
int main()
{
        int x = 63;             // xはint型の変数(63で初期化)
        int y = 18;             // yはint型の変数(18で初期化)

        cout << "xの値は" << x << "です。\n";                   // xの値を表示
        cout << "yの値は" << y << "です。\n";                   // yの値を表示
        cout << "合計は" << x + y << "です。\n";                // xとyの合計を表示
        cout << "平均は" << (x + y) / 2 << "です。\n";  // xとyの平均を表示
}
--------------------------------------------------
Result:009
xの値は63です。
yの値は18です。
合計は81です。
平均は40です。
--------------------------------------------------
Point:
- 変数を使うときは、まず宣言をして名前を与えよう。
- 変数の宣言時には、初期化子を与えて確実に初期化するよ良い。

演習問題:
1-6 : Source:007のプログラムを変更して、少数部を持つ実数値をxやyに代入するプログラムを作成しましょう。その結果から、int型変数が整数のみしか扱えないこと確認すること。
1-7 : 三つのint型変数に値を代入し、それらの合計と平均を求めるプログラムを作りましょう。
1-8 : int型の変数に実数値の初期化子を与えるとどうなるか。プログラムを作成して確認しましょう。


1-4 キーボードからの入力:

--------------------------------------------------
Source:010 (演算子とオペランド)
// 二つの整数値を読み込んで加減乗除した値を表示
#include <iostream>
using namespace std;
int main()
{
        int x;          // 加減乗除する値
        int y;          // 加減乗除する値

        cout << "xとyを加減乗除します。\n";
        cout << "xの値:";      // xの値の入力を促す
        cin >> x;                       // xに整数値を読み込む

        cout << "yの値:";      // yの値の入力を促す
        cin >> y;                       // yに整数値を読み込む

        cout << "x + yは" << x + y << "です。\n";       // x + yの値を表示
        cout << "x - yは" << x - y << "です。\n";       // x - yの値を表示
        cout << "x * yは" << x * y << "です。\n";       // x * yの値を表示
        cout << "x / yは" << x / y << "です。\n";       // x / yの値を表示(商)
        cout << "x % yは" << x % y << "です。\n";       // x % yの値を表示(剰余)
}
--------------------------------------------------
Result:010
xとyを加減乗除します。
xの値:7
yの値:5
x + yは12です。
x - yは2です。
x * yは35です。
x / yは1です。
x % yは2です。
--------------------------------------------------
Source:011
// 二つの整数値を読み込んで加減乗除した値を表示
#include <iostream>
using namespace std;
int main()
{
        int x;          // 加減乗除する値
        int y;          // 加減乗除する値

        cout << "xとyを加減乗除します。\n";
        cout << "xとyの値:";   // xとyの値の入力を促す
        cin >> x >> y;                  // xとyに整数値を読み込む

        cout << "x + yは" << x + y << "です。\n";       // x + yの値を表示
        cout << "x - yは" << x - y << "です。\n";       // x - yの値を表示
        cout << "x * yは" << x * y << "です。\n";       // x * yの値を表示
        cout << "x / yは" << x / y << "です。\n";       // x / yの値を表示(商)
        cout << "x % yは" << x % y << "です。\n";       // x % yの値を表示(剰余)
}
--------------------------------------------------
Result:011
xとyを加減乗除します。
xとyの値:7 5
x + yは12です。
x - yは2です。
x * yは35です。
x / yは1です。
x % yは2です。
--------------------------------------------------
Source:112
// 整数値を読み込んで符号を反転した値を表示
#include <iostream>
using namespace std;
int main()
{
        int a;                                  // 読み込む値
        cout << "整数値:";             // 値の入力を促す
        cin >> a;                               // aに整数値を読み込む
        int b = -a;                             // aの符号を反転した値でbを初期化
        cout << a << "の符号を反転した値は" << b << "です。\n";
}
--------------------------------------------------
Result:112
整数値:7
7の符号を反転した値は-7です。
anverma.desktop% ./list0112
整数値:-15
-15の符号を反転した値は15です。
--------------------------------------------------
Source: 013
// 二つの実数値を読み込んで加減乗除した値を表示
#include <iostream>
using namespace std;
int main()
{
        double x;               // 加減乗除する値
        double y;               // 加減乗除する値
        cout << "xとyを加減乗除します。\n";
        cout << "xの値:";              // xの値の入力を促す
        cin >> x;                               // xに実数値を読み込む
        cout << "yの値:";              // yの値の入力を促す
        cin >> y;                               // yに実数値を読み込む

        cout << "x + yは" << x + y << "です。\n";       // x + yの値を表示
        cout << "x - yは" << x - y << "です。\n";       // x - yの値を表示
        cout << "x * yは" << x * y << "です。\n";       // x * yの値を表示
        cout << "x / yは" << x / y << "です。\n";       // x / yの値を表示
}
--------------------------------------------------
Result:013
xとyを加減乗除します。
xの値:7.5
yの値:5.25
x + yは12.75です。
x - yは2.25です。
x * yは39.375です。
x / yは1.42857です。
--------------------------------------------------
Source:014
// 円周の長さと円の面積を求める(その1:円周率を浮動小数点リテラルで表す)
#include <iostream>
using namespace std;
int main()
{
        double r;                               // 半径
        cout << "半径:";               // 半径の入力を促す
        cin >> r;                               // 半径を読み込む
        cout << "円周の長さは" << 2 * 3.14 * r << "です。\n";   // 円周
        cout << "面積は" << 3.14 * r * r << "です。\n";                 // 面積
}
--------------------------------------------------
Result:014
半径:7.2
円周の長さは45.216です。
面積は162.778です。
--------------------------------------------------
Source:015
// 円周の長さと円の面積を求める(その2:円周率を定値オブジェクトで表す)
#include <iostream>
using namespace std;
int main()
{
        const double PI = 3.1416;       // 円周率
        double r;                                       // 半径
        cout << "半径:";                       // 半径の入力を促す
        cin >> r;                                       // 半径を読み込む
        cout << "円周の長さは" << 2 * PI * r << "です。\n";             // 円周
        cout << "面積は" << PI * r * r << "です。\n";                   // 面積
}
--------------------------------------------------
Result:015
半径:7.2
円周の長さは45.239です。
面積は162.861です。
--------------------------------------------------
Source:016
// 0?9のラッキーナンバーを乱数で生成して表示
#include <ctime>
#include <cstdlib>
#include <iostream>

using namespace std;
int main()
{
        srand(time(NULL));                              // 乱数の種を設定
        int lucky = rand() % 10;                // 0?9の乱数
        cout << "今日のラッキーナンバーは" << lucky << "です。\n";
}
--------------------------------------------------
Result:016
今日のラッキーナンバーは0です。(実行する度に値は変わります。)
--------------------------------------------------
Source:017
// 文字を読み込んで表示
#include <iostream>
using namespace std;
int main()
{
        char c;         // 文字
        cout << "文字を入力してください:";             // 文字の入力を促す
        cin >> c;                                                               // 文字を>読み込む
        cout << "打ち込んだ文字は" << c << "です。\n";          // 表示
}
--------------------------------------------------
Result:017
文字を入力してください:X
打ち込んだ文字はXです。
--------------------------------------------------
Source:018
// 名前を読み込んで挨拶する

#include <string>
#include <iostream>
using namespace std;
int main()
{
        string name;    // 名前
        cout << "お名前は:";           // 名前の入力を促す
        cin >> name;                            // 名前を読み込む(スペースは無視)
        cout << "こんにちは" << name << "さん。\n";             // 挨拶する
}
--------------------------------------------------
Result:018 (半角スペースは無視されます。)
お名前は:言語 太郎
こんにちは言語 太郎さん。

お名前は:言語 太郎
こんにちは言語さん。
--------------------------------------------------
Source:019
// 名前を読み込んで挨拶する(スペースも読み込む)

#include <string>
#include <iostream>
using namespace std;
int main()
{
        string name;    // 名前
        cout << "お名前は:";           // 名前の入力を促す
        getline(cin, name);                     // 名前を読み込む(スペースも読み込む)
        cout << "こんにちは" << name << "さん。\n";             // 挨拶する
}
--------------------------------------------------
Result:019 (半角スペースも表示されます。)
お名前は:言語太郎
こんにちは言語太郎さん。

お名前は:言語 太郎
こんにちは言語 太郎さん。
--------------------------------------------------
Source:020
// 文字列の初期化と代入
#include <string>
#include <iostream>
using namespace std;
int main()
{
        string s1 = "ABC";              // 初期化
        string s2 = "XYZ";              // 初期化
        s1 = "FBI";                             // 代入(値を書きかえる)
        cout << "文字列s1は" << s1 << "です。\n";               // 表示
        cout << "文字列s2は" << s2 << "です。\n";               // 表示
}
--------------------------------------------------
Result:020
文字列s1はFBIです。
文字列s2はXYZです。
--------------------------------------------------

Point:
- 変数は必要になった時点で宣言しましょう。
- 実数型のオペランドに%演算子を適用することは出来ない。
- プログラム中に埋め込まれた数値は、何を表すものであるのかが理解しにくい。定値オブジェクトとして宣言して名前を与えると良い。

演習問題:
1-9 : 下に示す用に、キーボードから読み込んだ整数値をそのまま反復して表示するプログラムを作成しましょう。
      整数値:(キーボードから入力)
      (キーボードから入力)と入力しましたね。
1-10 : 下に示すように、キーボードから読み込んだ整数値に10を加えた値と、10を減じた値を出力するプログラムを作成しましょう。
     整数値:(キーボードから入力)
       10を加えた値は17です。
       10を減じた値は3です。
1-11 : 下に示すように、二つの実数値を読み込み、、その合計と平均を求めて表示するプログラムを作成しましょう。
       xの値:(キーボードから入力)7.5
       yの値:(キーボードから入力)5.25
       合計は12.75です。
       平均は6.375です。
1-12 : 下に示すように、三角形の底辺と高さを読み込んで、その面積を表示するプログラムを作成しましょう。
       三角形の面積を求めます。
       底辺:(キーボードから入力)7.8
       高さ:(キーボードから入力)3.2
       面積は12.48です。
    三角形の面積を求める式は[(底辺)x(高さ)÷2]です。
1-13 : 以下に示すプログラムを作成しましょう。
    1桁の正の整数値(すなわち1以上9以下の値)をランダムに生成して表示
    1桁の負の整数値(すなわち-9以上-1以下の値)をランダムに生成して表示
    2桁の正の整数値(すなわち10以上99以下の値)をランダムに生成して表示

1-14 : キーボードから読み込んだ整数値プラスマイナス5の範囲の整数値ランダムに生成して、表示するプログラムを作成しましょう。キーボードから読み込んだ値が100であれば、95〜100整数値を表示すること。
    整数値:(キーボードから入力)100
    その他の±5の乱数を生成しました。それは103です。