コンテンツにスキップ

第 2 回 | 2024-10-04

  • 文章の出力の別の書き方を学ぶ
  • 計算をする方法を学ぶ
  • コード内にコメントを残す方法を学ぶ
  • 特殊な文字のエスケープを学ぶ

1. 複数の文章の出力

1.1 インデントのスタイル

  • std::cout の前にある大きな空白(インデント)は、Tab キーを 1 回押して入力できる。
  • タブの代わりに「半角空白 2 文字」あるいは「半角空白 4 文字」でインデントを作るスタイルもある。どれを使うかは好みによるが、混在させるのは好ましくない。
(悪い例)インデントのスタイルが混在している
#include <iostream>

int main()
{
	std::cout << "Hello, C++!";	// (1)!

  std::cout << "Hi!\n";	// (2)!

    std::cout << "See you.\n";	// (3)!
}
  1. タブでインデントしている
  2. 半角空白 2 文字でインデントしている
  3. 半角空白 4 文字でインデントしている

1.2 セリフを連続させる

  • std::cout に文章を送ったあとに、出力の記号 << をつづけると、別の文章をさらに追加で送ることができる。
  • 今の時点ではとくに役には立たないが、2.1 のように std::cout に異なる種類の複数のデータをに送る際に役立つ。
📙 Unit 06
#include <iostream>

int main()
{
	std::cout << "訓練所で\n" << "冒険者の試験が開催される\n";
}

上のプログラムは次のようなプログラムと同じはたらきをする。

#include <iostream>

int main()
{
	std::cout << "訓練所で\n";

	std::cout << "冒険者の試験が開催される\n";
}
#include <iostream>

int main()
{
	std::cout << "訓練所で\n冒険者の試験が開催される\n";
}
  • << の前後では、コードに改行を入れることができる。
📙 Unit 06
#include <iostream>

int main()
{
	std::cout << "訓練所では\n"
		<< "明日から\n"
		<< "冒険者の試験が開催される\n";
}

上のプログラムは次のようなプログラムと同じはたらきをする。

#include <iostream>

int main()
{
	std::cout << "訓練所では\n";

	std::cout << "明日から\n";

	std::cout << "冒険者の試験が開催される\n";
}
#include <iostream>

int main()
{
	std::cout << "訓練所では\n明日から\n冒険者の試験が開催される\n";
}

  • これらはどの書き方でも問題ない。自分にとって読みやすい形式で書けばよい。

2. 計算する

  • 文章(文字列)は書かれた内容をそのまま出力するだけで、計算は行わない。

#include <iostream>

int main()
{
	std::cout << "1 + 2\n";
}
出力
1 + 2

  • プログラムで計算を行う場合、文字列の代わりに数値を使って計算式を書く必要がある。
  • 2. では、数値の一種である整数の扱い方を学ぶ。

2.1 整数を表示する

  • 計算で使う整数を用意する場合、ダブルクォーテーションでかこまず数字を書く。
  • 整数は直接 std::cout に送ることができる。
  • 整数の出力のみだと改行はされないので、改行文字も忘れずに送る。
  • 改行文字は文字なので、別途ダブルクォーテーションで囲んだ文章(文字列)として送る。
📙 Unit 07
#include <iostream>

int main()
{
	std::cout << 30 << "\n";

	std::cout << 100 << "\n";

	std::cout << 8 << "\n";
}

2.2 足し算と引き算

  • 整数と、+- の記号を組み合わせて数式を作ると、コンピューターはその数式を計算してくれる。
📙 Unit 08
#include <iostream>

int main()
{
	std::cout << 30 + 10 << "\n";

	std::cout << 100 - 60 << "\n";

	std::cout << 8 + 6 - 4 << "\n";	// (1)!
}
  1. 長い式を作ることもできる。

数値と文字列の違いを確認する

#include <iostream>

int main()
{
	std::cout << 30 + 10 << "\n";

	std::cout << "30 + 10" << "\n";
}
出力
40
30 + 10

2.3 かけ算と割り算

  • かけ算には *(アスタリスク)の記号を使う。
  • 割り算には /(スラッシュ)の記号を使う。
📙 Unit 09
#include <iostream>

int main()
{
	std::cout << 5 * 8 << "\n";

	std::cout << 240 / 2 << "\n";

	std::cout << 8 * 6 / 4 << "\n";
}

2.4 整数の割り算は小数以下を切り捨てる

  • C++ における整数どうしの割り算は、整数の世界で完結するよう、答えの小数点以下を切り捨てる。
📙 Unit 10
#include <iostream>

int main()
{
	std::cout << 10 / 3 << "\n";

	std::cout << 5 / 2 << "\n";

	std::cout << 22 / 5 << "\n";
}
割り算で小数点以下の答えも表示する方法は、今後の講義で取り上げる
📙 Unit 10
#include <iostream>

int main()
{
	std::cout << 10.0 / 3.0 << "\n";

	std::cout << 5.0 / 2.0 << "\n";

	std::cout << 22.0 / 5.0 << "\n";
}

2.5 あまりを求める

  • % は割り算の余りを計算する記号。
  • 10 % 3 は 10 を 3 で割った余りを求める。
📙 Unit 11
#include <iostream>

int main()
{
	std::cout << 10 % 3 << "\n";

	std::cout << 5 % 2 << "\n";

	std::cout << 22 % 5 << "\n";
}

2.6 計算の順序

  • 算数と同じように、足し算や引き算よりも、かけ算・割り算・あまり算が先に計算される。
  • この順番を変えたいときには、算数と同じように、丸かっこ () で式をかこむ。
優先順位 記号
1 * / %
2 + -
📙 Unit 12
#include <iostream>

int main()
{
	std::cout << 10 + 2 * 2 << "\n";

	std::cout << (10 + 2) * 2 << "\n";

	std::cout << (2 * (1 + 1) + 2) * 2 << "\n";	// (1)!
}
  1. ( ) は何重に使ってもよい。

3. コード内にコメントを残す

3.1 コメントの書き方

  • プログラムの途中で、2 つ連続したスラッシュ // を書くと、それ以降その行が終わるまでは「コメント」になる。
  • コメントには、プログラムに影響を与えずに何でも自由に書くことができる。
📙 Unit 13
#include <iostream>

int main()
{
	// かけ算が先
	std::cout << 10 + 2 * 2 << "\n"; // 14
}
  • 特定の行のコードを実行させないためにコメントを使うこともできる。
📙 Unit 13
#include <iostream>

int main()
{
	//std::cout << "おはよう\n";

	std::cout << "こんにちは\n";
}

3.2 範囲コメントの書き方

  • 任意の位置から始めて、任意の位置で終わるような「範囲コメント」を書くことができる。
  • 範囲コメントは、/* で始まり、*/ で終わる。
#include <iostream>

int main()
{
	/* 
		ここは範囲コメント。
		コメントの中には何でも書ける。
		まだまだ続く。
	*/

	std::cout << "こんにちは\n";
}
  • 複数行にわたるプログラムを一時的に無効にするときに使うことができる。
#include <iostream>

int main()
{
	/*
	std::cout << 30 + 10 << "\n";

	std::cout << 100 - 60 << "\n";
	*/

	std::cout << 8 + 6 - 4 << "\n";
}

4. 特殊な文字のエスケープ

  • 文章(文字列)内において、「改行」のように、文字として表せない要素を、ある記号とそれに続く別の文字の組み合わせによって表現することがある。
  • このとき前者の記号を「エスケープ文字」という。
  • C++ では、エスケープ文字 \ とそれに続く別の文字の組み合わせによって、次のような要素を表現する。
文字列内での表し方 意味
\n 改行
\t タブ空白
\\ バックスラッシュ
\" ダブルクォーテーション

4.1 改行

  • 文章中に改行文字 \n を入れると、そこで改行される。

改行の使用例
#include <iostream>

int main()
{
	std::cout << "Sophia\n\n\nUniversity\n";
}
出力
Sophia


University

4.2 タブ空白

  • 文章中にタブ空白文字 \t を入れると、そこにタブ空白が挿入される。

タブ空白の使用例
#include <iostream>

int main()
{
	std::cout << 1 << "\tJanuary\n";

	std::cout << 2 << "\tFebruary\n";

	std::cout << 3 << "\tMarch\n";

	std::cout << 12 << "\tDecember\n";
}
出力
1	January
2	February
3	March
12	December

  • 出力時に、D の文字が J, F, M と同じ縦の列に揃うことに注目。タブ空白は多少の文字数の違いを吸収してくれる。
  • 具体的な挙動としては、数文字単位の「見えない目盛り」が用意されていて、次の目盛りまで空白を埋める。

4.3 バックスラッシュ

  • 文章中にバックスラッシュ文字 \\ を入れると、そこにバックスラッシュが挿入される。

バックスラッシュの使用例
#include <iostream>

int main()
{
	std::cout << "/(^o^)\\\n";
}
出力
/(^o^)\

4.4 ダブルクォーテーション

  • 文章中にダブルクォーテーション文字 \" を入れると、そこにダブルクォーテーションが挿入される。

ダブルクォーテーションの使用例
#include <iostream>

int main()
{
	std::cout << "Hello \"C++\"!\n";
}
出力
Hello "C++"!

✅ 振り返りチェックリスト

  • 文章の出力の別の書き方を学んだ
  • 計算をする方法を学んだ
  • コード内にコメントを残す方法を学んだ
  • 特殊な文字のエスケープを学んだ

📝 課題

4 つの数字 2 3 4 5 と、習った計算の記号を組み合わせ、答えが 0, 1, 2, ..., 20 になる数式をそれぞれ 1 個ずつ、合計 21 個見つけ、それを示すコードまたは【コードの共有 URL】を提出してください。

  • 1 つの数式で、数は 4 つすべて使います。同じ数は 2 回以上使えません。
  • +, -, *, /, %, () の記号を何回でも自由に使えます。
  • 2*(-3) のように数にマイナスをつけることもできます。
  • コードのインデントのスタイル(1.1 参照)が一貫していれば(混在していなければ)、ボーナス点がつきます。

ヒントとして、答えが 0 になるパターンと 1 になるパターンを示します。残りの 19 個を見つけてください。見つけた答えを、各行の末尾に // 0 のようにコメントでメモしておくと、考えるときに便利です。

未完成の解答
#include <iostream>

int main()
{
	std::cout << (5 - 4 - 3 + 2) << "\n"; // 0
	std::cout << ((3 - 2) * (5 - 4)) << "\n"; // 1


}
提出コードを実行したときに求められる出力
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20