404 Not Found

404 Not Found


nginx

「演習:分岐とループ」

ここ数回のレッスンでは、分岐とループについて学びました。それでは、これらを組み合わせて、本格的なプログラムを作成してみましょう。プログラミングを学ぶ最良の方法は、実際に何か役に立つことを行うプログラムを書くことです。


▶ サンプル:1:数字当てゲーム(難易度 ⭐⭐)

CPP
#include iostream
#include cstdlib
#include ctime

int main() {
 std::srand(std::time(0));
 int secret = std::rand() % 100 + 1;
 int guess;
 int attempts = 0;
 
 std::cout << "I'm thinking of a number between 1 and 100." << std::endl;
 
 do {
 std::cout << "Your guess: ";
 std::cin >> guess;
 attempts++;
 
 if (guess > secret) {
 std::cout << "Too high!" << std::endl;
 } else if (guess < secret) {
 std::cout << "Too low!" << std::endl;
 } else {
 std::cout << "Correct! You got it in " << attempts << " tries!" << std::endl;
 }
 } while (guess != secret);
 
 return 0;
}
▶ 試してみよう
💡 ヒント: std::srand(std::time(0)) は乱数生成器に現在の時刻をシードとして設定するため、実行するたびに異なる乱数が生成されます。


▶ サンプル:2:シンプルなアドレス帳(難易度 ⭐⭐⭐)

このプログラムは連絡先をメモリに保存し、名前で検索できるようにします。

CPP
#include iostream
#include string

int main() {
 const int MAX = 100;
 std::string names[MAX], phones[MAX];
 int count = 0;
 int choice;
 
 do {
 std::cout << "\n=== Contact Book ===" << std::endl;
 std::cout << "1. Add contact" << std::endl;
 std::cout << "2. Search contact" << std::endl;
 std::cout << "3. Show all" << std::endl;
 std::cout << "4. Exit" << std::endl;
 std::cout << "Choice: ";
 std::cin >> choice;
 std::cin.ignore();
 
 if (choice == 1 && count < MAX) {
 std::cout << "Name: ";
 std::getline(std::cin, names[count]);
 std::cout << "Phone: ";
 std::getline(std::cin, phones[count]);
 count++;
 std::cout << "Contact added!" << std::endl;
 } else if (choice == 2) {
 std::string keyword;
 std::cout << "Search name: ";
 std::getline(std::cin, keyword);
 bool found = false;
 for (int i = 0; i < count; i++) {
 if (names[i].find(keyword) != std::string::npos) {
 std::cout << names[i] << ": " << phones[i] << std::endl;
 found = true;
 }
 }
 if (!found) std::cout << "Not found." << std::endl;
 } else if (choice == 3) {
 for (int i = 0; i < count; i++) {
 std::cout << i + 1 << ". " << names[i] << ": " << phones[i] << std::endl;
 }
 }
 } while (choice != 4);
 
 std::cout << "Goodbye!" << std::endl;
 return 0;
}
▶ 試してみよう

▶ サンプル:3:履歴機能付き高度な電卓(難易度 ⭐⭐)

CPP
#include iostream
using namespace std;

int main() {
 double a, b, result;
 char op;
 bool running = true;
 
 while (running) {
 cout << "\nEnter (num op num): ";
 cin >> a >> op >> b;
 
 switch (op) {
 case '+': result = a + b; break;
 case '-': result = a - b; break;
 case '*': result = a * b; break;
 case '/': 
 if (b != 0) result = a / b;
 else { cout << "Error: division by zero!" << endl; continue; }
 break;
 default: 
 cout << "Invalid operator!" << endl; 
 continue;
 }
 cout << "= " << result << endl;
 }
 return 0;
}
▶ 試してみよう

▶ サンプル:4:シンプルなATMシミュレーター(難易度 ⭐⭐⭐)

CPP
#include iostream
using namespace std;

int main() {
 double balance = 1000.0;
 int choice;
 double amount;
 
 do {
 cout << "\n=== Simple ATM ===" << endl;
 cout << "1. Check balance" << endl;
 cout << "2. Deposit" << endl;
 cout << "3. Withdraw" << endl;
 cout << "4. Exit" << endl;
 cout << "Choice: ";
 cin >> choice;
 
 switch (choice) {
 case 1:
 cout << "Balance: $" << balance << endl;
 break;
 case 2:
 cout << "Deposit amount: $";
 cin >> amount;
 if (amount > 0) {
 balance += amount;
 cout << "Deposited! New balance: $" << balance << endl;
 }
 break;
 case 3:
 cout << "Withdraw amount: $";
 cin >> amount;
 if (amount > 0 && amount <= balance) {
 balance -= amount;
 cout << "Withdrawn! New balance: $" << balance << endl;
 } else {
 cout << "Insufficient funds!" << endl;
 }
 break;
 }
 } while (choice != 4);
 
 cout << "Thank you!" << endl;
 return 0;
}
▶ 試してみよう

▶ サンプル 1: practice branch loopデモ (難易度 ⭐)

CPP
#include <iostream>

int main() {
 // practice branch loopの
 std::cout << "practice branch loopをびましょう!" << std::endl;
 return 0;
}
▶ 試してみよう

❓ よくある質問

Q 「for」と「while」はいつ使うべきですか?
A 回数が分かっている場合は「for」を使います(例:「100回出力する」)。条件が分かっている場合は「while」を使います(例:「正解するまで推測し続ける」)。少なくとも1回は実行する必要がある場合は「do-while」を使います(例:「メニューを少なくとも1回表示する」)。
Q ループ内で「break」と「continue」はどのように連携して機能するのですか?
A break はループ全体を終了させます。continue は現在の反復のみをスキップします。これらを併用することは可能ですが、ロジックには注意が必要です。break はループを完全に終了させるのに対し、continue は1回の反復をスキップするだけです。
Q ループ内で文字列入力がうまくいかないのはなぜですか?
A おそらく cin >>getline を混同しているようです。cin >> の後に cin.ignore() を追加して、残っている改行文字を削除してください。

📖 まとめ


📝 練習問題

  1. 初心者(難易度 ⭐): 推測ゲームを修正し、正解への近さに基づいて、プレイヤーに「近づいている」かどうかを伝えるようにしてください。

  2. 中級(難易度 ⭐⭐): アドレス帳に「連絡先を削除」オプションを追加してください。ユーザーが名前で検索し、リストから連絡先を削除できるようにしてください。

  3. 上級(難易度 ⭐⭐⭐): ATMに取引履歴機能を追加する:各取引(種類、金額、新しい残高)を保存し、ユーザーが直近5件の取引を確認できるようにする。

Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%