Cpp Decision
# C++ Decision Making: A Comprehensive Guide
In programming, decision-making structures require the programmer to specify one or more conditions to be evaluated or tested by the program.
If the condition is determined to be **true**, a specific statement or block of statements is executed. Optionally, other statements can be executed if the condition is determined to be **false**.
The following diagram illustrates the general form of a typical decision-making structure found in most programming languages:
```
β
βΌ
/βββββββββββββββββ\
< Is Condition >
\ True or False? /
\βββββββββββββββ/
/ \
True / \ False
v v
\ /
\ /
βΌ βΌ
```
---
## Decision-Making Statements in C++
C++ provides several types of decision-making statements to control the flow of your program. The table below summarizes these statements and their use cases:
| Statement | Description |
| :--- | :--- |
| (#1-the-if-statement) | Consists of a boolean expression followed by one or more statements. |
| [if...else Statement](#2-the-ifelse-statement) | An `if` statement followed by an optional `else` statement, which executes when the boolean expression is false. |
| (#3-nested-if-statements) | An `if` or `else if` statement placed inside another `if` or `else if` statement. |
| (#4-the-switch-statement) | Allows a variable to be tested for equality against a list of values (cases). |
| (#5-nested-switch-statements) | A `switch` statement placed inside another `switch` statement. |
---
## Detailed Syntax and Code Examples
### 1. The `if` Statement
The `if` statement is the simplest decision-making statement. It is used to decide whether a certain statement or block of statements will be executed.
#### Syntax
```cpp
if (condition) {
// Block of code to execute if the condition is true
}
```
#### Code Example
```cpp
#include
using namespace std;
int main() {
int number = 10;
// Check if the number is greater than 5
if (number > 5) {
cout << "The number is greater than 5." << endl;
}
return 0;
}
```
---
### 2. The `if...else` Statement
The `if...else` statement provides an alternative block of code that executes when the condition evaluates to `false`.
#### Syntax
```cpp
if (condition) {
// Executed if condition is true
} else {
// Executed if condition is false
}
```
#### Code Example
```cpp
#include
using namespace std;
int main() {
int age = 16;
if (age >= 18) {
cout << "You are eligible to vote." << endl;
} else {
cout << "You are not eligible to vote." << endl;
}
return 0;
}
```
---
### 3. Nested `if` Statements
You can use one `if` or `else if` statement inside another `if` or `else if` statement to test multiple layered conditions.
#### Syntax
```cpp
if (condition1) {
// Executed when condition1 is true
if (condition2) {
// Executed when both condition1 and condition2 are true
}
}
```
#### Code Example
```cpp
#include
using namespace std;
int main() {
int x = 30;
int y = 10;
if (x == 30) {
if (y == 10) {
cout << "x is 30 and y is 10." << endl;
}
}
return 0;
}
```
---
### 4. The `switch` Statement
A `switch` statement allows a variable to be tested for equality against a list of values. Each value is called a **case**, and the variable being switched on is checked for each case.
#### Syntax
```cpp
switch (expression) {
case value1:
// Code to execute if expression equals value1
break; // Optional
case value2:
// Code to execute if expression equals value2
break; // Optional
default:
// Code to execute if expression doesn't match any case
}
```
#### Code Example
```cpp
#include
using namespace std;
int main() {
char grade = 'B';
switch (grade) {
case 'A':
cout << "Excellent!" << endl;
break;
case 'B':
case 'C':
cout << "Well done!" << endl;
break;
case 'D':
cout << "You passed." << endl;
break;
case 'F':
cout << "Better try again." << endl;
break;
default:
cout << "Invalid grade." << endl;
}
return 0;
}
```
---
### 5. Nested `switch` Statements
It is possible to use a `switch` as part of the statement sequence of an outer `switch`. Even if the case constants of the inner and outer switch contain common values, no conflicts will arise.
#### Code Example
```cpp
#include
using namespace std;
int main() {
int mainChoice = 1;
int subChoice = 2;
switch (mainChoice) {
case 1:
cout << "Main Choice is 1." << endl;
switch (subChoice) {
case 1:
cout << "Sub Choice is 1." << endl;
break;
case 2:
cout << "Sub Choice is 2." << endl;
break;
}
break;
case 2:
cout << "Main Choice is 2." << endl;
break;
}
return 0;
}
```
---
## The Conditional Operator `? :` (Ternary Operator)
C++ offers a shorthand method for writing simple `if...else` statements using the **conditional operator `? :`**. It is the only ternary operator in C++ (taking three operands).
### Syntax
```cpp
Exp1 ? Exp2 : Exp3;
```
* **`Exp1`** is the condition to evaluate. It must resolve to a boolean value.
* If `Exp1` is **true**, the expression evaluates to the value of **`Exp2`**.
* If `Exp1` is **false**, the expression evaluates to the value of **`Exp3`**.
### Code Example
```cpp
#include
using namespace std;
int main() {
int x = 10;
int y = 20;
// Assign the greater value to 'max'
int max = (x > y) ? x : y;
cout << "The maximum value is: " << max << endl; // Outputs 20
return 0;
}
```
---
## Best Practices and Considerations
1. **Always Use Braces `{}` for Blocks:** Even if an `if` statement contains only a single line of code, wrapping it in curly braces `{}` prevents bugs during future code maintenance.
2. **Don't Forget the `break` in `switch`:** Forgetting a `break` statement in a `switch` block causes execution to "fall through" to the next case, which is a common source of logical errors.
3. **Use Ternary Operators Sparingly:** While the `? :` operator is highly concise, avoid nesting multiple ternary operators as it severely degrades code readability.
4. **Prefer `switch` over long `if-else` chains:** When comparing a single variable against multiple discrete integral values, a `switch` statement is cleaner and can be optimized more efficiently by the compiler (via jump tables).
YouTip