Skip to content

Commit c6ee8c7

Browse files
rurun418yas-ako
andauthored
Refactor/chapter 3 (#65)
Co-authored-by: yas-ako <105139975+yas-ako@users.noreply.github.com>
1 parent 583f36c commit c6ee8c7

17 files changed

Lines changed: 576 additions & 323 deletions

File tree

docs/.vitepress/config.ts

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,6 @@ export default withMermaid({
3131

3232
sidebar: {
3333
"/cpp/": [
34-
{
35-
text: "2025年度版テキスト",
36-
link: "/text/chapter-0/",
37-
},
3834
{
3935
text: "はじめに",
4036
link: "/cpp/preface/",
@@ -47,8 +43,8 @@ export default withMermaid({
4743
text: "1. 環境構築",
4844
link: "/cpp/chapter-1/",
4945
items: [
50-
{ text: "1-A. Macの環境構築", link: "/cpp/chapter-1/1-A" },
51-
{ text: "1-B. Windowsの環境構築", link: "/cpp/chapter-1/1-B" },
46+
{ text: "1.1-A. Macの環境構築", link: "/cpp/chapter-1/1-A" },
47+
{ text: "1.1-B. Windowsの環境構築", link: "/cpp/chapter-1/1-B" },
5248
],
5349
},
5450
{
@@ -59,12 +55,12 @@ export default withMermaid({
5955
{ text: "2.2 作業環境の構築", link: "/cpp/chapter-2/2" },
6056
{ text: "2.3 はじめてのプログラミング", link: "/cpp/chapter-2/3" },
6157
{
62-
text: "練習問題",
58+
text: "2.Q 練習問題",
6359
link: "/cpp/chapter-2/problems/",
6460
collapsed: true,
6561
items: [
6662
{
67-
text: "2-Q1. Hello, Shell!",
63+
text: "Hello, Shell!(★★★)",
6864
link: "/cpp/chapter-2/problems/hello-shell",
6965
},
7066
],
@@ -75,28 +71,29 @@ export default withMermaid({
7571
text: "3. 変数と入出力",
7672
link: "/cpp/chapter-3/",
7773
items: [
78-
{ text: "3.1 Hello, traP! の解説", link: "/cpp/chapter-3/1" },
74+
{ text: "3.1 Hello, traP!の解説", link: "/cpp/chapter-3/1" },
7975
{ text: "3.2 int型変数", link: "/cpp/chapter-3/2" },
8076
{ text: "3.3 標準入出力", link: "/cpp/chapter-3/3" },
8177
{
82-
text: "練習問題",
78+
text: "3.Q 練習問題",
8379
link: "/cpp/chapter-3/problems/",
8480
collapsed: true,
8581
items: [
86-
{
87-
text: "3-A1. Multiplication",
88-
link: "/cpp/chapter-3/problems/multiplication",
89-
},
90-
{ text: "3-B1. 4bit", link: "/cpp/chapter-3/problems/4bit" },
91-
{ text: "3-B2. Sum", link: "/cpp/chapter-3/problems/sum" },
82+
{ text: "Multiplication(★☆☆)", link: "/cpp/chapter-3/problems/multiplication" },
83+
{ text: "Sum of n(★★☆)", link: "/cpp/chapter-3/problems/sum-of-n" },
84+
{ text: "4bit(★★☆)", link: "/cpp/chapter-3/problems/4bit" },
9285
],
9386
},
9487
],
9588
},
89+
{
90+
text: "2025年度版テキスト",
91+
link: "/text/chapter-0/",
92+
},
9693
],
9794
"/text/": [
9895
{
99-
text: "2026年度版テキスト [WIP]",
96+
text: "[WIP] 2026年度版テキスト",
10097
link: "/cpp/preface/",
10198
},
10299
{

docs/.vitepress/theme/custom.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,7 @@ mjx-container.MathJax svg {
1212
summary {
1313
list-style-type: revert;
1414
}
15+
16+
.vp-doc :not(pre) > code {
17+
margin: 0 3px;
18+
}

docs/cpp/chapter-2/3.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ int main() {
2727
4. 実行に成功すると、画面下部に「出力」と書かれた画面が出てきて、`Hello, traP!`と表示される。
2828
5. プログラム中の`Hello, traP!`となっている部分を書き換えると出力が変わる。実際に試してみよう。
2929

30-
::: tip 2章のまとめ
30+
::: tip 第2章のまとめ
3131

3232
- プログラミングとは、「コンピューターにどのような動作をさせるかを予め指示する行為」
3333
- プログラムは、コンパイルして実行される

docs/cpp/chapter-2/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@ prev:
1111
講習後に環境構築の続きをするようにお願いします。
1212
:::
1313

14-
この章ではまず、「プログラミングとは何か」という話をした後に、第1章で作成した環境を使って、
14+
この章ではまず、「プログラミングとは何か」という話をした後に、第1章で作成した環境を使って、プログラムを動かしてみよう。

docs/cpp/chapter-2/problems/hello-shell.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# 2-C1. Hello shell
1+
# 2.Q Hello, Shell(★★★)
22

33
ターミナル (シェル) のファイルを検索するコマンド、 `find` コマンドで遊んでみましょう。
44

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
11
# 練習問題
22

3-
- [2-C1. Hello, Shell!](hello-shell)
3+
::: tip
4+
練習問題の難易度は3段階に分かれています。
5+
6+
* ★☆☆:**できれば解いて理解して欲しい問題**です。とにかく手を動かしましょう。
7+
* ★★☆:ぜひ解いて欲しいですが、解けなくても問題はありません。
8+
* ★★★:ややトリッキーな問題が並んでいます。余裕があれば取り組んでみましょう。
9+
:::
10+
11+
- [Hello, Shell!(★★★)](hello-shell)

docs/cpp/chapter-3/1.md

Lines changed: 115 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,152 +1,182 @@
1-
# 3.1 Hello, traP! の解説
1+
# 3.1 Hello, traP!の解説
22

3-
おさらい:第1章のコード
3+
## 3.1.1 全体像
44

5-
<<<@/cpp/chapter-3/hello-world.cpp{cpp:line-numbers}
5+
まずは、第2章の最後に登場したプログラムをおさらいしよう。
66

7-
1行目から順に、まずは「用語」を説明していく。
8-
新しい単語がどんどん出てくるが、単語の説明は 3.1.1. 以降で行う。今は単語を頭の片隅に入れておくレベルで良いだろう。
7+
1行目から順に、まずは「用語」を説明していく。
8+
新しい単語がどんどん出てくるが、単語の説明は3.1.2以降で行う。今は単語を頭の片隅に入れておくレベルで良いだろう。
99

10-
```cpp:no-line-numbers
11-
#include <iostream>
12-
```
10+
<<< @/cpp/chapter-3/Hello-traP.cpp{1 cpp:line-numbers}
1311

14-
`iostream` と呼ばれるファイルを「インクルード」している。
12+
`iostream`と呼ばれるファイルを「**インクルード**」している。
1513

16-
```cpp:no-line-numbers
17-
using namespace std;
18-
```
14+
<br>
1915

20-
`std::` を省略できるようにする。
16+
<<< @/cpp/chapter-3/Hello-traP.cpp{2 cpp:line-numbers}
2117

22-
```cpp
23-
int main() {
24-
```
18+
`std::`を省略できるようにする。
2519

26-
`main` という名前の「関数」を宣言している。
27-
プログラムは、ここから実行される。
20+
<br>
2821

29-
```cpp:no-line-numbers
30-
cout << "Hello, traP!" << endl;
31-
```
22+
<<< @/cpp/chapter-3/Hello-traP.cpp{4 cpp:line-numbers}
3223

33-
コンソールに `Hello traP!` を出力する。
34-
`"` で囲うのは、これが文字列なのか、命令なのかを区別するため。(`VSCode`を使っていれば `"Hello traP!"`
35-
の部分だけ色分けされているはず。) `endl` についても 3.1.2. で解説する。
24+
`main`という名前の「**関数**」を定義している。プログラムはここから実行される。
3625

37-
```cpp:no-line-numbers
38-
// Hello, traP を出力する
39-
```
26+
<br>
4027

41-
コメントを書いている。
28+
<<< @/cpp/chapter-3/Hello-traP.cpp{5 cpp:line-numbers}
4229

43-
```cpp:no-line-numbers
44-
}
45-
```
30+
コンソールに`Hello, traP!`を「**出力**」する。
31+
32+
`"`で囲うのは、これが文字列なのか、命令なのかを区別するため。(VSCodeを使っていれば`"Hello, traP!"`の部分だけ色分けされているはず。)
33+
34+
`endl`については3.1.3で解説する。
35+
36+
<br>
37+
38+
<<< @/cpp/chapter-3/Hello-traP.cpp{6 cpp:line-numbers}
39+
40+
**コメント**」を書いている。
41+
42+
<br>
43+
44+
<<< @/cpp/chapter-3/Hello-traP.cpp{7 cpp:line-numbers}
4645

4746
波括弧を閉じている。
4847

49-
## 3.1.1. コメント
48+
## 3.1.2 コメント
5049

51-
<<<@/cpp/chapter-3/hello-world.cpp{6 cpp:line-numbers}
50+
<<< @/cpp/chapter-3/Hello-traP.cpp{6 cpp:line-numbers}
5251

53-
`//` と書くと、その行の `//` 以降の部分はコメントになり、プログラム実行時には無視される
52+
`//`と書くと、その行の`//`以降の部分はコメントとなる。すなわち、プログラム実行時には無視され、無いものとして扱われる
5453

5554
::: tip
56-
プログラムの先頭に `//` を付けてコメントにする事をコメントアウトする、と呼ぶことがある。
55+
プログラムの先頭に`//`を付けてコメントにする事をコメントアウトする、と呼ぶことがある。
5756
:::
5857

59-
プログラムがどのような動作をするのか、どういう目的のプログラムなのか、を簡易的に記述すると良い。見たら分かるというレベルになれば、コメントを書く必要はない。
58+
プログラムがどのような動作をするのか、どういう目的のプログラムなのか、を簡潔に記述すると良い。見たら分かるというレベルになれば、コメントを書く必要はない。
59+
60+
## 3.1.3 cout
61+
62+
<<< @/cpp/chapter-3/Hello-traP.cpp{5 cpp:line-numbers}
63+
64+
`cout`は値を出力するための仕組みである。`<<`を使って値を渡すと、その値が文字として画面に表示される。文字列を出力するときは、命令と区別するため、`"`で文字列を囲むようにする。
65+
66+
このプログラムを実行すると、ターミナルに次のように出力される。
6067

61-
## 3.1.2. cout
68+
```Output:line-numbers
69+
Hello, traP!
70+
```
6271

63-
<<<@/cpp/chapter-3/hello-world.cpp{5}
72+
(Code Runnerを使ってプログラムを実行すると、他にもいろいろなものが表示されるかもしれないが、今は気にしなくて良い。)
6473

65-
`cout` はコンソール(画面)に文字列を出力する命令である。C++特有の記法で、 `<<` が ← みたいなものだと考えると良い。`cout`
66-
に向かって文字列を送信しているイメージ。複数つなげることもできる。(以下の例を参照)
74+
`<<`は、複数つなげることもできる。例えば、以下のように書いても出力は変わらない。
6775

68-
```cpp:no-line-numbers
76+
```cpp:line-numbers=4
6977
cout << "Hello, " << "traP!" << endl;
7078
```
7179

72-
また、`endl` は改行の命令を意味する
80+
`endl`と書くと、出力は改行される。例えば、プログラムを次のように書き換えてみる
7381

74-
:::: tip エスケープシーケンス
82+
```cpp:line-numbers=4
83+
cout << "Hello, " << endl << "traP!" << endl;
84+
```
7585

76-
出力に `"` を含めたい場合、 `cout << "Hello, "traP"!" << endl;` と記述してもコンパイルができない。これは `"Hello, "` で文字列が区切られてしまっているためである。
77-
これを回避するために、(Windows: ¥ キー, Mac: Option (⌥) キーを推しながら ¥ キー) `\` という文字を使って `\"` と書くことで、 `"` を出力することができる。
78-
このように `\` を使った文字の出力の仕方をエスケープシーケンスと呼ぶ。
86+
すると、出力は次のように変わる。
7987

80-
```cpp:no-line-numbers
81-
cout << "Hello, \"traP\"!" << endl; // output: Hello, "traP"!
88+
```Output:line-numbers
89+
Hello,
90+
traP!
8291
```
8392

84-
他にも以下 `Hello, \n traP!` のように文字列中に `\n` と書くと改行され、この場合は `"Hello, "``"traP!"` の間に改行が入る。
93+
::: tip エスケープシーケンス
94+
95+
出力に`"`を含めたい場合、`cout << "Hello, "traP"!" << endl;`と記述してもコンパイルができない。これは`"Hello, "`で文字列が区切られてしまっているためである。
96+
これを回避するために、`\`という文字を使って`\"`と書くことで、`"`を出力することができる。
97+
98+
このように`\`を使った文字の出力の仕方をエスケープシーケンスと呼ぶ。
8599

86-
``` cpp:no-line-numbers
100+
`\`は、Windowsであれば`¥`キーを押すことで、Macであれば`Option(⌥)`キーを押しながら`¥`キーを押すことで入力できる。
101+
102+
```cpp:line-numbers=4
103+
cout << "Hello, \"traP\"!" << endl; // 「Hello, "traP"!」と出力される
104+
```
105+
106+
他にも`Hello, \ntraP!`のように文字列中に`\n`と書くと改行ができる。
107+
108+
``` cpp:line-numbers=4
87109
cout << "Hello, \ntraP!" << endl;
88110
```
89111

90-
```txt
91-
[output]
112+
この場合は`Hello, ``traP!`の間に改行が入り、出力は以下のようになる。
113+
114+
```Output:line-numbers
92115
Hello,
93116
traP!
94117
```
95118

96-
また、`\`を文字列内で使いたい場合は、`\\` と書く。
119+
また、`\`を文字列内で使いたい場合は、`\\`と書く。文字列中では、`//`と書いてもコメントアウトされない
97120

98-
```cpp:no-line-numbers
99-
cout << "\\\\ Hello, traP!! //" << endl;
121+
```cpp:line-numbers=4
122+
cout << "\\\\ Hello, traP!! //" << endl; // 「\\ Hello, traP!! //」と出力される
100123
```
124+
:::
101125

102-
```txt
103-
[output]
104-
\\ Hello, traP!! //
105-
```
126+
## 3.1.4 セミコロン
127+
128+
C++では、`;`(セミコロン)を多用する。`;`は「命令の区切り」を示す。C++においては、関数を呼び出すときや、「変数」の定義時など、各命令の終わりには`;`を記述しなければならない。
106129

107130
::: tip
108-
文字列中では `//` を書いてもコメントアウトされない
131+
最終的にはコンピューターが機械語に変換する必要があり、その際に命令の区切りをはっきりさせるために`;`を使うと考えると良い
109132
:::
110133

111-
::::
134+
## 3.1.5 include命令
112135

136+
<<< @/cpp/chapter-3/Hello-traP.cpp{1 cpp:line-numbers}
113137

114-
## 3.1.3. セミコロン
138+
`#include`は、外部の関数(やその他もろもろ)が実装されているファイルを取り込んで、使えるようにする命令である。
115139

116-
C++では、`;` を多用する。`;` は「命令の区切り」を示す。C++
117-
においては、関数を呼び出すときや、次に出てくる「変数」の宣言時など、各命令の終わりには `;` を記述しなければならない。
140+
このプログラムでは`iostream`と呼ばれるファイルをインクルードしている。これは入出力に関する便利な関数(など)が用意されているファイルである。例えば、`cout``iostream`に含まれているものの一つである。
118141

119-
::: tip
120-
最終的にはコンピューターが機械語に変換する必要があり、その際に命令の区切りをはっきりさせるために `;`を使うと考えると良い。
121-
:::
142+
自分一人で一から作る事は非常に難しいので、予め用意されたプログラムを適宜用いてプログラミングをするのである。
122143

123-
## 3.1.4. include命令
144+
## 3.1.6 using namespace std
124145

125-
<<<@/cpp/chapter-3/hello-world.cpp{1 cpp:line-numbers}
146+
<<< @/cpp/chapter-3/Hello-traP.cpp{2 cpp:line-numbers}
126147

127-
`#include` は、外部の関数(やその他もろもろ)が実装されているファイルを取り込んで、使えるようにする命令である
148+
これまで出力を`cout`と記述してきたが、これは本来ならば`std::cout`と書く必要がある。(`std::`が何を意味しているかは深くは解説しないがstdがstandardの略であることくらいは知っておいても良いだろう。)毎回`std::`と書かなければいけないのは少し不便なので、これを書かない(省略する)という宣言をしている
128149

129-
このソースコードでは `iostream`
130-
と呼ばれるファイルをインクルードしている。これは入出力に関する便利な関数(など)が用意されているファイルである。具体的には、 `cout`
131-
`iostream` に含まれている。
150+
## 3.1.7 main関数
132151

133-
自分一人で一から作る事は非常に難しいので、予め用意されたソースコードを適宜用いてプログラミングをするのである。
152+
<<< @/cpp/chapter-3/Hello-traP.cpp{4 cpp:line-numbers}
134153

135-
## 3.1.5. using namespace std
154+
プログラムは実行されるとき、このmain関数から実行が始まる。すなわち、main関数の中身がプログラムの最も主な処理であると捉えても良い。「関数」についての詳細は第7章で扱う。
136155

137-
<<<@/cpp/chapter-3/hello-world.cpp{2 cpp:line-numbers}
156+
したがって、**main関数はプログラム中にただ1つ存在していなければならない**。main関数が無かったり、複数個存在していたりしてはいけない。
138157

139-
`cout` と記述しているが、本来ならば `std::cout` と書く必要がある。 `std::` が何を意味しているかは深くは解説しないが(std =
140-
standard くらいは知っても良いだろう)、毎回`std::`と書くのは少し不便なので、これを書かない(省略する)という宣言をしている。
158+
プログラムの中で`int main()`の後の`{`と、最終行の`}`は対応していて、`{}`の内側がmain関数の内容である。今のところは、「**main関数の`{``}`の間に処理を書く**」と思っていれば十分である。
141159

142-
## 3.1.6. main関数
160+
## 3.1.8 インデント
143161

144-
<<<@/cpp/chapter-3/hello-world.cpp{4 cpp:line-numbers}
162+
プログラムが長くなってくると、`{}`が何個も入れ子になって出てくるようになる。そこで、`{`が1つ始まるごとに、インデント(字下げ)を行う。すなわち、各行の最初に空白を入れる。
145163

146-
コンピューターはmain関数を実行する。main関数の中身がプログラムのメインの部分と捉えても良い。
147-
「関数」についての詳細は5章で扱う。
164+
以下は、第4章で学ぶif文を用いたプログラムである。今はまだ意味を理解する必要はないが、`{`が始まるごとに行頭の半角スペースが2つずつ増えていることがわかるだろう。VSCodeなどのエディタであれば、こうした作業はある程度自動で行ってくれる。
148165

149-
ソースコードの中で `int main()` の後の `{` と、最終行の `}` は対応していて、 `{ }` の内側が main
150-
関数の内容である。
166+
```cpp:line-numbers
167+
#include <iostream>
168+
using namespace std;
151169
152-
今のところは、「`{` からプログラムが始まって、末尾の`}` で終わる」と考えれば十分である。
170+
int main() {
171+
cout << "点数を入力してください。" << endl;
172+
int score = 0;
173+
cin >> score;
174+
175+
if (score >= 60) {
176+
cout << "合格です。" << endl;
177+
}
178+
if (score < 60) {
179+
cout << "不合格です。" << endl;
180+
}
181+
}
182+
```

0 commit comments

Comments
 (0)