C++入門|2章の練習問題

2章で覚えたC++の基本技を、練習問題で実戦確認。cinで受け取り、coutで表示し、if文とfor文で修行ミッションをクリアしよう。

ここまでの2章では、C++の基本として、cinによる入力、coutによる出力、stringによる文字列の扱い、if文による条件分岐、for文による繰り返しなどを学んできました。

このあたりの文法は、1つずつ見るとそれほど難しくありません。
ただし、実際のプログラムでは、これらを組み合わせて使うことがとても大切です。

たとえば、キーボードから整数を入力し、その値が条件を満たすかどうかを調べて、結果を表示する。
あるいは、文字列と回数を入力し、その文字列を指定された回数だけ表示する。

このような処理は、C++の基本練習としてとても重要です。

ドラゴンボール風にたとえるなら、2章で学んだ内容は、C++修行場で覚えた基本技です。

cinは、修行端末から値を受け取る技。
coutは、結果を表示パネルへ送る技。
if文は、スカウターの判定によって進む道を変える技。
for文は、同じ修行メニューを決められた回数だけ繰り返す技です。

今回の練習問題では、次の2つを確認します。

練習問題確認する内容ドラゴンボール風のイメージ
問題2-1整数を入力し、条件で表示を分ける戦闘力が基準を超えたか判定する
問題2-2文字列と回数を入力し、繰り返し表示する修行の掛け声を指定回数だけ唱える

どちらの問題も、2章で学んだC++の基本を確認するためのものです。

まずは問題文を読み、自分で考えてから、ヒント、解答例、解説の順に確認していきましょう。

図:2章の練習問題で確認するC++の基本技

この図が示していること

この図では、2章の練習問題で確認するC++の基本的な流れを表しています。

cinでキーボードから値を受け取り、if文で条件を判定し、for文で必要な回数だけ処理を繰り返し、coutで結果を表示します。

入力、判定、繰り返し、表示という流れは、C++の基本プログラムで何度も登場します。
この流れを練習問題でしっかり確認しておくと、次の内容にも進みやすくなります。

問題2-1:戦闘力が100より大きいか判定する

問題文

キーボードから整数値を入力させ、その数値が100より大きければ「100より大きい」、100以下であれば「100以下」と表示するプログラムを作りなさい。

なお、キーボードからの入力にはcin、文字の表示にはcoutを使うこと。

期待される実行結果①:100より大きい整数が入力された場合

戦闘力を入力:150
100より大きい

期待される実行結果②:100以下の整数が入力された場合

戦闘力を入力:80
100以下

この問題では、整数の入力、if文による条件分岐、coutによる表示を確認します。

ドラゴンボール風にたとえるなら、修行場のスカウターが、入力された戦闘力を見て「100を超えているかどうか」を判定するミッションです。

プログラムを作成するヒント

この問題では、まず整数を入れるための変数を用意します。

int power;

次に、coutで入力を促すメッセージを表示します。

cout << "戦闘力を入力:";

そして、cinでキーボードから入力された整数をpowerに入れます。

cin >> power;

入力された値が100より大きいかどうかは、if文で判定します。

if (power > 100) {
    100より大きい場合の処理
}
else {
    100以下の場合の処理
}

今回の条件式は、次のようになります。

power > 100

この条件が成り立つ場合は、100より大きいと表示します。
成り立たない場合は、100以下と表示します。

入力値条件 power > 100表示
150true100より大きい
101true100より大きい
100false100以下
80false100以下

100は「100より大きい」ではありません。
そのため、100を入力した場合は100以下と表示されます。

プログラムの解答例

プロジェクト名/ファイル名: Prac2_1/main.cpp

#include <iostream>

using namespace std;

int main(int argc, char** argv) {
    // 戦闘力を入れる変数を宣言する
    int power;

    // キーボードから整数値を入力する
    cout << "戦闘力を入力:";
    cin >> power;

    // 入力された戦闘力が100より大きいかを判定する
    if (power > 100) {
        cout << "100より大きい" << endl;
    }
    else {
        cout << "100以下" << endl;
    }

    // プログラムが正常に終わったことを示す
    return 0;
}

解説

このプログラムでは、キーボードから整数値を入力し、その値が100より大きいかどうかを判定しています。

最初に、整数を保存するための変数powerを宣言しています。

int power;

powerは、入力された戦闘力を入れておくための変数です。

次に、coutで入力を促しています。

cout << "戦闘力を入力:";

このように表示しておくと、実行した人は「ここで戦闘力を入力すればよい」と分かります。

そのあと、cinで入力された整数をpowerに代入しています。

cin >> power;

cinは、キーボードから入力された値を変数へ入れるために使います。
ここでは、入力された整数がpowerに入ります。

判定しているのは、次のif文です。

if (power > 100) {
    cout << "100より大きい" << endl;
}
else {
    cout << "100以下" << endl;
}

if文は、条件式がtrueの場合にif側の処理を実行します。
条件式がfalseの場合は、else側の処理を実行します。

今回の条件式は、power > 100です。

条件式意味
power > 100powerが100より大きいかどうか
true100より大きい
false100以下

たとえば、powerに150が入っている場合、150 > 100はtrueです。
そのため、100より大きいと表示されます。

一方、powerに80が入っている場合、80 > 100はfalseです。
そのため、else側に進み、100以下と表示されます。

ドラゴンボール風にいえば、スカウターが戦闘力を測定し、100を超えていれば「高出力修行モード」、100以下なら「基礎修行モード」と判定しているようなものです。

図:if文で100より大きいかを判定する

この図が示していること

この図では、入力された戦闘力をif文で判定する流れを表しています。

power > 100がtrueなら、100より大きいと表示します。
falseなら、100以下と表示します。

if文では、条件式が成り立つかどうかによって、実行する処理を分けることができます。
この問題は、C++の条件分岐を確認する基本練習です。

問題2-1で確認したいポイント

この問題では、次の内容を確認できます。

確認ポイント内容
int型整数を扱う
cinキーボードから値を入力する
cout文字を表示する
if文条件が成り立つか判定する
else条件が成り立たない場合の処理を書く
>演算子左の値が右の値より大きいか調べる

特に大切なのは、if文の条件式です。

power > 100

この式がtrueかfalseかによって、表示される内容が変わります。

C++では、このように入力された値を条件式で判定し、結果によって処理を分けるプログラムをよく作ります。

問題2-2:入力した修行メッセージを指定回数だけ表示する

問題文

キーボードから文字列と数値を入力させ、最初に入力した文字列を、入力した数値の回数だけ表示するプログラムを作りなさい。

なお、キーボードからの入力にはcin、文字の表示にはcoutを使うこと。

期待される実行結果

修行メッセージを入力:PowerUp
表示回数:3
PowerUp
PowerUp
PowerUp

この問題では、string型による文字列入力、int型による回数入力、for文による繰り返し表示を確認します。

ドラゴンボール風にたとえるなら、修行場で入力した掛け声を、指定した回数だけ唱えるトレーニングです。

プログラムを作成するヒント

まず、入力された文字列を入れるためにstring型の変数を用意します。

string message;

stringを使うために、stringヘッダーを読み込みます。

#include <string>

次に、表示回数を入れるためにint型の変数を用意します。

int count;

文字列の入力は、cinで行います。

cin >> message;

表示回数も、cinで入力できます。

cin >> count;

入力された文字列を指定回数だけ表示するには、for文を使います。

for (int i = 0; i < count; i++) {
    cout << message << endl;
}

このfor文では、iが0から始まり、i < countが成り立つ間だけ繰り返します。

たとえばcountが3なら、iは0、1、2の3回分だけ動きます。

countの値iの動き表示回数
101回
20, 12回
30, 1, 23回

for文では、繰り返したい処理を中カッコの中に書きます。
今回繰り返したい処理は、messageを表示する処理です。

プログラムの解答例

プロジェクト名/ファイル名: Prac2_2/main.cpp

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char** argv) {
    // 入力された修行メッセージを入れる変数を宣言する
    string message;

    // 表示回数を入れる変数を宣言する
    int count;

    // キーボードから文字列を入力する
    cout << "修行メッセージを入力:";
    cin >> message;

    // キーボードから表示回数を入力する
    cout << "表示回数:";
    cin >> count;

    // 入力された文字列を指定された回数だけ表示する
    for (int i = 0; i < count; i++) {
        cout << message << endl;
    }

    // プログラムが正常に終わったことを示す
    return 0;
}

解説

このプログラムでは、キーボードから文字列と表示回数を入力し、その文字列を指定された回数だけ表示しています。

まず、文字列を入れるための変数messageを宣言しています。

string message;

string型は、C++で文字列を扱うための便利な型です。
修行メッセージ、技名、名前、合言葉などを扱うときに使えます。

stringを使うため、プログラムの先頭ではstringヘッダーを読み込んでいます。

#include <string>

次に、表示回数を入れるための変数countを宣言しています。

int count;

countには、何回表示するかを表す整数が入ります。

文字列を入力する部分は、次のようになっています。

cout << "修行メッセージを入力:";
cin >> message;

coutで入力を促し、cinで入力された文字列をmessageに入れています。

続いて、表示回数を入力します。

cout << "表示回数:";
cin >> count;

ここで入力された数値がcountに入ります。

最後に、for文でmessageをcount回表示します。

for (int i = 0; i < count; i++) {
    cout << message << endl;
}

このfor文の中では、iという変数を使って繰り返し回数を数えています。

部分意味
int i = 0iを0から始める
i < countiがcountより小さい間だけ繰り返す
i++1回終わるごとにiを1増やす
cout << message << endl;messageを表示して改行する

たとえば、countに3が入っている場合、iは次のように変化します。

繰り返しiの値条件 i < count表示
1回目0truemessageを表示
2回目1truemessageを表示
3回目2truemessageを表示
終了判定3false表示しない

iが0、1、2の間は、i < countが成り立ちます。
そのため、messageが3回表示されます。

iが3になると、i < countが成り立たなくなるため、for文は終了します。

ドラゴンボール風にいえば、countは修行メニューの回数札です。
for文は、その回数札に書かれた回数だけ、修行メッセージを表示パネルに出します。

図:for文で文字列を指定回数だけ表示する

この図が示していること

この図では、入力された文字列をfor文で指定回数だけ表示する流れを表しています。

messageにPowerUpが入り、countに3が入っています。
for文はiを0から始め、i < countが成り立つ間だけ繰り返します。

countが3なので、iは0、1、2の3回分だけ動き、PowerUpが3回表示されます。

問題2-2で確認したいポイント

この問題では、次の内容を確認できます。

確認ポイント内容
string型文字列を扱う
int型表示回数を扱う
cin文字列や整数を入力する
cout文字列を表示する
for文同じ処理を指定回数だけ繰り返す
endl表示後に改行する

特に大切なのは、文字列と数値を別々の変数で受け取り、それらを組み合わせて処理している点です。

cin >> message;
cin >> count;

この2つの入力によって、何を表示するか、何回表示するかが決まります。

そのあと、for文でmessageをcount回表示しています。

for (int i = 0; i < count; i++) {
    cout << message << endl;
}

この形は、C++の繰り返し処理でとてもよく使います。

2つの練習問題で確認した流れ

今回の2つの練習問題は、どちらもC++の基本を組み合わせて作っています。

問題2-1では、整数を入力して条件判定を行いました。
問題2-2では、文字列と回数を入力して繰り返し表示を行いました。

問題入力処理出力
問題2-1整数100より大きいか判定判定結果を表示
問題2-2文字列と回数指定回数だけ繰り返す文字列を複数回表示

このように、C++では、入力、処理、出力の流れを考えることがとても大切です。

ドラゴンボール風に言えば、修行端末から値を受け取り、スカウターや修行装置で判定・繰り返し処理を行い、最後に表示パネルへ結果を出す流れです。

2章の練習問題で身につけたい考え方

2章の練習問題では、文法を暗記するだけではなく、次のような考え方を身につけることが大切です。

考え方内容
入力された値は変数に入れるcinで受け取り、あとで使えるようにする
条件で処理を分けるif文でtrueかfalseを判定する
同じ処理は繰り返しで書くfor文を使って効率よく処理する
結果はcoutで確認するプログラムの動きを画面で確認する
変数の型を意識する整数はint、文字列はstringを使う

C++の基本は、1つずつの文法を組み合わせていくことで身につきます。

最初は短いプログラムでも大丈夫です。
入力して、判定して、表示する。
入力して、回数分だけ繰り返す。

このような小さな練習を重ねることで、C++のコードを自分で組み立てる力が少しずつ育っていきます。

2章で押さえておきたい確認ポイント

最後に、2章の練習問題で確認したポイントを整理しておきます。

項目内容
cinキーボードから値を入力する
coutコンソールに文字を表示する
int整数を扱う
string文字列を扱う
if文条件によって処理を分ける
else条件が成り立たない場合の処理を書く
for文同じ処理を繰り返す
>演算子大きさを比較する
endl改行する

2章で学んだ内容は、C++プログラムの基本技です。

ドラゴンボール風に言えば、cinは入力の技、coutは表示の技、if文は判定の技、for文は反復修行の技です。

これらを組み合わせられるようになると、C++で作れるプログラムの幅が一気に広がります。
練習問題を通して、入力、判定、繰り返し、表示の流れをしっかり体に覚えさせていきましょう。