明解C++

Similar documents
新版 明解C++入門編

解きながら学ぶC++入門編

プログラミング実習I

PowerPoint Presentation

JavaプログラミングⅠ

基礎プログラミング2015

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

System.out.println("char : " + (int)character.min_value + "~" + (int)character.max_value); System.out.println("float : " + Float.MIN_VALUE + "~" + Flo

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

JavaプログラミングⅠ

1. 関数 scanf() 関数 printf() は変数の値を画面に表示しますが それに対し関数 scanf() はキーボードで入力した値を変数に代入します この関数を活用することで対話式 ( ユーザーの操作に応じて処理を行う ) プログラムを作ることができるようになります 整数の和

Javaによるアルゴリズムとデータ構造

JavaプログラミングⅠ

基礎プログラミング2015

Cプログラミング1(再) 第2回

第2回講義:まとめ

スライド 1

講習No.12

gengo1-2

PowerPoint プレゼンテーション

Microsoft PowerPoint - 計算機言語 第7回.ppt

memo

ガイダンス

Microsoft Word - no02.doc

Prog1_2nd

講習No.1

PowerPoint プレゼンテーション

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

PowerPoint プレゼンテーション - 物理学情報処理演習

Microsoft Word - Training10_プリプロセッサ.docx

Microsoft Word - Cプログラミング演習(12)

ポインタ変数

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

3,, となって欲しいのだが 実際の出力結果を確認すると両方の配列とも 10, 2, 3,, となってしまっている この結果は代入後の配列 a と b は同じものになっていることを示している つまり 代入演算子 = によるの代入は全要素のコピーではなく 先をコピーする ため 代入後の a と b は

Microsoft PowerPoint - C1(演算と変数).ppt

JavaプログラミングⅠ

2006年10月5日(木)実施

明解Java入門編

Microsoft Word - no103.docx

Microsoft Word - 3new.doc

新・明解Java入門

Prog1_6th

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

Microsoft PowerPoint - class2-OperatorOverLoad.pptx

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Microsoft Word - no15.docx

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

講習No.10

Microsoft Word - Cプログラミング演習(1)_2012

Prog1_12th

スライド 1

ポインタ変数

kantan_C_1_iro3.indd

Java講座

プログラミング基礎

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx

Microsoft PowerPoint - 12.ppt [互換モード]

Microsoft PowerPoint - kougi6.ppt

Microsoft PowerPoint - prog08.ppt


Taro-ファイル処理(公開版).jtd

プログラミング実習I

JavaプログラミングⅠ

スライド 1

スクールCOBOL2002

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

Microsoft PowerPoint - 09.pptx

※ ポイント ※

<4D F736F F D20438CBE8CEA8D758DC03389F0939A82C282AB2E646F63>

Microsoft PowerPoint - program.ppt [互換モード]

(2) 構造体変数の宣言 文法は次のとおり. struct 構造体タグ名構造体変数名 ; (1) と (2) は同時に行える. struct 構造体タグ名 { データ型変数 1; データ型変数 2;... 構造体変数名 ; 例 : struct STUDENT{ stdata; int id; do

PowerPoint Presentation

gengo1-12

Microsoft PowerPoint - 12.ppt [互換モード]

PowerPoint Presentation

PowerPoint プレゼンテーション

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

Taro-ポインタ変数Ⅰ(公開版).j

Microsoft PowerPoint - kougi2.ppt

kiso2-09.key

Microsoft Word - COMP-MATH-2017-FULLTEXT.doc

Microsoft PowerPoint - 3.pptx

Microsoft PowerPoint - 3.ppt [互換モード]

Microsoft PowerPoint - 4.ppt [互換モード]

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

ポインタ変数

Javaプログラムの実行手順

# 深く掘り下げる C++ 講座 < 第 2 回 > // 先に先週の内容の解説 r ( キャリッジリターン ) 行の先頭に戻る 語源はタイプライターからだそうです とりあえず 以下に rを使ったくるくる回る顔文字のソース 注 : 以下のソースはmacのターミナル上での動作のみ保証 例 ) #inc

プログラミングI 第2回 数理物理,総合理学等向け

プログラミング入門1

6 関数 6-1 関数とは少し長いプログラムを作るようになると 同じ処理を何度も行う場面が出てくる そのたびに処 理を書いていたのでは明らかに無駄であるし プログラム全体の見通しも悪くなる そこで登場す るのが 関数 である 関数を使うことを 関数を呼び出す ともいう どのように使うのか 実際に見て

Excel2013基礎 数式と表編集

02: 変数と標準入出力

C 言語第 3 回 2 a と b? 関係演算子 a と b の関係 関係演算子 等しい a==b 等しくない a!=b より大きい a>b 以上 a>=b より小さい a<b 以下 a<=b 状態 真偽 値 条件が満たされた場合 TRUE( 真 ) 1(0 以外 ) 条件が満たされなかった場合 F

デジタル表現論・第6回

新・明解C言語 実践編

Microsoft Word - Javacc.docx

Prog1_15th

Transcription:

1 Fig.1-1 右 ( 子 ) から左 ( 親 ) に矢印が向いている理由は 第 14 章を学習すると分かるようになります C C++ Simula Fig.1-1 C with classes

1-1

1 List 1-1 List 1-1 // cout << "++\n"; cout << "\n"; Chap01/list0101.cpp ++ プログラム中のスペースや " などの記号を全角文字で打ち込まないよう注意しましょう \ の代わりに を使う日本独自の文字コード体系が採用されていることも あります みなさんの環境に応じて 必要ならば読みかえてください なお 本書に示すプログラムは ホームページからダウンロードできます (p. ⅳの 本書の構成 を参照してください ) /, \, #,,, <, >, (, ), ", ; C++ のプログラムで利用する記号文字の読み方は Table 1-1(p.11) にまとめています 本書では みなさんが読みやすく理解しやすくなるよう 青文字 斜体字 など を使い分けてプログラムを表記しています List 1-1 source programsource file

list0101.cpp.c.cc.c とは C++ プログラムの開発に必要なソフトウェアのことです Microsoft Visual C++ Borland C++ など数多くの処理系があります 1-2 (source) は もとになるもの という意味です ソースプログラムは と 呼ばれることもあります Fig.1-2 0 1 けた とは 0 あるいは 1 の値をもつデータ単位です 0 と 1 のみを表すことのできる 1 桁のデータ と理解しましょう //... 0001000101000111100100 1010101010101010101100 0000100011110001111001 0010101010101011110001 1010101010000100000110 Fig.1-2 つづソースプログラムに綴り間違いなどがあると コンパイル時にエラーが発生し その旨の (diagnostic message) が表示されます その際は 打ち込んだプログラムをよく読み直して ミスを取り除いた上で 再度コンパイル リンクの作業を試みましょう なお プログラム中の余白 ( 空白 ) に 全角文字のスペースを打ち込むと正しくコンパイルできません 半角文字のスペースか タブを打ち込みます

1 // // // comment 4 4 4 4 /* */ /* /* */ */ この記述法を使う場合は コメントを閉じるための */ を /* と書き間違えたり書き忘れたりしな いように注意しましょう <iostream> Fig.1-3 #include <iostream> <iostream> <string> <ctime> header #include include

//... (cout や cin の宣言など ) 1-2 Fig.1-3 各ヘッダは 単独のファイルとして提供されるとは限りません というのも テキストファイルで はなく コンパイル済みの特殊な形式で提供されることもあるからです ( そのため ヘッダファイル 4 4 4 4 ではなく 単にと呼ばれます) なお 単独のファイルとして提供される場合でも <iostream> のファイル名が "iostream" である という保証はありません ("iostream.h" や "iostream.hpp" といった名前かもしれません ) #include using std name space 4 4 std は standard( 標準 ) の略です なお は省略することもできます た だし その場合はプログラム中の cout を std::cout に変更しなければなりません (p.284) ヘッダ <iostream> をインクルードする指令が欠如していると どうなるであろうか プログラ ムをコンパイルして確認せよ using 指令を削除して cout を std::cout に変更したプログラムを作成せよ

1 cout << "++\n"; cout << "\n"; stream Fig.1-4 cout standard output stream << inserter cout << "ABC"; ABC cout Fig.1-4 以下 コンソール画面のことを単に 画面 と呼ぶことにします ヘッダ名 iostream は(input-output stream) の略で cout はコンソール アウト (console out) の略です ( 一般に シーアウト と発音します cont とか count と書き間違えないようにしましょう ) また 二つの << は連続しなければなりません < と < の間にスペースやタブを入れないようにしましょう "++\n" "ABC" " string literal 二重引用符 " は 文字列リテラルの開始と終了を表す記号です cout に挿入したときに " が画面 に表示されるわけではありません 文字列リテラルの詳細は第 7 章で学習します \n

4 4 4 \n は 見かけは \ と n の 2 文字ですが 改行文字 という を表します このように 目に見える文字として表記が不可能あるいは困難な文字は \ で始まる によって表します 拡張表記の詳細は第 3 章 (p.98) で学習します Fig.1-5 main main functionmain statement 1-2 C++ main cout << "++\n"; cout << "\n"; Fig.1-5 や や は後の章で学習しますので とりあえずは 決まり文句 として 覚えましょう なお 関数については第 5 章や第 8 章などで詳しく学習します main statement ; ; コメントは文では ので コメント文 といった文は存在しません 文の終端を示すセミコロン ; が欠如しているとどうなるか プログラムをコンパイルして確認 せよ

101 List 1-2 "" "" List 1-2 // << cout << "\a" << "\n"; Chap01/list0102.cpp cout \a cout 本書の実行例では 警告を と表記します 右に示すように 各行に 1 文字ずつ名前を表示するプログラムを作成せよ 著 者の名前ではなく 自分の名前を表示すること 右に示すように 各行に 1 文字ずつ名前を表示するプログラムを作成せよ 姓 と名の間は 1 行あけることとし 自分の名前を表示すること

11 Table 1-1 ここに示す読み方は 通称 略称 俗称を含んでいます Table 1-1 + - * / \ %., : ; ' " ( ) [ ] < >?! & ~ - - ^ # _ = 1-2

121 List 1-3 List 1-1 List 1-3 /* */ using namespace std; Chap01/list0103.cpp ++ int main( ) cout << "++\n"; cout << "\n"; return 0 ; free formated intreturnmaincout, <<, //, /*, */ ret urn "" cout << " ++\n";

13 " " cout << "\n"; cout << "" "\n"; 1-2 # #include このような指令は (preprocessing directive) と呼ばれ #include の他にも #define 指令 (p.110) や #if 指令 (p.343) などがあります List 1-1main Fig.1-6 for (int i = 1; i <= 9; i++) for (int j = 1; j <= 9; j++) cout << setw(3) << i * j; cout << '\n'; ここに示しているプログラ ムは List 3-12(p.88) の一部です 九九の表を出力します Fig.1-6

141 List 1-4 18 63 List 1-4 // cout << "1863" << 18 + 63 << "\n"; Chap01/list0104.cpp 186381 18 63 integer literal 18 は整数リテラルで "18" は文字列リテラルです 整数リテラルの詳細は第 4 章で学習します Fig.1-7 cout "1863" "\n" \n 4 4 4 4 18 + 63 81 cout << "1863" << 18 + 63 << "\n"; 1863 81 Fig.1-7

15 18 63 1-3 declaration x declaration statement int x; // xint int x Fig.1-8 int x ; int x Fig.1-8 x 3.5 int type int x int int 以外にもたくさんの型が提供されます 型に関する詳細は第 4 章以降で 名前の付け方に関す る規則は第 2 章 (p.61) で学習します int x, y; // intxy

161 x y 63 18 List 1-5 List 1-5 // xy int x; int y; x = 63; y = 18; // xint // yint // x63 // y18 cout << "x" << x << "\n"; cout << "y" << y << "\n"; cout << "" << x + y << "\n"; cout << "" << (x + y) / 2 << "\n"; Chap01/list0105.cpp x63 y18 81 40 // x // y // xy // xy 二つの変数を 1 行にまとめて int x, y; と宣言せず 別個に宣言しています このほうが 個々 の宣言に対するコメント ( 注釈 ) が記入しやすくなり 宣言の追加や削除が容易になります ( ただしプログラムの行数は増えてしまいます ) 臨機応変に使い分けましょう = assignment operator Fig.1-9 x 63 y 18 x = 63; y = 18; 63 18 x y Fig.1-9 演算子については p.21 で学習します 代入演算子は 数学のように x と 63 が等しい とか y が 18 と等しい といっているのではな 4 い 4 ことに注意しましょう なお 代入演算子には 演算と代入を同時に行う複合形式のものもあります (p.80)

17 1-3 Fig.1-10 x cout に挿入する x は文字列リテラルではありませんから 画面に x の 変数名 が表示されるの 4 4 4 4 ではなく その 値 が表示されます 63 cout << "x" << x << "\n"; x x63 Fig.1-10 x y x + y ( ) Fig.1-11 x + y 2 / ( ) x + y / 2 x y / 2 ( x + y ) / 2 x + y / 2 ( x + y ) / 2 x + y / 2 Fig.1-11 / 63 18 40.5 40 すべての演算子と優先順位は p.64 にまとめています List 1-5 のプログラムを変更して小数点以下をもつ実数値を x や y に代入せよ その実行結果 から int 型変数が整数値のみしか扱えないことを確認せよ 三つの int 型変数に値を代入し それらの合計と平均を求めるプログラムを作成せよ

181 List 1-6 List 1-6 // xy int x; int y; // xint // yint cout << "x" << x << "\n"; cout << "y" << y << "\n"; cout << "" << x + y << "\n"; cout << "" << (x + y) / 2 << "\n"; Chap01/list0106.cpp x6936 y2358 9294 4647 // x // y // xy // xy x y この値は 実行環境や処理系によっても異なります プログラムを実行するたびに異なる値となる 可能性もあります ただし 静的記憶域期間をもつ変数に限り 自動的に 0 が入れられます 詳しくは第 5 章 (p.199) で解説します List 1-7 x y 63 18 initialize = initializerfig.1-12 int x = 63; Fig.1-12

19 List 1-7 // xy 1-3 x63 y18 81 40 int x = 63; // xint63 int y = 18; // yint18 cout << "x" << x << "\n"; // x cout << "y" << y << "\n"; // y cout << "" << x + y << "\n"; // xy cout << "" << (x + y) / 2 << "\n"; // xy List 1-5 4 4 4 4 4 Fig.1-13 ここに示したような短く単純なプログラムでは 代入と初期化の違いは大きくありません ただし 第 9 章以降の クラス を用いたプログラムでは その違いが明確になります (p.378) なお 本書では 初期化を指定する記号 = を細字で 代入演算子 = をで示して区別しています int x = 63; x = 63; 63 63 x x Fig.1-13 int 型の変数に実数値の初期化子を与えるとどうなるか プログラムを作成して確認せよ Chap01/list0107.cpp

201 List 1-8 List 1-8 // int x; int y; // // cout << "xy\n"; Chap01/list0108.cpp xy x7 Ÿ y5 Ÿ x + y12 x - y2 x * y35 x / y1 x % y2 cout << "x"; cin >> x; cout << "y"; cin >> y; // x // x // y // y cout << "x + y" << x + y << "\n"; cout << "x - y" << x - y << "\n"; cout << "x * y" << x * y << "\n"; cout << "x / y" << x / y << "\n"; cout << "x % y" << x % y << "\n"; // x + y // x - y // x * y // x / y // x % y cin standard input stream cin >> extractor cin Fig.1-14 int 型では無限に大きな ( あるいは小さな ) 値を表現できないため キーボードから入力する値は List 4-2(p.111) の実行によって得られる範囲に収まっていなければなりません また アルファベットや記号文字など数字以外の文字を入力しないようにしましょう

21 cin >> x; x cin Fig.1-14 1-4 - * % + - operator operand x y x + y + x y Fig.1-15 左側のオペランドを第 1 オペランドあるいは左オペランドと呼び 右側のオペランドを第 2 オペラ ンドあるいは右オペランドと呼びます x + y Fig.1-15 binary operator unary operator ternary operator List 1-8 +, -, *, /, % arithmetic operator Table 1-2 Table 1-3 Table 1-2 x + y x - y x y x y Table 1-3 x * y x / y x % y x y x y x, y x y x, y

221 cout << cin >> List 1-9 List 1-9 // int x; int y; // // cout << "xy\n"; Chap01/list0109.cpp xy xy7 5 Ÿ x + y12 x - y2 x * y35 x / y1 x % y2 cout << "xy"; cin >> x >> y; // xy // xy cout << "x + y" << x + y << "\n"; cout << "x - y" << x - y << "\n"; cout << "x * y" << x * y << "\n"; cout << "x / y" << x / y << "\n"; cout << "x % y" << x % y << "\n"; // x + y // x - y // x * y // x / y // x % y >> >> 7 5 7 x 5 y 7 5 Ÿ 7 7 5 5 7 Ÿ 5 Ÿ 負の値に / 演算子や % 演算子を適用した演算結果は処理系に依存します p.25 の Column 1-1 で 解説しています

23 List 1-10 List 1-10 // int a; // Chap01/list0110.cpp 7 Ÿ 7-7 -15 Ÿ -1515 1-4 cout << ""; cin >> a; // // a int b = -a; // ab cout << a << "" << b << "\n"; b main b -a - - + +a a cout << +a << "" << b << "\n"; + - Table 1-4 Table 1-4 +x x -x x

241 int double List 1-11 List 1-11 // double x; double y; // // cout << "xy\n"; Chap01/list0111.cpp xy x7.5 Ÿ y5.25 Ÿ x + y12.75 x - y2.25 x * y39.375 x / y1.42857 cout << "x"; cin >> x; cout << "y"; cin >> y; // x // x // y // y cout << "x + y" << x + y << "\n"; cout << "x - y" << x - y << "\n"; cout << "x * y" << x * y << "\n"; cout << "x / y" << x / y << "\n"; // x + y // x - y // x * y // x / y もちろん小数点以下の部分のない値を入力しても構いません たとえば x の値として 5 を入力し たい場合は 5.0 と入力しても 単に 5 と入力してもよいことになっています Table 1-3 % % int double 実数の剰余を求めるプログラムは List 2-14(p.55) に示します 実数型を表すための に関する詳細は第 4 章で学習します

25 右に示すように キーボードから読み込んだ整数値に 10 を加え た値と 10 を減じた値を出力するプログラムを作成せよ 7 Ÿ 1017 10-3 二つの実数値を読み込み その和と平均を求めて表示するプロ x7.5 Ÿ グラムを作成せよ y5.25 Ÿ 12.75 6.375 実数値として半径を読み込んで 円の面積を表示するプログラ ムを作成せよ 7.2 Ÿ 162.7776 円周率は 3.14 とすること Column 1-1 除算を行う / 演算子と % 演算子は オペランドのどちらか一方でも負であれば 演算結果が処理系によって異なります オペランドが両方とも正符号すべての処理系で 商も剰余も正の値となります 例を示します x / y x % y x = 22 y = 5 4 2 オペランドの少なくとも一方が負符号 / 演算子の結果が 代数的な商以下の最大の整数 と 代数的な商以上の最小の整数 のいずれとなるのかは 処理系に依存します 以下に例を示します x / y x % y 4-2 x = -22 y = -5 5 3 x = -22 y = 5-4 -2 x = 22 y = -5-5 3-4 -2-5 3 1-4

261 List 1-12 List 1-12 // #include <ctime> #include <cstdlib> srand(time(null)); int lucky = rand() % 10; // // cout << "" << lucky << "\n"; Chap01/list0112.cpp 6 0 9 は必ず より前になければなりません したがって 本プログラムのように main 関数の最初 に を書くとよいでしょう rand() 0 10 10 lucky 0 9 以下に示す三つのプログラムを作成せよ 1 桁の正の整数値 ( すなわち 1 以上 9 以下の値 ) をランダムに生成して表示 1 桁の負の整数値 ( すなわち -9 以上 -1 以下の値 ) をランダムに生成して表示 2 桁の正の整数値 ( すなわち 10 以上 99 以下の値 ) をランダムに生成して表示 キーボードから読み込んだ整数値プラスマイナス 5 の範囲の整数値をランダムに生成して表示するプログラムを作成せよ キーボードから読み込んだ値が 100 であれば 95 ~ 105 の整数値を表示すること

27 Column 1-2 乱数の生成に必要な について現時点では理解する必要はありません 第 4 章や第 6 章 などの学習が終了した後に 本 Column を読むとよいでしょう * 乱数を生成する rand 関数は 0 以上 RAND_MAX 以下の乱数を返します <cstdlib> ヘッダで定義さ れる RAND_MAX の値は処理系に依存しますが 少なくとも 32,767 であることが保証されます 以下に示すのは 二つの乱数を生成するプログラム部分です #include <cstdlib> // int x = rand(); // RAND_MAX int y = rand(); // RAND_MAX cout << "x" << x << " y" << y << "\n"; 1-4 上記のプログラムを実行すると x と y は異なる値として表示されます ところが このプログラムを何度実行しても常に同じ値が表示されます (x と y の値は異なるのですが x の値は毎回同じになり y の値も毎回同じになります ) このことは 生成される乱数の系列 すなわちプログラム中で 1 回目に生成される乱数 2 回目に生成される乱数 3 回目に生成される乱数 が決まっていることを表しています たとえば ある処理系では 常に以下の順で乱数が生成されます 16,838 5,758 10,113 17,515 31,051 5,627 というのも rand 関数は 種 を利用した計算によって乱数を生成しているからです 種 の値が rand 関数の中に埋め込まれているため 毎回同じ系列の乱数が生成されるのです 種の値を変更するのが srand 関数です たとえば srand(50); // 50 と呼び出すだけで 種の値を変更できます もっとも このように定数を渡して srand 関数を呼び出しても その後に rand 関数が生成する乱 数の系列は決まったものとなってしまいます 先ほど例を示した処理系では 種を 50 に設定すると 生成される乱数は以下のようになります 22,715 22,430 16,275 21,417 4,906 9,000 そのため srand 関数に与える引数は ランダムな乱数でなければなりません しかし 乱数を生成する準備のために乱数が必要である というのも おかしな話です そこで よく使われる手法の一つが srand 関数に対して 現在の時刻 を与える方法です プロ グラムは以下のようになります #include <ctime> #include <cstdlib> // srand(time(null)); // int x = rand(); // RAND_MAX int y = rand(); // RAND_MAX cout << "x" << x << "y" << y << "\n"; time 関数が返却するのは time_t 型で表現された 現在の時刻 です プログラムを実行するたび に時刻は変わるわけですから その値を種にすると 生成される乱数の系列もランダムなものとなり ます なお time 関数の詳細は Column 10-4(p.328) で解説しています

281 List 1-13 List 1-13 // char c; // cout << ""; cin >> c; cout << "" << c << "\n"; // // // Chap01/list0113.cpp X Ÿ X char >> c char 型の詳細は第 4 章で学習します List 1-14 List 1-14 // #include <string> string name; // cout << ""; cin >> name; // // Chap01/list0114.cpp Ÿ Ÿ cout << "" << name << "\n"; //

29 string <string> string については 第 13 章で学習します >> "" name List 1-15 List 1-15 // #include <string> string name; // Chap01/list0115.cpp Ÿ Ÿ 1-4 cout << ""; getline(cin, name); // // cout << "" << name << "\n"; // getline(cin, ) string List1-16 List 1-16 // #include <string> Chap01/list0116.cpp s1fbi s2xyz string s1 = "ABC"; string s2 = "XYZ"; s1 = "FBI"; // // // cout << "s1" << s1 << "\n"; cout << "s2" << s2 << "\n"; // //

301 main <iostream> cout << cin >> "" \n \a int double char

31 string string <string> + * 1 ( ) / / % % rand