CPP Programming Control Statements if, else, switch Step by step Implementation and Top 10 Questions and Answers
 .NET School AI Teacher - SELECT ANY TEXT TO EXPLANATION.    Last Update: April 01, 2025      20 mins read      Difficulty-Level: beginner

C++ Programming Control Statements: if, else, switch

Control statements in C++ are fundamental to implementing the logic of a program. They allow a program to make decisions based on specific conditions, directing the flow of execution accordingly. The primary control statements used in C++ are if, else, and switch. These statements provide mechanisms for selecting which part of the code to execute based on given criteria. Below is a detailed explanation along with important information about each.

1. if Statement

The if statement allows a block of code to be executed only when a specific condition evaluates to true (non-zero). It helps in making decisions based on conditions.

Syntax:

if (condition) {
    // Code to be executed if condition is true
}

Explanation and Usage:

  • Condition: This is an expression that evaluates to either true or false.
  • Block of Code: This is the code that gets executed when the condition is true.
  • If the condition evaluates to true, the code inside the if block will run. Otherwise, it is skipped.

Example:

#include <iostream>
using namespace std;

int main() {
    int number = 10;
    if (number > 0) {
        cout << "The number is positive." << endl;
    }
    return 0;
}

Output:
The number is positive.

In this example, since number (10) is greater than 0, the condition number > 0 evaluates to true, and the message "The number is positive." gets printed.

2. else Statement

The else statement works in conjunction with the if statement. It provides an alternative block of code to execute if the if condition evaluates to false.

Syntax:

if (condition) {
    // Code to be executed if condition is true
} else {
    // Code to be executed if condition is false
}

Explanation and Usage:

  • Condition: Similar to the if statement, it evaluates to either true or false.
  • Else Block: This block executes if the if condition is false.
  • Only one of the blocks (if or else) executes, never both.

Example:

#include <iostream>
using namespace std;

int main() {
    int number = -5;
    if (number > 0) {
        cout << "The number is positive." << endl;
    } else {
        cout << "The number is not positive." << endl;
    }
    return 0;
}

Output:
The number is not positive.

Here, since number (-5) is not greater than 0, the if condition fails, and the else block runs, printing "The number is not positive."

3. switch Statement

The switch statement is used to execute different sections of code depending on the value of a variable or expression. It is particularly useful when there are multiple possible values for the variable and you want to handle each value with a specific block of code.

Syntax:

switch (expression) {
    case constant1:
        // Code to be executed if expression equals constant1
        break;
    case constant2:
        // Code to be executed if expression equals constant2
        break;
    ...
    default:
        // Code to be executed if none of the cases match
}

Explanation and Usage:

  • Expression: A single variable or an expression whose result is an integer type.
  • Case Labels: Each case label specifies a possible value of the expression. If the expression matches a case label, the code in that case's block executes.
  • Break Statement: The break statement terminates the switch block once a case is matched and prevents further checks.
  • Default Case: This optional block executes if none of the case labels match the expression.

Example:

#include <iostream>
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;
}

Output:
Well done

In this example, the variable grade is set to 'B', which matches the second case label. The output is "Well done," and the break statement ensures that the remaining cases are skipped. Without the break statement, the program would continue executing subsequent case blocks until a break statement is encountered or the switch block ends.

Important Points:

  • Boolean Expressions: Control statements use Boolean expressions (true/false) to decide which path to take.
  • Nested Control Statements: Control statements can be nested within each other (e.g., if statements inside an if statement).
  • Readability and Maintenance: Properly structured control statements enhance the readability and maintainability of the code.
  • Fall Through in switch: If a case statement does not have a break statement, the execution continues into the next case, known as fall-through. This behavior can be intentionally used, but it should be well-documented.

Understanding and effectively using these control statements is crucial for writing logical and efficient C++ programs. Mastery of these concepts enables you to tackle complex problems by breaking them down into manageable decision-making processes.




Writing a Simple C++ Application Using Control Statements: if, else, and switch

Setting Up Your Route

Programming involves breaking down complex problems into simpler manageable parts using control structures and logical decision-making processes. The if, else, and switch statements are fundamental control statements in C++ programming, used to make decisions based on different conditions.

Before we write our first C++ application using these statements, it's important to have your development environment squared away. In this guide, we'll use a popular IDE (Integrated Development Environment) called Code::Blocks, which is free and easy to install and get up and running.

  1. Download and Install Code::Blocks:

    • Visit Code::Blocks website and download the installer suitable for your operating system.
    • Run the installer and follow the on-screen instructions. During the installation, you might be prompted to choose a compiler like GCC. Go with the default options and proceed with the installation.
  2. Creating a new Project:

    • Open Code::Blocks.
    • Click on the menu File > New > Project....
    • Select Console Application and click on Go. Choose C++ as the language.
    • Provide a project title, a location to save your project, and make sure that the checkbox "Create directory for project" is checked. Click Next.
    • Leave all the other settings unchanged and click Finish.

Writing Our Code

Now, let’s write a simple program that incorporates if, else, and switch statements. We’ll create an interactive program asking the user for an input grade and print out remarks about their performance.

#include <iostream>
using namespace std;

int main() {
    // Declare variable for storing grade
    int grade;

    // Ask user for input
    cout << "Please enter your grade (0-100): ";
    cin >> grade;

    // Using if, else statements for basic conditions
    if(grade >= 90 && grade <= 100) {
        cout << "Your grade is A, excellent work!" << endl;
    }
    else if(grade >= 80 && grade < 90) {
        cout << "Your grade is B, good job!" << endl;
    }
    else if(grade >= 70 && grade < 80) {
        cout << "Your grade is C, try harder next time." << endl;
    }
    else if(grade >= 60 && grade < 70) {
        cout << "Your grade is D, you passed but need improvement." << endl;
    }
    else if(grade >= 0 && grade < 60) {
        cout << "Your grade is F, you failed, better luck next time." << endl;
    }
    else {
        cout << "Invalid input. Please enter a valid grade between 0 and 100." << endl;
    }

    // Using switch statement to demonstrate for a fixed number of choices
    char response;
    cout << "Would you like to try again? (y/n): ";
    cin >> response;

    switch(response) {
        case 'y':
        case 'Y':
            cout << "Great! Let's give it another go!" << endl;
            break;
        case 'n':
        case 'N':
            cout << "Alright then, have a great day!" << endl;
            break;
        default:
            cout << "Invalid response. Exiting the program." << endl;
            break;
    }

    return 0; // End of main function
}

Data Flow and Step-by-Step Explanation

Let's break down how the input flows through this code:

  1. User Interaction:

    • The program starts by prompting the user to enter a grade between 0 and 100.
  2. if, else if, else Decision Making:

    • The grade provided by the user is evaluated using nested if, else if statements to determine which range it falls in (e.g., 90-100 = A).
    • According to the value entered, specific messages are printed on the screen. If the grade is outside the 0-100 range, an error message is shown.
  3. Prompt for Retry:

    • Following this, the user is asked whether they want to try entering another grade.
    • Their response is stored in the response variable.
  4. Using switch For Decision Making:

    • Based on the response, the program uses a switch statement to decide what message to print.
    • If the user enters 'y' or 'Y', the program prints "Great! Let's give it another go!".
    • If 'n' or 'N' is input, it prints "Alright then, have a great day!".
    • Any other input results in an "Invalid response" message and the program continues to exit.
  5. Program Termination:

    • After executing the switch block, the program hits the return 0; statement, signaling successful completion and exiting the main function.

Running the Application

  1. Compile the Code:

    • Once the code has been written correctly, click on Build on the toolbar and select Build and Run (F9) to compile and execute your program.
    • If there are no syntax errors or warnings, your program will compile and execute immediately.
  2. Test the Program:

    • You’ll see the prompt asking you to enter a grade. Input a value and observe the output.
    • Then, when asked if you want to retry, enter 'y' or 'n' (or anything else to test the default behavior).

By following these steps, you now understand how to use if, else, and switch statements in C++. These basic control structures are crucial for any programmer to master as they form the basis of more complicated logical decision making in programs.

Practice writing similar examples and gradually introduce more complex conditions to cement your understanding. Happy coding!




Certainly! Below are the Top 10 questions along with their detailed answers related to C++ programming control statements such as if, else, and switch.

1. What is the difference between if and else in C++?

Answer: In C++, if and else statements are used for conditional branching. The if statement executes a block of code only if the specified condition evaluates to true. On the other hand, the else block is executed when the if condition is false.

Here’s an example:

int number = 10;
if (number > 20) {
    std::cout << "Number is greater than 20.";
} else {
    std::cout << "Number is not greater than 20.";
}

In this code, since the condition (number > 20) is false, the output will be "Number is not greater than 20."

2. How does the switch statement work in C++?

Answer: The switch statement in C++ allows you to execute different blocks of code based on the value of a variable. It compares an expression's value against a list of cases, each associated with a possible value. When a match is found, the code within that case is executed, often followed by a break statement which exits the switch block. If no matches are found and there is a default case, the code in the default block will be executed.

Here’s how it looks:

int day = 4;
switch (day) {
    case 1:
        std::cout << "Monday";
        break;
    case 2:
        std::cout << "Tuesday";
        break;
    case 3:
        std::cout << "Wednesday";
        break;
    case 4:
        std::cout << "Thursday";
        break;
    case 5:
        std::cout << "Friday";
        break;
    default:
        std::cout << "Weekend";
}

In this snippet, the program will output "Thursday" because day is equal to 4, which matches the fourth case.

3. Can you use strings in a switch statement in C++?

Answer: No, you cannot directly use strings in a switch statement in C++ prior to C++17. However, starting from C++17, you can use switch statements with std::string due to improvements in the language standard.

For versions before C++17, you would typically use if-else statements or map strings to integers or enums and then use those in your switch statement.

Here’s a C++17 compatible example:

#include <iostream>
#include <string>

int main() {
    std::string day = "Friday";
    switch (day) {
        case "Monday":
            std::cout << "1st day of the week.";
            break;
        case "Tuesday":
            std::cout << "2nd day of the week.";
            break;
        case "Wednesday":
            std::cout << "3rd day of the week.";
            break;
        case "Thursday":
            std::cout << "4th day of the week.";
            break;
        case "Friday":
            std::cout << "5th day of the week.";
            break;
        default:
            std::cout << "Weekend";
    }
    return 0;
}

4. What happens if you forget to add a break statement in a switch block?

Answer: If you omit a break statement in a switch block, the program will fall through to the next case irrespective of whether it evaluates to true or not. This can lead to unintended execution of multiple cases.

Here’s an example demonstrating fall-through:

int number = 2;
switch (number) {
    case 1:
        std::cout << "One\n";
    case 2:
        std::cout << "Two\n";
    case 3:
        std::cout << "Three\n";
    default:
        std::cout << "Something went wrong\n";
}

This code will produce:

Two
Three
Something went wrong

The break statement stops the execution of the following cases if the matched case has completed its execution.

5. Explain the difference between if-else and nested if statements in C++.

Answer: Both if-else and nested if statements are used for decision-making in C++.

if-else Statement: It checks conditions sequentially and once a condition is met, the corresponding block executes, and the rest are skipped.

int num = 10;
if (num > 5) {
    std::cout << "Greater than 5.\n";
} else if (num == 5) {
    std::cout << "Equal to 5.\n";
} else {
    std::cout << "Less than 5.\n";
}

This will print: "Greater than 5." since the first condition is true.

Nested if Statements: Nested if statements involve placing one if or if-else statement inside another. Each block contains new if or if-else statements, allowing for more complex conditions.

int age = 25;
bool student = false;

if (age >= 18) {
    if (student) {
        std::cout << "You are a student eligible to vote.";
    } else {
        std::cout << "You are eligible to vote but not a student.";
    }
} else {
    std::cout << "You are not eligible to vote.";
}

Here, "You are eligible to vote but not a student." will be printed because the outer condition (age >= 18) is true while the inner condition (student) is false.

6. How do you handle multiple conditions using a single if statement in C++?

Answer: Multiple conditions can be handled in a single if statement using logical operators like && (AND), || (OR), and ! (NOT).

  • Logical AND (&&): Both conditions must be true.
  • Logical OR (||): At least one condition must be true.
  • Logical NOT (!): Inverts the boolean state of a condition.

Example:

int x = 10, y = 20;
if (x > 5 && y < 30) {
    std::cout << "Both conditions are true.\n";
} 
// Outputs: Both conditions are true.

7. Can you nest else statements within each other, and what's a dangling else?

Answer: Yes, else statements can be nested within each other. However, improper nesting can lead to ambiguity, specifically a scenario known as a "dangling else."

In C++, a dangling else occurs when the structure of if-else statements becomes unclear about which if statement an else belongs to. The C++ compiler follows a specific rule where an else binds with the most recent unmatched if.

Example (with dangling else):

if(x > 5)
    if(y < 30)
        std::cout << "Nested condition true.\n";
else
    std::cout << "Dangling else.\n";  // Note that this else will bind to the second if, not the first

To avoid confusion, always use braces {} to clearly define the scope of each if and else block:

if(x > 5) {
    if(y < 30) {
        std::cout << "Nested condition true.\n";
    } else {
        std::cout << "Inner else.\n";
    }
} else {
    std::cout << "Outer else.\n";
}

8. How can I use a switch statement to handle ranges of values?

Answer: The switch statement in C++ is designed to test an expression against fixed integer values or enumerations, rather than ranges. Handling ranges directly within a switch statement isn’t possible. Instead, use a series of if-else statements.

However, if you still want to use a switch for handling ranges, you need to get a bit creative by mapping ranges to discrete values or using a combination of other methods, but this is not recommended.

Example using if-else:

int number = 15;

if (number >= 0 && number <= 10) {
    std::cout << "Range 0-10\n";
} else if (number > 10 && number <= 20) {
    std::cout << "Range 11-20\n";
} else if (number > 20 && number <= 30) {
    std::cout << "Range 21-30\n";
} else {
    std::cout << "Out of range\n";
}

Outputs: "Range 11-20"

9. What is the ?: operator in C++, and how is it related to control statements?

Answer: The ?: operator, also known as the conditional (ternary) operator, is a concise way of writing simple if-else statements in C++. Its syntax is:

condition ? expr_if_true : expr_if_false;

It works as follows:

  • The condition is evaluated first.
  • If condition is true, expr_if_true is evaluated and its result is returned.
  • If condition is false, expr_if_false is evaluated and its result is returned.

This operator is often used for assignments and function returns.

Example:

int a = 5, b = 10;
int max = (a > b) ? a : b;   // Assigns 10 to max since a is not greater than b

std::cout << "Maximum value: " << max;  // Outputs: Maximum value: 10

10. When should you prefer using if-else over switch statements and vice versa?

Answer: Choosing between if-else and switch statements depends on the nature of the control flow logic needed.

Prefer if-else when:

  • Testing conditions involves ranges or non-integer types (e.g., double, float).
  • Conditions are complex or involve logical operations (&&, ||, !).
  • You need to execute multiple independent sets of instructions in response to a condition without breaking the flow after any set of instructions.

Example:

double score = 85.5;

if(score >= 90) {
    std::cout << "Grade A\n";
} else if(score >= 80) {
    std::cout << "Grade B\n";
} else if(score >= 70) {
    std::cout << "Grade C\n";
} else {
    std::cout << "Fail\n";
}

Prefer switch when:

  • Matching against a list of constant integer values or enumerations.
  • Implementing cleaner and more readable code in situations with multiple cases that need to be handled distinctly.
  • Avoiding fall-through conditions by using break statements, making your code safer from accidental execution of unintended cases.

Example:

char grade = 'B';

switch(grade) {
    case 'A':
        std::cout << "Excellent.\n";
        break;
    case 'B':
    case 'C':
        std::cout << "Well done.\n";
        break;
    case 'D':
        std::cout << "You passed.\n";
        break;
    case 'F':
        std::cout << "Better try again.\n";
        break;
    default:
        std::cout << "Invalid grade.\n";
}

Outputs: "Well done."

Conclusion

Understanding and effectively utilizing control statements like if, else, and switch is fundamental to creating robust and flexible C++ programs. While if-else statements offer more versatility for complex conditions and ranges, switch provides clean syntax when dealing with multiple constant values and can help improve the readability of your code significantly. Always ensure to use break statements appropriately to avoid unexpected behaviors in your switch blocks.