* Minor formatting change and added a note on == * Code blocks are now styled as C-language syntax. * Added a note about the difference of `==` and `=` in the context of condition statements. * change the second #6 to 7
		
			
				
	
	
		
			286 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			286 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						|
title: Conditional Statements
 | 
						|
---
 | 
						|
# Conditional Statements in C
 | 
						|
Conditional Statements are also known as Branching Statements. They are so called because the program chooses to follow one branch or another.
 | 
						|
 | 
						|
## 1. if statement
 | 
						|
This is the most simple form of the conditional statements. It consists of a Boolean expression followed by one or more statements. If the Boolean expression evaluates to **true**, then the block of code inside the 'if' statement will be executed. If the Boolean expression evaluates to **false**, then the first set of code after the end of the 'if' statement (after the closing curly brace) will be executed.
 | 
						|
 | 
						|
C programming language **_assumes any non-zero and non-null values as true_** and if it is **_either zero or null, then it is assumed as false_** value.
 | 
						|
 | 
						|
#### Syntax
 | 
						|
```C
 | 
						|
if(boolean_expression)
 | 
						|
{
 | 
						|
    //Block of Statements executed when boolean_expression is true
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
#### Example
 | 
						|
```C
 | 
						|
int a = 100;
 | 
						|
if(a < 200) 
 | 
						|
{
 | 
						|
    printf("a is less than 200\n" );
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
#### Result
 | 
						|
`a is less than 200`
 | 
						|
 | 
						|
## 2. if...else statement
 | 
						|
If the Boolean expression evaluates to **true**, then the if block will be executed, otherwise, the else block will be executed.
 | 
						|
 | 
						|
#### Syntax
 | 
						|
```C
 | 
						|
if(boolean_expression) 
 | 
						|
{
 | 
						|
    //Block of Statements executed when boolean_expression is true
 | 
						|
}
 | 
						|
else
 | 
						|
{
 | 
						|
    //Block of Statements executed when boolean_expression is false
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
#### Example
 | 
						|
```C
 | 
						|
int a = 300;
 | 
						|
if(a < 200)
 | 
						|
{
 | 
						|
    printf("a is less than 200\n");
 | 
						|
}
 | 
						|
else
 | 
						|
{
 | 
						|
    printf("a is more than 200\n");
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
#### Result
 | 
						|
`a is more than 200`
 | 
						|
 | 
						|
## 3. if...else if...else statement
 | 
						|
When using if...else if..else statements, there are few points to keep in mind -
 | 
						|
- An **if** can have **zero or one else**'s and it **must come after any else if**'s.
 | 
						|
- An **if** can have **zero to many else if**'s and they **must come before the else**.
 | 
						|
- Once an **else if** succeeds, none of the remaining else if's or else's will be tested.
 | 
						|
 | 
						|
#### Syntax
 | 
						|
```C
 | 
						|
if(boolean_expression_1)
 | 
						|
{
 | 
						|
    //Block of Statements executed when boolean_expression_1 is true
 | 
						|
}
 | 
						|
else if(boolean_expression_2)
 | 
						|
{
 | 
						|
    //Block of Statements executed when boolean_expression_1 is false and boolean_expression_2 is true
 | 
						|
}
 | 
						|
else if(boolean_expression_3) 
 | 
						|
{
 | 
						|
    //Block of Statements executed when both boolean_expression_1 and boolean_expression_2 are false and boolean_expression_3 is true
 | 
						|
}
 | 
						|
else
 | 
						|
{
 | 
						|
    //Block of Statements executed when all boolean_expression_1, boolean_expression_2 and boolean_expression_3 are false
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
#### Example
 | 
						|
```C
 | 
						|
int a = 300;
 | 
						|
if(a == 100)
 | 
						|
{
 | 
						|
    printf("a is equal to 100\n");
 | 
						|
}
 | 
						|
else if(a == 200)
 | 
						|
{
 | 
						|
    printf("a is equal to 200\n");
 | 
						|
}
 | 
						|
else if(a == 300)
 | 
						|
{
 | 
						|
    printf("a is equal to 300\n");
 | 
						|
}
 | 
						|
else
 | 
						|
{
 | 
						|
    printf("a is more than 300\n");
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
#### Result
 | 
						|
`a is equal to 300`
 | 
						|
 | 
						|
## 4. Nested if statement
 | 
						|
It is always legal in C programming to nest if-else statements, which means you can use one if or else if statement inside another if or else if statement(s).
 | 
						|
 | 
						|
#### Syntax
 | 
						|
```C
 | 
						|
if(boolean_expression_1)
 | 
						|
{
 | 
						|
    //Executed when boolean_expression_1 is true
 | 
						|
    if(boolean_expression_2)
 | 
						|
    {
 | 
						|
      //Executed when both boolean_expression_1 and boolean_expression_2 are true
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
```
 | 
						|
#### Example
 | 
						|
```C
 | 
						|
int a = 100;
 | 
						|
int b = 200;
 | 
						|
if(a == 100)
 | 
						|
{
 | 
						|
    printf("a is equal to 100\n" );
 | 
						|
    if(b == 200)
 | 
						|
    {
 | 
						|
        printf("b is equal to 200\n");
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
```
 | 
						|
#### Result
 | 
						|
```bash
 | 
						|
a is equal to 100
 | 
						|
b is equal to 200
 | 
						|
```
 | 
						|
 | 
						|
## 5. Switch Case Statement
 | 
						|
The switch statement is often faster than nested if...else (not always). Also, the syntax of switch statement is cleaner and easy to understand.
 | 
						|
 | 
						|
### Syntax of switch case
 | 
						|
```C
 | 
						|
switch (n)
 | 
						|
{
 | 
						|
    case constant1:
 | 
						|
        // code to be executed if n is equal to constant1;
 | 
						|
        break;
 | 
						|
 | 
						|
    case constant2:
 | 
						|
        // code to be executed if n is equal to constant2;
 | 
						|
        break;
 | 
						|
        .
 | 
						|
        .
 | 
						|
        .
 | 
						|
    default:
 | 
						|
        // code to be executed if n doesn't match any constant
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
When a case constant is found that matches the switch expression, control of the program passes to the block of code associated with that case.
 | 
						|
 | 
						|
In the above pseudocode, suppose the value of n is equal to constant2. The compiler will execute the block of code associate with the case statement until the end of switch block, or until the break statement is encountered.
 | 
						|
 | 
						|
The break statement is used to prevent the code running into the next case.
 | 
						|
 | 
						|
### Example:
 | 
						|
```C
 | 
						|
// Program to create a simple calculator
 | 
						|
// Performs addition, subtraction, multiplication or division depending the input from user
 | 
						|
 | 
						|
# include <stdio.h>
 | 
						|
 | 
						|
int main()
 | 
						|
{
 | 
						|
 | 
						|
    char operator;
 | 
						|
    double firstNumber,secondNumber;
 | 
						|
 | 
						|
    printf("Enter an operator (+, -, *, /): ");
 | 
						|
    scanf("%c", &operator);
 | 
						|
 | 
						|
    printf("Enter two operands: ");
 | 
						|
    scanf("%lf %lf",&firstNumber, &secondNumber);
 | 
						|
 | 
						|
    switch(operator)
 | 
						|
    {
 | 
						|
        case '+':
 | 
						|
            printf("%.1lf + %.1lf = %.1lf",firstNumber, secondNumber, firstNumber+secondNumber);
 | 
						|
            break;
 | 
						|
 | 
						|
        case '-':
 | 
						|
            printf("%.1lf - %.1lf = %.1lf",firstNumber, secondNumber, firstNumber-secondNumber);
 | 
						|
            break;
 | 
						|
 | 
						|
        case '*':
 | 
						|
            printf("%.1lf * %.1lf = %.1lf",firstNumber, secondNumber, firstNumber*secondNumber);
 | 
						|
            break;
 | 
						|
 | 
						|
        case '/':
 | 
						|
            printf("%.1lf / %.1lf = %.1lf",firstNumber, secondNumber, firstNumber/secondNumber);
 | 
						|
            break;
 | 
						|
 | 
						|
        // operator is doesn't match any case constant (+, -, *, /)
 | 
						|
        default:
 | 
						|
            printf("Error! operator is not correct");
 | 
						|
    }
 | 
						|
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
### Output
 | 
						|
```
 | 
						|
Enter an operator (+, -, *,): -
 | 
						|
Enter two operands: 32.5
 | 
						|
12.4
 | 
						|
32.5 - 12.4 = 20.1
 | 
						|
```
 | 
						|
The '-' operator entered by the user is stored in operator variable. And, two operands 32.5 and 12.4 are stored in variables firstNumber and secondNumber respectively.
 | 
						|
 | 
						|
Then, control of the program jumps to
 | 
						|
```C
 | 
						|
printf("%.1lf / %.1lf = %.1lf",firstNumber, secondNumber, firstNumber/firstNumber);
 | 
						|
```
 | 
						|
Finally, the break statement ends the switch statement.
 | 
						|
 | 
						|
If break statement is not used, all cases after the correct case is executed. 
 | 
						|
 | 
						|
## 6. A note on equality `==`
 | 
						|
 | 
						|
When doing a comparison for the `if` statement, be very careful to use the equality operator `==` and not an assignment operator `=`. If an assignment operator `=` is used, the variable is overwritten and a `True` is returned. Consider the following code:
 | 
						|
 | 
						|
```C
 | 
						|
#include <stdio.h>
 | 
						|
 | 
						|
int main(void) {
 | 
						|
        int x = 5;
 | 
						|
        if (x == 5) {
 | 
						|
                printf("1. x is %i\n",x);
 | 
						|
        }
 | 
						|
 | 
						|
        if (x = 4) {
 | 
						|
                printf("2. x is %i\n",x);
 | 
						|
        }
 | 
						|
}
 | 
						|
```
 | 
						|
### Output
 | 
						|
```
 | 
						|
1. x is 5
 | 
						|
2. x is 4
 | 
						|
```
 | 
						|
As seen above, both `if` blocks are executed. In the second, the value of `x` is has been overwritten to `4`, which may not be what you want.
 | 
						|
 | 
						|
## 7. Ternary operation
 | 
						|
The ternary operator (AKA conditional operator) is an operator that takes three arguments. The first argument is a comparison argument, the second is the result upon a true comparison , and the third is the result upon a flase comparison .It can be thought of as a shortened way of writing an if-else statement. It is often used to to assign variables based on the result of a comparison.
 | 
						|
 | 
						|
#### Syntax
 | 
						|
```C
 | 
						|
v = (conditional_statement) ? value_if_true : value_if_false
 | 
						|
```
 | 
						|
 | 
						|
#### Example 
 | 
						|
```C
 | 
						|
int a, b = 10, c = 100;
 | 
						|
a = (b > c) ? 1 : 2;
 | 
						|
printf("%d", a);
 | 
						|
```
 | 
						|
 | 
						|
#### Result
 | 
						|
`2`
 | 
						|
 | 
						|
### More Information
 | 
						|
https://www.dotnettricks.com/learn/c/conditional-statements-if-else-switch-ladder  
 | 
						|
https://www.programiz.com/c-programming/c-if-else-statement  
 | 
						|
http://www.tutorialspoint.com/ansi_c/c_control_statements.htm
 |