C++ 練習問題

プログラミング
スポンサーリンク


C++の練習問題を考えてみました。

実行環境
・ Windows8.1
・ visual studio 2019 community

スポンサーリンク

問題1

hello world という文字列をコンソール画面に出力してください。

ただしコードの中に記述する hello world は ひとまとまりの文字列リテラル(注1) “hello world” ではなく “hello “(oの後にスペースが入っています)と “world” という2つの文字列リテラルとして記述してください。

また、コードの中で標準出力ストリームの記述は1回とします。

<<(挿入子)は2回以上使ってください。

注1  文字列リテラル:文字の並びをダブルコーテーションで囲んだもの  戻る

実行結果

解答例はここ

スポンサーリンク

問題2

問題1において挿入子(<<)を2回以上使う代わりに挿入子は1回だけ使って問題1と同様に hello world を出力してください。

コード内に記述する文字列リテラルも同様に”hello “と”world”です。

実行結果

解答例はここ

スポンサーリンク

問題3

コンソール画面へ ”hello world” と出力するコードを書いてください(ダブルコーテーションは含まない)。

ただしコードは以下の条件を満たしてください。

コードは空行を含まないでできるだけ行の数が多くなるように記述してください(\は使用しない)。

コードはインデントを含まないで記述してください。

実行結果 

解答例はここ

スポンサーリンク

問題4

以下のコードから不必要なスペースを削除して”hello world”とコンソール画面へ出力するコードを記述してください。

#include<iostream>
using nam espace std;

in t ma in()
{
	co ut <<"hello world\n";
}

解答例はここ

スポンサーリンク

問題5

coutを使って次の計算を行い結果をコンソール画面に出力してください。

4つの整数 34,45,43,50の平均値

実行結果

解答例はここ

スポンサーリンク

問題6

coutを使ってコンソール画面に下の実行結果のように出力してください。 

ただしコードの中で使用する数字は19と23のみです。

実行結果

解答例はここ

スポンサーリンク

問題7

整数の20をコンソール画面に出力するコードを書いてください。

ただし、20は変数xに代入してください。

また、 cout << 20; のように直接20を出力するコードとならないようにしてください。

実行結果 

解答例はここ

スポンサーリンク

問題8

3つの整数23,45,89の平均を計算し、コンソール画面に出力するコードを記述してください。

ただし、3つの変数は上に書いてある順番に変数x,y,zに代入してください。

コード内の出力する部分では直接3つの整数を記述せず3つの変数を記述してコードを作成してください。

実行結果

解答例はここ

スポンサーリンク

問題9

cout << の後に文字列リテラルを記述することなく意味のない値(でたらめな値)を出力してください。

ヒント: コードの中で変数xを宣言し、それを利用することを考えてください。

実行結果

解答例はここ

スポンサーリンク

問題10

変数を宣言した直後にその値を出力すると不定値が表示されます(問題9)。

では、変数xの宣言と当時に変数xに整数100を入れてその直後に変数xの値を出力してください。

実行結果

解答例はここ

スポンサーリンク

問題11

変数x,yを宣言し、キーボードから2つの数値(なんでもいいです)を読み込んで変数x,yに格納してください。

その2つの変数の合計値を3で割った余り(剰余)をコンソール画面に出力してください。

(今回は78,34を読み込んでみました)

実行結果

解答例はここ

スポンサーリンク

問題12

3つの変数x,y,zにキーボードから整数 34,56,78を読み込んでください。

コードの中には cin は1回だけ記述してください。

そのあとで3つの変数の合計値を出力してください。

実行結果

解答例はここ

スポンサーリンク

問題13

0~99の乱数を作成し出力するコードを記述してください。

実行結果

解答例はここ

スポンサーリンク

問題14

キーボードから文字列を読み込みその文字列を画面に出力するコードを記述してください。

実行結果

解答例はここ

スポンサーリンク

問題15

関係演算子 「<」 を使った式 (1<2) をcout(出力ストリーム)の後に書いてtrueと出力してください。

実行結果

解答例はここ

スポンサーリンク

解答例と解説

問題1解答例               

#include <iostream>

using namespace std;

int main()
{
	cout << "hello "<<"world" <<"\n";
}

解説

コンソール画面への出力は標準出力ストリーム”cout”を使います。

7行目のように 一つのcoutに対して複数の「<<(挿入子)+文字列リテラル」(例: << “hello ” )を並べることができます。

実行結果を見ると hello world と出力された後に改行されているので改行文字「\n」を最後に出力します。

問題1に戻る

問題2解答例                

#include <iostream>

using namespace std;

int main()
{
	cout << "hello " "world" "\n";

}

解説

7行目のようにひとつの<<(挿入子)に対して複数の文字列リテラルをそのあとに並べて記述することができます。

出力は左の文字列リテラルから順番に行われます。(問題1のときも同様)

出力される文字列は文字列リテラルを連結したものになります。

例: << “a” “b”      →      出力される文字列:ab

問題2に戻る

問題3解答例

#include <iostream>
using
namespace
std
;
int
main
(
)
{
cout
<<
"hello world\n"
;
}

解説 

Pythonはインデント(コードの先頭に空白スペースを入れることによって字下げすること)によってブロックを定義するので各行の書き出しの位置に制約があります。

それと比較するとC++はかなり自由に記述することができ解答例のように全くインデントを入れないような書き方のコードも可能です。このような自由に記述できる形式を自由形式と呼びます。

なお #include などは前処理(プリプロセス)と呼ばれ原則として1行で記述します。

問題3に戻る

問題4解答例

#include<iostream>
using namespace std;

int main()
{
	cout << "hello world\n";
}

解説

単語とは”cout”や”<<“などそれ以上分割すると意味を持たなくなるもののことです。

単語に空白文字類(スペース、タブなど)を入れるとエラーになります。

それ以上分割したら意味のなくなるものを空白文字で分割するのだから当然です。

例えばmainのaとiの間にスペースを入れて”ma in”と書くとコンパイル時にエラーになります

main.cpp(6): error C2146: 構文エラー: ';' が、識別子 'in' の前に必要です。

問題4に戻る

問題5解答例

#include <iostream>

using namespace std;

int main()
{
	cout << (34 + 45 + 43 + 50) / 4;
}

解説

7行目のようにcout << の後に (34 + 45 + 43 + 50) / 4 などと文字列をダブルコーテーションで囲まずに数式を直接記述するとその計算結果が出力されます。 文字列 「(34 + 45 + 43 + 50) / 4 」は出力されません。

問題5に戻る

問題6解答例

#include <iostream>

using namespace std;

int main()
{
	cout << "19+23=" << 19+23;		
}

解説

7行目の “19+23=” はダブルコーテーションで囲まれた文字列リテラルであり、その右に記述されている 19+23 は文字列リテラルではありません。

文字列リテラルは文字列がそのまま出力されます。なので “19+23=” はそのまま 19+23= と出力されます。 ダブルコーテーションで囲まれていない 19+23= は 19と23の加算が行われ、その結果42が出力されます。

なお 100や3のようにコードに整数値をそのまま書いたものは整数リテラルとよばれます。

問題6に戻る

問題7解答例

#include <iostream>
using namespace std;

int main()
{
	int x;

	x = 20;

	cout << x;
}

解説

変数をケーキの箱でたとえてみます。シャトレーゼでケーキを買うと下の画像のような箱に入れてくれます。

この箱はケーキを買ったときに店員さんがその都度組み立てます。組み立てた箱にケーキを入れて渡してくれます。

変数とはケーキを入れる箱のようなものです(実体はありませんが)。必要になるたびに組み立て、必要に応じてそこに何か入れておきます。

また、同じ形をした箱がいくつもあると区別がつかなくなるので箱に名前を付けておきます。

この箱の組み立てとその箱に名前を付ける作業をプログラミングでは「変数の宣言」といいます。

上のコードの6行目のように int x; と「変数の型 変数名」の順番に記述することで「int」という形(プログラミングでは型)の箱を組み立て「x」という名前をその箱につけます。

コードの中で変数を使うには「変数の宣言」が必要です。

8行目では宣言した変数xに20という値を入れています。 「=」は代入演算子と呼び右辺の値(上のコードでは20)を左辺の変数(上のコードではx)に代入する記号です。

変数の値を表示するには cout << x ;のように cout << の後に変数名をダブルコーテーションで囲まないで記述します。

問題7に戻る

問題8解答例

#include <iostream>
using namespace std;

int main()
{
	int x, y, z;

	x = 23;
	y = 45;
	z = 89;

	cout << (x+y+z)/3;
}

解説

問題1で見たように cout << の後に直接変数名を書くとその値を出力します。

12行目では変数を使って平均の計算が行われています。数学の四則計算のルールと同じで()「括弧」に囲まれた部分が先に計算されその値を3で除算しています。

その計算結果がコンソール画面に出力されます。

問題8に戻る

問題9解答例

#include <iostream>
using namespace std;

int main()
{
	int x;
	cout << x;
}

解説

上のコードでは変数xを宣言しただけでそれに値を代入していません(6行目)。値が代入されていない変数を出力すると実行結果のように意味のない数字が表示されます。

変数が宣言されるときに変数に意味のない値(不定値と呼ばれます)が入れられるのが原因です。

問題9に戻る

問題10解答例

#include <iostream>
using namespace std;

int main()
{
	int x = 100;	

	cout  << x ;			
}

解説

変数の宣言と同時に変数に値を入れるためには6行目の int x = 100;  のように変数名に続けて「= 値」と記述します。

この操作のことを「初期化」と呼びます。なお、「= 100」の部分を「初期化子」 と呼びます。

初期化と代入の違い

「初期化」は「代入」と似ていますが変数に値を入れるタイミングが違います。初期化は上に書いた通り宣言と同時に値を入れます。

代入はすでに宣言されている変数に値を入れます。

6行目のコードを代入を使って変数xに値を入れると次のようになります。

int x;
x = 100; この部分が代入です。

問題10に戻る

問題11解答例

#include <iostream>
using namespace std;

int main()
{
	int x,y;
	
	cin >> x;
	cin >> y;

	cout << (x + y)%3;
}

解説

キーボードから数値を読み込むには8行目のように書きます。cin(標準入力ストリーム)、>>(抽出子)、変数名(数値を入れておく)の順番に記述します。

この行が実行されるときコンソール画面のカーソルが点滅し入力を催促します。

数値を入力しenterキーを押すことでキーボードからの入力が完了し対象の変数に数値が格納されます。 

上のコードでは変数xへのキーボードからの入力の後変数yへの入力が行われるのでコンソール画面のカーソルが再び点滅状態となり数値の入力を催促します。 

問題11に戻る

問題12解答例

#include <iostream>
using namespace std;

int main()
{
	int x, y, z;
	cin >> x >> y >> z;

	cout << x + y + z;
}

解説

問題11のコードではキーボードからの読み込みを変数の数だけ記述しました。上のコードの7行目のようにcinを使った読み込み部分では 「>>(抽出子) 変数名」の組を複数記述することもできます。 

このように記述すると複数の値を連続して読み込むことができます。

問題1ではキーボードから数値を入力したあとでenterを押しました。

複数の数値を連続して読み込む場合、数値を入力したあとでスペースやenterをタイプすることで次に入力する数値との区切りとします。

問題12に戻る

問題13解答例

#include <ctime>
#include <cstdlib>
#include <iostream>

using namespace std;
int main()
{
	srand(time(NULL));		

	int randNum = rand() % 100;		

	cout << "乱数を発生させました:" << randNum<< "\n";
}

解説

乱数を作成するために必要なヘッダとして<ctime>と<cstdlib>をインクルードします。

8行目で乱数の種を生成しています。

10行目のrand()によって生成される値は例えば「28695」とかです。

この値を100で割った剰余を求めることで0~99の乱数を発生させています。

問題13に戻る

問題14解答例

#include <string>
#include <iostream>

using namespace std;

int main()
{
	string str;

	cout << "文字列を入力してください:";

	cin >> str;

	cout << str << "\n";
}

解説

読み込んだ文字列を格納するための変数として8行目のようにstring型の変数を宣言します。この型を使うときはヘッダ<string>のインクルードが必要です。

14行目でstrの値を出力しています。

問題14に戻る

問題15解答例

#include <iostream>

using namespace std;

int main() {
	cout << boolalpha;
	cout << (1 < 2) << endl;	
}

解説

関係演算子を使った式は評価の結果としてbool型の値を生成します。bool型の値はtrue(真)かfalse(偽)のどちらかです。

6行目のようにboolalpha操作子を出力ストリームの後に記述するとそれ以降のbool型の値がtrueかfalseのようにアルファベットで表示されます。 

boolalpha操作子を記述しない場合は1(真)か0(偽)で表示されます。

問題15に戻る

この記事は以上です。