C++プログラミングの要点

小方 登(京都大学・人環)


1)プログラムは関数で構成される。関数は,{ で始まり } で終わる。プログラムには main 関数がひとつ必要である。

2)関数を構成する文には,; (セミコロン)が必要である。

3)文を構成する語は,空白文字で区切られる。空白文字とは,スペース,タブ,改行などである。改行も単なる空白文字であるから,空白文字の入りうる位置ならば,どこでも改行できる。

4)語は,半角英小文字で記述する。

5)変数の宣言

変数とは,その中に数値や文字を入れることのできる容器と考えればよい。この容器には,必ず名前をつけ,この変数名によってその中身である数値や文字を参照することができる。名前には,半角英数字を用い,最初の文字は英字でなければならない。

i) 文字型‥‥ -128〜127 の整数。1バイト。

char c;

ii) 整数型‥‥ -32768〜32767の整数。2バイト。

int a, b;

iii) 浮動小数点型‥‥ 有効桁7桁。4バイト。

float x, y;

iv) 文字列型‥‥ 文字型の並び。

#include <cstring>
string namae;

6)変数への値の代入‥‥ 変数への値の代入には,"=" を用いる。文字列リテラルは,二重引用符でくくること。

x = 3;

namae = "ビートたけし";

7)算術演算‥‥加減乗除にはそれぞれ +, -, *, / の符号が用いられる。整数どうしの割り算の余りの符号は"%"。

sum = a + b;
quotient = a / b;

8)組み込み関数の利用

関数とは,ある入力に対し,一定の出力を与えるような装置である。C++では,プログラムのモジュール(部品)化を実現するために,プログラム中で関数を必要に応じて定義できる。しかし,一般的な関数で,処理系においてあらかじめ定義されているものを利用することも可能である。関数への入力は,引数と呼ばれ,( ) でくくられる。出力は返値と呼ばれる。

#include <cmath>

x = sprt(2); //
平方根
y = pow(2, 0.5); //2の0.5乗
z = cos(3.1416 / 4); //三角関数

9)値の表示

" cout"への出力を用いる。表示したい数値リテラルはそのまま,文字列リテラルは二重引用符でくくる。表示したい変数の値は変数名をそのまま書く。改行のためには,文字リテラル"¥n"を用いる。

#include <iostream>
cout << "
合計は" << sum << "です。\n";

10)変数へのキーボードからの値の入力

" cin"からの入力を用いる。これが実行されると,キーボードからの入力待ちの状態になるので,変数の型に合った文字列または数値をタイプし [enter] を押す。

#include <iostream>
cin >> a;

スペースなどを含め,改行までを1つの文字列に読み込みたい場合は次のようにする。

#include <iostream>
cin.getline(str);

11)関係演算‥‥2つの値を比較し,結果を真か偽で与える。

== 等しい
!= 等しくない
<  より小さい
>  より大きい
<= より小さいか等しい
>= より大きいか等しい

12)論理演算‥‥複数の関係演算式を組み合わせて,複合条件を判定したりするために用いる。

&& かつ
|| または
!  否定

13)if文による条件分岐‥‥ if 文によって,条件式により実行内容を分岐させることができる。

if (条件式) {
    //
真の場合実行
} else {
    //
偽の場合実行
}

14)for 文による繰り返し‥‥ 同じ内容の処理を一定回数だけ繰り返したいときは for 文を用いる。

for (初期文 ; 条件式 ; 増加式) {
    //
実行内容
}

ここで,初期文を最初に実行し,条件式が真である間繰り返す。繰り返すごとに増加式を実行する。具体的な用法は,おおむね次のようになる。

for (n = 1; n <= 100; n++) {
    //
実行内容
}

ここでは,実行内容を100回繰り返す。n を参照することで,何回目の繰り返しかわかる。

15)配列変数

大量のデータを扱い,それらに対し一括して処理を施したいときがある。そのようなときに配列変数を利用する。配列変数を利用する際には,最初に次のように宣言する。

int a[100];

このように宣言することにより,a[0], a[1] a[2], ... , a[99] という形の100の容器が用意されたことになる。これらの容器はそれぞれ値を持つことができ,[ ] 内の整数(添字という)によりその内容を参照することができる。添字は,その範囲内の整数の値ならば,変数でもよい。

for (n=1; n<=99; n++) {
    a[n] = n * 2;
}

16)コマンドライン引数

プログラム実行時にコマンドに続けてタイプする文字列をmain( ) 関数の引数として渡すことができる。複数の引数がある場合は,スペースで区切る。変数argcには引数の個数が,文字列の配列argv[ ]には引数の内容が格納される。引数の数が設計と一致しなかった場合のために,エラールーチンを用意する。以下の例では,引数の数が2以外の場合,エラーメッセージを表示する。

main(int argc, char *argv[]) {
    if(argc != 3) {
        cerr << "Usage: prog <string1> <string2>\n";
        return 1;
    }
    cout << argv[1];
    cout << argv[2];
}

17)ファイルからの読み込み

" ifstream" クラスを利用する。コンストラクタの引数としてファイル名を指定する。いったんストリームが作られたなら,"cin" などと同様に利用できる。ファイル名の間違いなど,エラーを生じたときのために,エラールーチンを用意する。利用が済んだら,必ずクローズする。

#include <iostream>
#include <fstream>

ifstream fin(filename.txt);
if(!fin) {
    cerr << "Cannot open input file.\n";
    return 1;
}
fin >> a;
fin.close();

18)ファイルへの書き込み

" ofstream" クラスを利用する。コンストラクタの引数としてファイル名を指定する。いったんストリームが作られたなら,"cout" などと同様に利用できる。ファイルのオープンに失敗したときのために,エラールーチンを用意する。利用が済んだら,必ずクローズする。

#include <iostream>
#include <fstream>

ofstream fout(filename.txt);
if(!fout) {
    cerr << "Cannot open output file.\n";
    return 1;
}
fout << "This is my string.\n";
fout.close();