2017年09月11日
《その23》 break文,continue文,goto文,(p.111演習3-23,p.113演習3-24,p.115演習3-25,演習3-26)
新版明解C++入門編 p.111 演習3-23
合計だけでなく平均も求めるように、List 3-15 および List 3-16 を書きかえたプログラムをそれぞれ作成せよ。
◆ p.110 List3-15を書きかえたプログラム
// p111_演習3-23(List3-15を変更)
#include <iostream>
using namespace std;
int main()
{
int n, i;
cout << "加算の回数:"; cin >> n;
int sum = 0;
for (i = 0; i < n; i++) {
int t;
cout << "整数(0で終了):"; cin >> t;
if (t == 0) break;
sum += t;
}
cout << "合計 … " << sum << "\n";
cout << "平均 … " << (double)sum / i << "\n";
}
/*
「 整数sum ÷ 整数i 」の計算結果は整数になります。
これだと、1と2の平均が 1.5ではなく、1 になってしまいます。
新版明解C++入門編 p.154 に書いてあるキャストと呼ばれる方法で、この不自然さ
を解決できます。
sum の前に (double) を付けて、(double)sum と記述することで 整数値を実数値に
変換し、それを回数で割れば 平均を実数値で求めることができます。
プログラムの
cout << "平均 … " << (double)sum / i << "\n";
の箇所です。
*/
◆ p.111 List3-16を書きかえたプログラム
// p111_演習3-23(List3-16を変更)
#include <iostream>
using namespace std;
int main()
{
int n, i;
cout << "加算の回数:"; cin >> n;
int sum = 0;
for (i = 0; i < n; i++) {
int t;
cout << "整数:"; cin >> t;
if (sum + t > 1000) {
cout << "\a合計が1,000を超えました。\n最後の数値は無視します。\n";
break;
}
sum += t;
}
cout << "合計 … " << sum << "\n";
if (!i) cout << "平均 … " << 0 << "\n";
else cout << "平均 … " << (double)sum / i << "\n";
}
/*
このプログラムの
if (!i) cout << "平均 … " << 0 << "\n";
は、
最初にいきなり 1000を越える整数が入力されたときの対策です。
たとえば、1回目に 1050と入力されると、iが0のまま繰り返し文を抜けてしまうので、
平均を求める計算が 0 ÷ 0 となってしまいます。
*/
新版 明解C++ 入門編 p.113 演習3-24
合計だけでなく平均も求めるように、List 3-17 を書きかえたプログラムを作成せよ。なお、読み込んだ負の数の個数は平均を求める際の分母から除外すること。
// p113_演習3-24
#include <iostream>
using namespace std;
int main()
{
int n;
cout << "0以上の整数を加算\n数値の個数:"; cin >> n;
int sum = 0; // 合計値
int np = 0; // 0以上の整数の個数
for (int i = 0; i < n; i++) {
int t;
cout << "0以上の整数:"; cin >> t;
if (t < 0) {
cout << "\a負の数は加算しません。\n";
continue;
}
sum += t;
np++;
}
cout << "入力数値" << n << "個のうち 0以上の整数は" << np << "個\n";
cout << "合計 … " << sum << "\n";
cout << "平均 … " << (double)sum / np << "\n";
}
新版 明解C++ 入門編 p.115 演習3-25
List 3-3(p.87)の数当てゲームのプレーヤが値を入力できる回数に制限を設けたプログラムを作成せよ。制限回数内に当てられなかった場合は、正解を表示してゲームを終了すること。
// p115_演習3-25
#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
const int FREQUENCY = 8; // 制限回数
srand((unsigned int)time(NULL));
int no = rand() % 90 + 10;
int x, i = 1;
cout << "数当て(10〜99の整数)\n入力制限回数 " << FREQUENCY << "\n\n";
do {
cout << "整数(10〜99)を入力 " << i++ << "回目:"; cin >> x;
if (x == no)
goto Correct;
if (i > FREQUENCY) {
cout << "\a\n回数オーバー! 正解は " << no << "です。\n";
goto Exit;
}
if (x > no)
cout << "それより小さい\n";
else
cout << "それより大きい\n";
} while (1);
Correct:
cout << "\n正解!\n";
Exit:
;
}
新版明解C++入門編 p.115 演習3-26
人間とコンピュータとが対戦するジャンケンプログラムを作成せよ。
@ 人間が望む限り何度でも繰り返せるようにするもの。
A いずれか一方が3回勝つまで繰り返すもの。
など、複数のパターンのプログラムを作ること。
@ 人間が望む限り何度でも繰り返せるジャンケンプログラム
// p115_演習3-26(何度でも繰り返せる)
#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
srand((unsigned int)time(NULL));
int cmp; // コンピュータの手
int you; // あなたの手
cout << "1 … グー\n2 … チョキ\n3 … パー\n";
cout << "※\"999\"の入力で終了\n\n";
do {
do {
cmp = rand() % 3 + 1;
cout << "あなたの手 :"; cin >> you;
if (you == 999)
goto Exit;
} while (you < 1 || you > 3);
cout << "------\n";
cout << "あなた :";
if (you == 1) cout << "グー\n" ;
if (you == 2) cout << "チョキ\n";
if (you == 3) cout << "パー\n" ;
cout << "コンピュータ:";
if (cmp == 1) cout << "グー\n" ;
if (cmp == 2) cout << "チョキ\n";
if (cmp == 3) cout << "パー\n" ;
if (you == cmp) {
cout << "◆あいこ\n" "------\n"; continue;
}
if (you == 1 && cmp == 2 || you == 2 && cmp == 3 || you == 3 && cmp == 1) {
cout << "◆あなたの勝ち\n""------\n";
}
else {
cout << "◆あなたの負け\n""------\n";
}
} while (1);
Exit:
;
}
A いずれか一方が3回勝つまで繰り返すジャンケンプログラム
// p115_演習3-26(3回勝つまで繰り返す)
#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
srand((unsigned int)time(NULL));
int cmp; // コンピュータの手
int you; // あなたの手
int nc = 0; // コンピュータの勝った回数
int ny = 0; // あなたの勝った回数
cout << "1 … グー\n2 … チョキ\n3 … パー\n";
cout << "※ 3回勝ったほうが勝ち\n";
cout << "※\"999\"の入力で終了\n\n";
do {
cout << "----- あなた " << ny << "勝 ";
cout << "コンピュータ " << nc << "勝\n";
if (ny == 3) {
cout << "◆あなたの勝ち\n" ; goto Exit;
}
if (nc == 3) {
cout << "◆コンピュータの勝ち\n"; goto Exit;
}
cmp = rand() % 3 + 1;
do {
cout << "あなたの手 :"; cin >> you;
if (you == 999)
goto Exit;
} while (you < 1 || you > 3);
cout << "あなた :";
if (you == 1) cout << "グー\n" ;
if (you == 2) cout << "チョキ\n";
if (you == 3) cout << "パー\n" ;
cout << "コンピュータ:";
if (cmp == 1) cout << "グー\n" ;
if (cmp == 2) cout << "チョキ\n";
if (cmp == 3) cout << "パー\n" ;
if (you == cmp) {
continue;
}
if (you == 1 && cmp == 2 || you == 2 && cmp == 3 || you == 3 && cmp == 1) {
ny++;
}
else {
nc++;
}
} while (1);
Exit:
;
}
--
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/6689392
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック