C++ C++ C++
C++ C++ C++
C++ C++ C++
C++ C++ C++
C++ C++ C++
C++ C++ C++
第 1 章
画面に表示を行ったりキーボードから数値や文字を読み込んだりするプログ ラムを通じて、C++ に慣れましょう。 C++ の歴史 ソースプログラムとプログラムの実行 #include指令によるヘッダのインクルード using指令 コメント(注釈) 自由形式記述とインデント main関数 文 入出力ストリームと挿入子・抽出子 改行と警報型(int 型、double 型、char 型)
文字列リテラル・整数リテラル・浮動小数点リテラル 変数の宣言 文字列と string 型 初期化と代入 演算子とオペランド 定値オブジェクト 算術演算子 乱数の生成
画面への出力と
キーボードからの
入力
画
面
へ
の
出
力
と
キ
ー
ボ
ー
ド
か
ら
の
入
力
1
Fig.1-1 C++とその両親1-1
C++
の
歴史
まずは、C++ の歴史を簡単に学習しましょう。 1983年
、仮想関数 演算子多重定義
機能 導入
。
後、Rick
Mascitti、C++(
)
名称 与
。
、
言語 名前
C後
++記号 付加
。
、
++、C
言語 演算子 一
、以下 機能
。
値 1単位
増
。
D比
、C++
名称 控 目
。C言語 拡
張
、
異
言語
示
。Stroustrup
博士
、C言語 対
敬意 払
表
考
。
、現実
C++多
存在
。1983
年
C++大学
頒布 始
、1985
年 商業
Release 1.0販売 開始
。
Stroustrup博士自身
1986年 出版
The C++ Programming Language*
、
Release 1.0相当
C++解説書
。
対
、限定公開
部
導入 、若干 改良 施
Release 1.1 1.2相次
発表
。
後、多重継承
追加
、大幅 改良 行
。
Release 2.0。
Stroustrup
博士 、1990
年
Margaret A. Ellis共著
The Annotated C++ Reference Manual**
C++ C
Simula 67 C++
の
歴史
1980
年頃、AT&T
研究所
Bjarne Stroustrup博士 事象駆動型
記述
、C
言語 拡張
言語 作
。
、クラス
付きの
C(C with classes) 呼言語
、Simula67
取 入
指向 基礎
概念 、強力 関数引数型
機能
。後
C++呼
言語 、C
言語
Simula67両親
言語
C
+
+
の
歴
史
1-1
発表
。
書
C++完全 文法書
、Release 2.1
相当
。
例外処理 、今後追加
試行的 機能
紹介
。Release 3.0
、
正式 導入
。
Stroustrup博士 、1997
年 、
The C++ Programming Language Third Edition***
、新
C++解説
。
標準
Cと
標準
C++C
言語
C++言語 国際的 規格 各国 国内規格 、以下
機関
標準規格
制定
。
国 際 規 格:国際標準化機構(ISO:International Organization for Standardization)
米国 規格:米国国内規格協会(ANSI:American National Standards Institute)
日本 規格:日本工業規格(JIS:Japanese Industrial Standards)
体裁
細
点 異
除
、
(基本的
)同一
。
現在、C++
規格 第2版
制定
。
▪第1版:1998
年 制定
規格
。ANSI
規格
ISO規格
、JIS
規格
。
▪第2版:第1版 対
小改訂 施
規格
。2003
年
ANSI ISO規格
制定
、
同時
JIS規格 制定
。本書 解説
C++、
規
格 基
。
、C++
親
C言語 標準規格
、以下 示 二
版
。
▪第1版:1989
年
ANSI規格 制定
、翌
1990年
ISO規格 制定
。
JIS規格 制定
1993年
。ANSI
制定年
C89呼
。
▪第2版:
1999年
ANSI ISO規格 制定
、
2003年
JIS規格 制定
。
ANSI ISO
制定年
C99呼
。
新
制定
第2版 、第1版
互換性 乏
、
使
実情
。本書
、第1版 第2版共通 内容 『標準C』 呼 、第1版
該当
内容 『C89』、第2版
該当
内容 『C99』 呼
。
* 邦訳:斎藤信男訳『 言語C++』, ,1988 ** 邦訳:足立高德ら訳『注解C++ 』, ,1992 *** 邦訳:㈱ /長尾高弘訳『 言語C++第3版』, ,1998画
面
へ
の
出
力
と
キ
ー
ボ
ー
ド
か
ら
の
入
力
1
1-2
まずは
画面に表示
コンピュータで処理を行ったときは、その結果を何らかの形で人間に伝えることになります。 本節では、コンソール画面への表示を行うことによって、コンピュータから人間に情報を伝え る方法を学習します。 ▼ プログラム中の余白や"
などの記号を全角文字で打ち込まないよう注意しましょう。余白の部 分は、スペース・タブ・リターン(エンター)のキーを使って打ち込みます。 なお、本書に示すプログラムは、ホームページからダウンロードできます(p.v)。各プログラ ムリストの右上に示しているのは、ディレクトリ名を含むファイル名です。 C++、
・数字・記号
構成
。
短
、
/, \, #, {, }, <, >, (, ), ", ;
数多
記号 使
。
▼ C++のプログラムで利用する記号文字の読み方は、p.11 の Table 1-1 にまとめています。なお、 環境によっては、逆斜線=\
の代わりに円記号¥
を使う日本独自の文字コード 体系が採用されています。みなさんの環境に応じて、必要ならば読みかえてください。 本書では、みなさんが読みやすく理解しやすくなるよう、青文字、斜体字、太字、太斜体字な どを使い分けてプログラムを表記しています。ソースプログラムとソースファイル
私
人間 、
《文字 並 》
作成
。
ソースプログラム(source program) 呼 、
格納
ソースファイル
(source file) 呼
。
▼ sourceは、 もとになるもの という意味です。ソースプログラムは、原始プログラムと呼ば れることもあります。コンソール
画面への出力
最初 作
、
画面 表示 行
。
使
、List 1-1
打 込
。大文字
小文字、半角文字 全角文字 区別
、
示
。
// 画面への出力を行うプログラム #include <iostream> using namespace std; int main() { cout << "初めてのC++プログラム。\n"; cout << "画面に出力しています。\n"; } 実行結果 初めてのC++プログラム。 画面に出力しています。 List 1-1 chap1/list11.cppま
ず
は
画
面
に
表
示
1-2
Fig.1-2 プログラムの作成から実行まで打 込
list11.cpp
名前 保存
。
、拡張子
.cpp
.c
.cc
.C
処理系
。
環境
応
、必要
変更
。
▼ 処理系とは、C++ プログラムの開発に必要なソフトウェアのことです。Microsoft Visual C++、 GNU C++など数多くの処理系があります。プログラムの
実行
、C++
直接理解
実行
。
、Fig.1-2 示
、
コンパイル
リンク
作業 行
、実行プログラム 作成
必要
。
私
人間 読 書
《文字 並 》 、
理解
1
並
《
並 》 変換
。
▼ ビット(bit)は、binary digit(2進数字)の略であり、または1
の値をもつデータ単位です。 1ビットでは、と1
の 2 種類の数を表せます(1 進数の 1 桁では, 1, 2,
…, 9
の 1 種類 の数を表せますね。それがと1
だけに制限されていると考えましょう)。手順
実行方法 処理系
異
、
参照
作業 行
。
▼ ソースプログラムに綴つづり間違いなどがあると、コンパイルエラーが発生し、その旨の診断メッ セージ(diagnostic message)が表示されます。その際は、打ち込んだプログラムをよく読み直して、 ミスを取り除いた上で、再度コンパイル・リンクの作業を試みましょう。完了
実行
。
、実行結果(左
内) 示
、
画面
出力 行
。
文字の並び ビットの並び コンパイル・リンクなど ソースプログラム 実行プログラム 理解(読む) 作成(書く) 理解・実行 int main() { // ... } 11111111 11111111111 1111111111 11111111111 11111111画
面
へ
の
出
力
と
キ
ー
ボ
ー
ド
か
ら
の
入
力
1
重 要 重 要 // 画面への出力を行うプログラム /* 画面への出力を行うプログラム */ #include <iostream>コメント
(注釈)
先頭行
//
始
。連
続
2個
記号
//
、
行
以降 、
《読 手》 伝
。
表明
。
、
、
対
注釈
=コメント(comment)
。
有無 内容 、
動作 影響 与
。作成者自身 含
、
読 手 伝
、簡潔 言葉(日本語 英語
) 記述
。
他人 作成
適切
書
、読
理解
。
、自分 作
永遠 記憶
不可能
、
記入 作成者自身
重要
。
ソースプログラムには
、作成者自身を含めた《読み手》に伝えるべきコメントを
簡潔に記入せよ。
、
/*
*/
囲 記述法
。開始 表
/*
終了 表
*/
同一行
、右
複数行
記述 効果的
。
▼ この記述法を使う場合は、コメントを閉じるための*/
を、/*
と書き間違えたり、書き忘れた りしないように注意しましょう。本書では、コメントを青文字で表記します。ヘッダとインクルード
次 行 、以下 表明 行
。
画面
入出力 行
(処理実現
部品
群) 関
情報 格納
<iostream>
内容 取 込
。
Fig.1-3
示
、
#
include
指令 行 、
<iostream>
内容
入
。
結果、入出力
利用 必要 情報 手 入
。
、
<iostream>
他 、文字列 扱
<string>
提供
。
ヘッ
ダ(header) 呼
。
< >
中
iostream
string
名
。
#
include
指令
内容
取 込
、インクルードする(include)
。
ヘッダにはライブラリに
関する重要な情報が格納されている。プログラムで利用
ま
ず
は
画
面
に
表
示
1-2
Fig.1-3 #include指令によるヘッダのインクルード ▼ ヘッダファイルではなく4 4 4 4、単にヘッダと呼ばれるのは、個々のヘッダが、単独のファイルとし て提供されるとは限らないからです。事実、文字の並びであるテキストファイルではなく、コン パイル済みの特殊な形式でヘッダを提供する処理系もあります。 なお、単独のファイルとして提供される場合でも、<iostream>のファイル名がiostream
であ るとは限りません(iostream.hやiostream.hpp
といった名前かもしれません)。 using namespace std; #include <iostream> int main() { // ... } 入出力を行うためのライブラリに 関する種々の情報 (cout や cin の宣言など) <iostream> ヘッダ この行はヘッダの内容と入れかえられる。 インクルード std名前空間の利用
#
include
次 行 、
using
指令 呼
指令
。
指令 、以下
表明
。
std
名前空間(name space) 使
。
名前空間
第
9章 学習
、現在 段階 理解
必要
。
、C++
提供
標準
4 4利用 必要 《決
文句》
覚
。
▼std
は standard(標準)に由来します。、
using namespace std;
指令 省略可能
。
、省略
場合 、
中
cout
std
::cout
変更
。
▼ その理由は、第 9 章で学習します。 演習1-1 ヘッダ<iostream>をインクルードする指令が欠如していると、どうなるであろうか。プログラム をコンパイルして検証せよ。 演習1-2List 1-1(p.4)のプログラムからusing指令を削除して、coutをstd::coutに変更したプログラム
画
面
へ
の
出
力
と
キ
ー
ボ
ー
ド
か
ら
の
入
力
1
重 要 Fig.1-4 コンソール画面への出力とストリームコンソール
画面への出力とストリーム
画面
出力 行
箇所 理解
。
画面 含 、
外部 対
入出力
、ストリーム(stream)
利用
。
、文字 流
川
(Fig.1-4)。
外部への入出力は、文字が流れる川であるストリームを経由して行う。
cout
、
画面 結 付
、標準出力ストリーム(standard
output stream
) 呼
。
出力 、文字 挿入
4 4 4 4行
。
挿入
指示
、 左向
不等号
<
二 並
<<
。
記号 、挿入子(inserter)
呼
。
▼ 二つの<
は連続しなければなりません。<と<
のあいだにスペースやタブを入れないようにし ましょう。 ▼ 以下、コンソール画面のことを、単に「画面」と呼ぶことにします。ヘッダ名
iostream
は入出力ストリーム(input-
output stream)の略です。また、cout
は シー アウト と発音します。contとかcount
と書き間違えないようにしましょう。 cout << "ABC"; 挿入子 文字列リテラル ABC 標準出力ストリーム cout文字列リテラル
"
初めてのC
++
プログラム
。
\n
"
"ABC"
、二重引用符
"
囲
文字 並
、
文字列リテラル(string literal) 呼
、
《文字 並 》 表
。
▼ リテラルとは、『文字どおりの』『文字で表された』という意味です。本書では、文字列リテラ ルを"
少し薄い黒文字"
で表記します。 二重引用符"
は、文字列リテラルの開始と終了を表す記号です。coutに挿入したときに画面 に"
が表示されることはありません。文字列リテラルの詳細は、第 8 章で学習します。 cout << "初めてのC++プログラム。\n"; cout << "画面に出力しています。\n"; 挿入された文字がストリームを流れていく。ま
ず
は
画
面
に
表
示
1-2
重 要 重 要 Fig.1-5 プログラムの実行とmain関数改行
文字列
中
\n
《改行文字》 表 特別 表記
。改行文字 出力
、
続 表示 、次 行 先頭
行
。
、
「初
C++。」 表示
、
行 改
「画面 出力
。」 表示
。
▼ 二つの文字\
とn
が表すのは、《改行文字》という単一4 4 4文字です。改行文字のように、目に 見える文字として表記が不可能あるいは困難な文字は、\で始まる拡張表記によって表します。 拡張表記の詳細は、第 3 章で学習します。 int main() { cout << "初めてのC++プログラム。\n"; cout << "画面に出力しています。\n"; } main関数内の文が 順次実行される。部分
main関数(main function) 呼
。
起動
実行
、
main
関数中 文(statement) 順次
4 4実行
。
C++のプログラムの
本体は
main
関数である。プログラム実行時には、その中の
文が順次実行される。
▼int main()
や{ }
は、後の章で学習しますので、いずれも《決まり文句》として覚えましょう。 なお、 関数 については、第 6 章以降で詳しく学習します。文
本
main
関数
二
文
。文
実行単位
。
日本語 文 末尾 句点 。 置
同様 、C++
文 末尾
;
必要
(例外
)。
文は、原則としてセミコロンで終わる。
▼ コメントは文ではありません。《コメント文》といった文は存在しません。 演習1-3 文の終端を示すセミコロン;が欠如しているとどうなるか。プログラムをコンパイルして検証せよ。 main関数 main関数
本体
部分 抜 出
Fig.1-5
。
画
面
へ
の
出
力
と
キ
ー
ボ
ー
ド
か
ら
の
入
力
1
画面
出力 一
文
List 1-2
示
。
、出力
cout
対
複数個 挿入子
<<
連続
適用
、
先頭側(左側)
順 出力
。
警報
文字列
中
\a
《警報》 表 拡張表記
。
cout
対
警報文字 挿入
、視覚的
聴覚的 注意 促
、
実行環境
、
音
鳴
(画面 点滅
実行環境
)。
▼ 本書の実行例では、警報を♪と表記します。文字列
内
2個 改行文字
\n
含
。「初
C++。」
後
置
改行文字
、「画面 出力
。」 次 行 表示
確認
。
▼ これ以降、最後に改行文字を出力する場合は 『ABC
』と表示 と表現して、最後に改行文字を 出力しない場合は 「ABC
」と表示 と表現することにします。ストリームへの
連続した出力
List 1-3
、二
挨拶「
。」 『
。』 連続
表示
。
// 文字列リテラル内の改行文字\nの働きを確認 #include <iostream> using namespace std; int main() { cout << "初めてのC++プログラム。\n画面に出力しています。\n"; } List 1-2 chap1/list12.cpp // 挿入子<<を連続適用して画面に出力 #include <iostream> using namespace std; int main() { cout << "\aはじめまして。" << "こんにちは。\n"; } 実行結果 ♪はじめまして。こんにちは。 List 1-3 chap1/list13.cpp 警報 実 行 結 果 初めてのC++プログラム。 画面に出力しています。 改行ま
ず
は
画
面
に
表
示
1-2
Table 1-1 記号文字の読み方 記号 読み方 + プラス符号、正符号、プラス、たす - マイナス符号、負符号、ハイフン、マイナス、ひく * アステリスク、アスタリスク、アスター、かけ、こめ、ほし / スラッシュ、スラ、わる \ 逆斜線、バックスラッシュ、バックスラ、バック ※JISコードでは¥ ¥ 円記号、円、円マーク % パーセント . ピリオド、小数点文字、ドット、てん , コンマ、カンマ : コロン、ダブルドット ; セミコロン ' 単一引用符、一重引用符、引用符、シングルクォーテーション " 二重引用符、ダブルクォーテーション ( 左括弧、左丸括弧、左小括弧、パーレン ) 右括弧、右丸括弧、右小括弧、パーレン { 左波括弧、左中括弧、ブレイス } 右波括弧、右中括弧、ブレイス [ 左角括弧、左大括弧、ブラケット ] 右角括弧、右大括弧、ブラケット < 小なり、左向き不等号 > 大なり、右向き不等号 ? 疑問符、はてな、クエッション、クエスチョン ! 感嘆符、エクスクラメーション、びっくりマーク、びっくり、ノット & アンド、アンパサンド ~ チルダ、なみ、にょろ ※JISコードでは-(オーバライン) - オーバライン、上線、アッパライン ^ アクサンシルコンフレックス、ハット # シャープ、ナンバー _ 下線、アンダライン、アンダバー、アンダスコア = 等号、イクオール、イコール | 縦線記号文字の読み方
C++利用
記号文字 読 方 Table 1-1 示
。
、
示 読 方 、通称・略称・俗称 含
。
▼ 注意:日本語版の MS-Windows などでは、逆斜線\
の代わりに円記号¥
を使います。たとえば、 List 1-3 の表示を行う文は、以下のようになります。 cout << "¥aはじめまして。" << "こんにちは。¥n"; みなさんの環境に応じて、必要ならば読みかえるようにしてください。 注意‼画
面
へ
の
出
力
と
キ
ー
ボ
ー
ド
か
ら
の
入
力
1
自由形式記述
List 1-4
示
見
。
、List 1-1(p.4) 本質
的
同等
、実行結果 同
。
一部
言語 「
各行 、
決
桁位置
記述
。」
制約 課
。
、C++
、
制約
受
。自由 桁位置
記述
自由形式( free formatted) 許
。
、思
自由 (?)記述
例
。
、
自由
、
制限
。
単語の途中に空白類文字を入れてはいけない
int
,
main
,
cout,
<<,
//
,
/*
,
*/
、
『単語』
。
途中
文字列リテラルの途中で改行してはいけない
文字 並
二重引用符
"
囲
文字列
"
…
"
、一種 単語
。
、左下 示
、途中 改行
。
中 長 文字列
記述
必要
場合 、文字列
区
切
、
" "
囲
。
、右下 示
記述
。
/* 画面への出力を行うプログラム */ #include <iostream> using namespace std; int main( ) { cout << "初めてのC++プログラム。\n"; cout << "画面に出力しています。\n" ; } 実行結果 初めてのC++プログラム。 画面に出力しています。 List 1-4 chap1/list14.cpp 読みにくいけれども正しいプログラム ma in空白類文字(空白文字・改行文字・水平
文字・垂直
文字・
書式送 文字) 入
、右
記述
。
cout << "初めての C++プログラム。\n"; cout << ""C初めての++プログラム" 。\n";、空白類文字
隣接
文字列
、連結
単一
文字列
。
ま
ず
は
画
面
に
表
示
1-2
重 要List 1-5
示
確認
。
文字列
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz
\n
"
連結
1個 文字列
、実行結果
分
。
、本
、二
文字列
間
注釈
構
。
翻訳
最初
段階 、注釈
1個 空白文
字 置換
。
、空白類文字 注釈 総称 、空白類(white space)
。
長い文字列リテラルは、空白類(空白類文字と注釈)をはさんで、分割して表記
できる
。
▼ 連結される文字列リテラルは 2 個に限られるわけではありません。たとえば、空白類をはさ んだ 3 個の文字列リテラル"ABCD" "EFGH" "IJKL"
も、きちんと連結されて 1 個の文字列リテラ ル"ABCDEFGHIJKL"
となります。前処理指令の途中で改行してはいけない
自由形式
、先頭
#
文字
#
include
指令 特別扱
。
指令 前処理指令(preprocessing directive) 呼
。前処理指令
、
#
include
指令 他
、後 章 学習
#
define
指令
#
if
指令
。
前処理指令 、原則
、単一行 中 書
。途中 改行
必
要
場合 、行末 逆斜線
\
書
。
// 空白類をはさむ文字列リテラルが連結されることの確認 #include <iostream> using namespace std; int main() { cout << "ABCDEFGHIJKLMNOPQRSTUVWXYZ" // 空白類をはさんで並んだ "abcdefghijklmnopqrstuvwxyz\n"; // 文字列リテラルは連結される } List 1-5 chap1/list15.cpp 実 行 結 果 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz #include <iostream> #include \ <iostream> ▼ 逆斜線文字と改行文字が連続していると、コンパイルの最初の段階で、それらの2文字が取り 除かれる(その結果、次の行とつながる)ことになっています。そのため、逆斜線\
は、改行文 字の直前4 4に置かなければなりません。画
面
へ
の
出
力
と
キ
ー
ボ
ー
ド
か
ら
の
入
力
1
インデント
最初 示
List 1-1
(p.4)
一度
見
。
main
関数 中
書
文 、
左
数
5桁目
記述
。
{ }
、
文
、日本語
段落
(詳細 次章 学習
)。段落中 記述 右 数桁
書
、
構造
。
余白
インデント
(段付 /字下 )
、
用
記述
インデンテーション
呼
。
本書
、4
桁
与
表記
(Fig.1-6)。
▼ すなわち、左側の余白は、階層の深さに応じて , 4, 8, 12, … 個分の空白となります。 Fig.1-6 ソースプログラム中のインデント int main() {for (int i = 1; i <= 9; i++) { for (int j = 1; j <= 9; j++) cout << setw(3) << i * j; cout << '\n'; } } ここに示しているのは、第 3 章で学習する List 3-13(p.106)の一部です。 『九九の表』を出力します。 ▼ インデントは、タブキーとスペースキーのいずれでもタイプできます。ただし、エディタやそ の設定によっては、タブをタイプした文字と、保存したソースファイル上の文字とが一致しない ことがあります。 演習1-4 右に示すように、1行に1文字ずつ名前を表示するプログラムを作成せよ。表示 するのは、著者の名前ではなく、自分の名前とすること。 演習1-5 右に示すように、1行に1文字ずつ名前を表示するプログラムを作成せよ。姓と 名のあいだは1行あけることとし、自分の名前を表示すること。 柴 田 望 洋 柴 田 望 洋 階層の深さに応じてインデント(段付け/字下げ)する。
ま
ず
は
画
面
に
表
示
1-2
Column 1-1
デバッグとコメントアウト
プログラムの欠陥や誤りのことをバグ(bug)といいます。また、バグを見つけたり、その原因 を究明したりする作業が、デバッグ(debug)です。 デバッグの際に、『この部分が間違っているかもしれない。もしこの部分がなかったら、実行時 の挙動はどう変化するだろうか。』と試しながらプログラムを修正することがあります。その際に、 プログラムの該当部を削除してしまうと、もとに戻すのが大変な作業となります。 そこで、よく使われるのが《コメントアウト》という手法です。コメントとしてではなくプログ ラムとして記述されている部分を、コメントにしてしまうのです。 プログラムを以下のように書きかえて実行してみましょう。青文字の部分がコメントとみなされ ますから、『初めての C++ プログラム。』は表示されなくなります。 行の先頭に 2 個のスラッシュ記号//を書くだけで、その行全体をコメントアウトできるわけです。 プログラムをもとに戻すのも簡単です。//を消すだけです。 なお、複数行にわたってコメントアウトする際は、以下に示すように/* … */形式を使うとよ いでしょう。 なお、コメントアウトされたプログラムは、読み手にとって紛らわしく、誤解されやすいものと なります。というのも、コメント化の根拠が、その部分が不要になったためなのか、何らかのテス トを目的とするものなのか、などが分からないからです。 コメントアウトの手法は、あくまでもその場しのぎのための一時的な手段と割り切って使いま しょう。 なお、#if指令を用いると、よりよい方法でのコメントアウトが実現できます。Column 11-7 (p.415)で学習します。 // 画面への出力を行うプログラム #include <iostream> using namespace std; int main() { // cout << "初めてのC++プログラム。\n"; cout << "画面に出力しています。\n"; } 実 行 結 果 画面に出力しています。 List 1C-1 chap1/list1c1.c // 画面への出力を行うプログラム #include <iostream> using namespace std; int main() { /* cout << "初めてのC++プログラム。\n"; cout << "画面に出力しています。\n"; */ } 実 行 結 果 何も表示されません。 List 1C-2 chap1/list1c2.c画
面
へ
の
出
力
と
キ
ー
ボ
ー
ド
か
ら
の
入
力
1
Fig.1-7 ストリームへの文字列リテラルと整数値の出力1-3
変数
画面への出力法が分かりましたので、単純な計算を行って、その結果を表示するプログラム を作ってみましょう。整数リテラル
18
63
、整数 表 定数
整数リテラル(integer literal) 呼
。
▼ 整数リテラル18
は単一の数値じゅう1
8
はちで、文字列リテラル"18"
は 2 個の文字いち1
とはち8
が並んだも のです。整数リテラルの詳細は、第 4 章で学習します。演算結果の出力
網
部
出力 様子 示
Fig.1-7
。
cout
挿入
二
文字列
"18
と
63
の
和は
"
"
です
。
\n
"
、画面
表示
(
\n
《改行文字》
出力
)。
一方、文字列
4 4 4 418
+ 63
、
表示
。整
数 整数 加算
結果
「
81
」
表示
。
演算結果の出力
足 算 行
、
結果 表示
作
。List 1-6 示
、
二
整数値
18
63
和 求
表示
。
cout << "18と63の和は" << 18 + 63 << "です。\n"; 18と63の和は 81 です。 演算結果が表示される 実 行 結 果 18と63の和は81です。 List 1-6 chap1/list16.cpp // 二つの整数値18と63の和を求めて表示 #include <iostream> using namespace std; int main() { cout << "18と63の和は" << 18 + 63 << "です。\n"; }変
数
1-3
重 要 Fig.1-8 変数と宣言変数
、
18
63
以外 数値 和 求
。数値 変更
際 、
手 加
、
・
作業 必要
。値
自由 出
入
《変数》 使
、
煩
解放
。
変数の宣言
変数
、数値 格納
《箱》
。
箱 値 入
、
箱 存在
限 値 保持
。
、値 書
取 出
自由
。
中 複数 箱
、
何
箱
分
。箱
《名前》
困
。
、変数 使
、箱 作
、名前 与
宣言(declaration) 必
要
。
x
名前 変数 宣言
宣言文(declaration statement) 、次
。
int
『整数』
意味 語句
integer由来
。
宣言
、名前
x
変数(箱) 作
(Fig.1-8)。
変数を使うときは、まず宣言をして名前を与えよ。
変数
x
保持
値 整数 限
。
3.5
小数部
実
数値 扱
。
、
int
型(type) 性質
。
int
型
、
型
作
変数
x
int
型 実体
。
▼int
以外にもたくさんの型が提供されます。型に関する詳細は第 4 章以降で学習します。また、 名前の与え方に関する規則は次章で学習します。、二 以上 変数 一度
宣言
。以下
文字
,
区切
宣言
。
int x ; 型 変数名 ・整数値のデータを格納する。 ・いつでも値を出し入れできる。 ・名前が与えられている。 型 intという型から作られた変数 int x; // xという名前をもつint型変数の宣言 int x, y; // int型の変数xとyをまとめて宣言 x int 生成画
面
へ
の
出
力
と
キ
ー
ボ
ー
ド
か
ら
の
入
力
1
Fig.1-9 変数への値の代入 y x二
変数
x
y
値
63
18
代入
、
合計 平均 表示
作
。List 1-7 示
、
。
▼ 二つの変数を 1 行にまとめてint x, y;と宣言せず、個別に宣言しています。このほうが、個々 の宣言に対する注コメ釈ントが記入しやすくなり、宣言の追加や削除が容易になります(ただしプログラ ムの行数は増えてしまいます)。代入演算子 、数学
『
x
63
等
』
『
y
18
等
』 解釈
4 4注意
。
▼ 演算子については、p.22 で学習します。なお、代入演算子には、演算と代入を同時に行う複合 形式のものもあります。 63 18 x = 63; y = 18; 代入 代入 List 1-7 chap1/list17.cpp代入演算子
二
変数 値 入
㆒
着目
。
使
=
、右辺 値 左
辺 代入
指示
記号
、代入演算子(assignment operator) 呼
。
Fig.1-9
示
、変数
x
63
代入
、変数
y
18
代入
。
■ ㆒ ■ ㆓ ■ 叅 // 二つの変数xとyの合計と平均を表示 #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の平均を表示 } 実 行 結 果 xの値は63です。 yの値は18です。 合計は81です。 平均は4です。変
数
1-3
Fig.1-11( )による
演算順序の変更 Fig.1-10 ストリームへの変数の値の出力 63変数の値の表示
変数 格納
値 、
取 出
。
㆓
、変数 値 取 出
表
示
。変数
x
値 表示
様子 示
Fig.1-10
。
▼cout
に挿入するx
は文字列リテラルではありませんから、画面に表示されるのは、変数名4 4 4で ある「x」ではなく、その値4である「63」です。、 整数
/
整数
演算
、小数部(小数点以下 部分) 切 捨
。
実行結果 示
、
63
18
平均値
4.5
4
。
演習1-6 List 1-7のプログラムを変更して、小数部をもつ実数値をxやyに代入するプログラムを作成せよ。 その実行結果から、int型変数が整数値のみしか扱えないことを確認すること。 演習1-7 三つのint型変数に値を代入し、それらの合計と平均を求めるプログラムを作成せよ。 除算が後で行われる。 加算が後で行われる。算術演算子と演算のグループ化
叅
表示
、
x
y
合計
x
+ y
、平均
(x
+ y) / 2
。
平均 求
計算
、式
x
+ y
( )
囲
。
( )
、優先的 演算
行
記号
。Fig.1-11
ⓐ
示
、
x
+ y
加算 行
、
2
割 除算 行
。
記号
/
除算 行 記号
。
図
ⓑ
、
( )
x
+ y / 2
、
x
y
/ 2
和 求
。私
日常行
計算 同
、加減算
乗除算
優先
。
▼ すべての演算子と優先順位は、Table 2-10(p.76)で学習します。 cout << "xの値は" << x << "です。\n"; xの値は 63 です。 ( x + y ) / 2 加算が先に行われる。 除算が先に行われる。 ⓐ xとyの平均を求める ⓑ xに−を加えるy2 x + y / 2 ① ② ② ① xの値を取り出す。 x画
面
へ
の
出
力
と
キ
ー
ボ
ー
ド
か
ら
の
入
力
1
重 要 Fig.1-12 初期化を伴う宣言変数と初期化
前
、変数 値 代入
㆒
部分 削除
実験
。List 1-8 実行
。
変数
x
y
妙 値
実行結果
分
。
▼ この値は、実行環境や処理系によっても異なります(実行時エラーが発生して、プログラムの 実行が中断される場合もあります)。また、同一環境であっても、プログラムを実行するたびに 異なる値となる可能性があります。変数 生成
際 、不定値
値 入
。
、値 設定
変数
値 取 出
演算 行
、思
結果
。
▼ ただし、静的記憶域期間をもつ変数に限り、その生成時に自動的にが入れられます。詳しく は第 6 章(p.226)で学習します。 int x = 63 ; 初期化子 変数が生成される際に 入れる値を設定する。 // 二つの変数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の平均を表示 } 実行結果一例 xの値は6936です。 yの値は2358です。 合計は9294です。 平均は4647です。 List 1-8 chap1/list18.cpp 初期化子節 ▼ 標準 C++ では、=記号を含めた = 63 が初期化子と 呼ばれ、=記号より右側の 63 が初期化子節4(initializer clause)と呼ばれます。ただし、C言語を含めた、他の プログラミング言語では、後者を初期化子と呼ぶのが 一般的です。本書でも、文法的な厳密性が要求されな い文脈では、後者のことを初期化子と呼びます。初期化を伴う宣言
変数 入
値 事前 分
、
値 最初
変数 入
。
修正
List 1-9
。
網
部 宣言
、変数
x
変数
y
63
18
値 初期化(initialize)
。Fig.1-12 示
、変数 宣言
=
記号以降 部分 、変数 生成
時 入
値 指定
、初期化子(initializer) 呼
。
変数の宣言時には、初期化子を与えて確実に初期化するとよい。
変
数
1-3
Fig.1-13 初期化と代入初期化と代入
本
行
《初期化》 、List 1-7(p.18) 行
《代入》 、値 入
4 4 4 4 4異
。以下
理解
(Fig.1-13)。
▪初期化:変数 生成
値 入
。
▪代 入:生成済
変数 値 入
。
▼ ここに示したような、短く単純なプログラムでは、代入と初期化の違いは大きくありません。 ただし、第 10 章以降の《クラス》を用いたプログラムでは、その違いが明確になります。 なお、本書では、初期化を指定する記号=を細字で示し、代入演算子=を太字で示すことによっ て区別しやすくしています。 int x = 63; ⓐ 初期化 ⓑ 代入 x x = 63; x 演習1-8 int型の変数に実数値の初期化子を与えるとどうなるか。プログラムを作成して確認せよ。 変数の生成時に値を入れる 生成済みの変数に値を入れる 実 行 結 果 xの値は63です。 yの値は18です。 合計は81です。 平均は4です。 List 1-9 chap1/list19.cpp 63 int 63 // 二つの変数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の平均を表示 } 生成画
面
へ
の
出
力
と
キ
ー
ボ
ー
ド
か
ら
の
入
力
1
Fig.1-14 キーボードからの入力とストリーム1-4
キーボードからの
入力
変数を使うことの最大のメリットは、自由に値を入れたり出したりできることです。本節で は、キーボードから読み込んだ値を変数に入れる方法などを学習します。キーボードからの
入力
二
整数値 読 込
、
対
加算・減算・乗算・除算
行
結果 表示
。
List 1-10
示
。
入力
数値 変数 格納
網
部
。
初登場
cin
(一般
発音
) 、
結 付
標準入
力ストリーム(standard input stream)
。
、
cin
対
適用
>>
、
入力
文字 取 出 働
抽出子(extractor)
。
入力
cin
流
文字 数値
取 出 、
値 変数 格納
様子 示
Fig.1-14
。
▼int
型では無限に大きな(あるいは小さな)値を表現できないため、キーボードから入力す る値は List 4-1(p.129)の実行によって得られる範囲に収まっていなければなりません。また、 アルファベットや記号文字など数字以外の文字を入力しないようにしましょう。 cin >> x; 抽出子 変数 1 2 3 cin 標準入力ストリーム x演算子とオペランド
本
初
使
、減算 行
-
、乗算 行
*
、除算 剰余
求
%
。演算 行
+
-
記号 演算子(operator) 呼 、
演算 対象
式
オペランド
(operand) 呼
。
、
x
y
和 求
式
x
+ y
、演算子
+
、
x
y
二
(Fig.1-15)。
本
利用
演算子
+, -, *, /, %
概略
、Table 1-2
Table 1-3
。
、
演算子 、一般 算術演算子(arithmetic operator)
呼
。
キ
ー
ボ
ー
ド
か
ら
の
入
力
1-4
Fig.1-15 演算子とオペランドTable 1-2 加減演算子(additive operator)
x + y xにyを加えた結果を生成。
x - y xからyを減じた結果を生成。
Table 1-3 乗除演算子(multiplicative operator)
x * y xにyを乗じた値を生成。 x / y xをyで割った商を生成(x, yともに整数であれば小数点以下は切り捨てる)。 x % y xをyで割った剰余を生成(x, yともに整数でなければならない)。