Making decisions – if-else
1. Assuming int x = 5, y = 5 indicate which of the following expressions are true
1. x == y
Ans: True
2. x != y
Ans: False
3. x > y
Ans: False
4. x >= y
Ans: True
5. x < y
Ans: False
6. x <= y
Ans: True
2. What will be the output of below program for following user inputs
- -7
- 9
- 0
#include <stdio.h>
int main (int argc, char * argv[]) {
int number = 0;
printf("Enter a number: ");
scanf("%d", &number);
if (number < 0) {
printf("You entered a negative number\n");
}
if (number > 0) {
printf("You entered a positive number\n");
}
printf("Good Bye!\n");
return 0;
}
1.
Check in line 07 evaluates to true and check on line 10 evaluates to false. Hence output is
You entered a negative number
Good Bye!
2.
Check in line 07 evaluates to false and check on line 10 evaluates to true. Hence output is
You entered a positive number
Good Bye!
3.
Check in line 07 evaluates to false and check on line 10 also evaluates to false. Hence output is
Good Bye!
3. Draw a flowchart for above program.

4. What will be the output of below program.
#include <stdio.h>
int main(int argc, char * argv[]) {
int a = 100, b = 150, c = 200;
if (a >= 100) {
b = b + a;
c = b + a;
}
if (c < 400) {
a = 10;
}
printf ("%d %d %d\n", a, b, c);
}
Ans: if condition on line 06 evaluates to true, (100 >= 100). Control enters if block
On line 07, values of a, b, and c become 100, 250, and 200 respectively.
On line 08, values of a, b, and c become 100, 250, and 300 respectively.
When control reaches line 11, value of c is 300. Hence if condition evaluates to true (300 < 400)
On line 12 value of a becomes 10 while b and c still have 250 and 300 respectively.
Hence, output printed is
10 250 350
5. What will be the output of below program for following user inputs
- 7
- 44
- 25
#include <stdio.h>
int main (int argc, char * argv[]) {
float temperature = 0;
printf("Enter current temperature (deg C): ");
scanf("%f", &temperature);
if (temperature < 12) {
printf("It is getting cold.\n");
}
if (temperature > 35) {
printf("It is hot!!\n");
}
printf("Good Bye!\n");
return 0;
}
1.
if condition on line 07 evaluates to true (7 < 12) and condition on line 10 evaluates to false (7 > 35). Hence output printed is
It is getting cold.
Good Bye!
2.
if condition on line 07 evaluates to false (44 < 12) and condition on line 10 evaluates to true (44 > 35). Hence output printed is
It is hot!!
Good Bye!
3.
if condition on line 07 evaluates to false (25 < 12) and condition on line 10 also evaluates to false (25 > 35). Hence output printed is
Good Bye!
6. Draw a flowchart for above program.

7. Write a program that reads two numbers from the user and prints whether the numbers are equal or not.
#include <stdio.h>
int main (int argc, char * argv[]) {
int num1 = 0, num2 = 0;
printf("Enter first number ");
scanf("%d", &num1);
printf("Enter second number ");
scanf("%d", &num2);
if(num1 == num2) {
printf("Numbers are equal\n");
}
if(num1 != num2) {
printf("Numbers are not equal\n");
}
return 0;
}
8. Write a program that reads a number and prints whether the number is even or odd.
#include <stdio.h>
int main (int argc, char * argv[]) {
int num = 0;
printf("Enter a number ");
scanf("%d", &num);
if(num % 2 == 0) {
printf("Number is even\n");
}
if(num % 2 != 0) {
printf("Number is odd\n");
}
return 0;
}
9. Write a program that reads two numbers and prints if the first number is a factor of second number or not.
#include <stdio.h>
int main (int argc, char * argv[]) {
int num1 = 0, num2 = 0;
printf("Enter first number ");
scanf("%d", &num1);
printf("Enter second number ");
scanf("%d", &num2);
if(num1%num2 == 0) {
printf("%d is a factor of %d\n", num2, num1);
}
if(num1%num2 != 0) {
printf("%d is not a factor of %d\n", num2, num1);
}
return 0;
}
10. Write a program that reads two numbers and prints if the sum of two numbers is greater than 0, equal to 0, or less than 0.
#include <stdio.h>
int main (int argc, char * argv[]) {
int num1 = 0, num2 = 0;
printf("Enter first number ");
scanf("%d", &num1);
printf("Enter second number ");
scanf("%d", &num2);
if(num1 + num2 == 0) {
printf("%d + %d = 0\n", num1, num2);
}
if(num1 + num2 > 0) {
printf("%d + %d > 0\n", num1, num2);
}
if(num1 + num2 < 0) {
printf("%d + %d < 0\n", num1, num2);
}
return 0;
}
11. Write a program that reads total taxable income and computes tax liability based on following slabs.
0 – 300,000 : 0%
300,000 – 600,000 : 10%
600,000 – 10,000,000 : 20%
10,00,001 – : 30%
#include <stdio.h>
int main (int argc, char * argv[]) {
int income = 0, slab_income = 0;
double tax = 0;
printf("Enter taxable income ");
scanf("%d", &income);
/* First 300000 are tax free */
income = income - 300000;
/* Next up to 300000 are in 10% slab */
if(income <= 300000 ) {
slab_income = income;
}
if(income > 300000) {
slab_income = 300000;
}
/* If input income was < 300000 then slab_income would be negative
* Hence we have to check to make sure we are not computing negative tax */
if (slab_income > 0) {
tax = slab_income * 0.1;
}
income = income - 300000;
/* Next up to 400000 are in 20% slab */
if(income <= 400000 ) {
slab_income = income;
}
if(income > 400000) {
slab_income = 400000;
}
/* slab_income would be negative due subtractions above
* Hence we have to check to make sure we are not computing negative tax */
if (slab_income > 0) {
tax = tax + (slab_income * 0.2);
}
income = income - 400000;
/* remaining income is in 30% slab */
if(income > 0) {
tax = tax + (income * 0.3);
}
printf("Your total tax is %f\n", tax);
return 0;
}
12. Write a program that reads the month number (1-12) from the user and prints the name of the month (January, February, etc.). If the user input is not in the range 1 – 12, program should print an error message.
#include <stdio.h>
int main (int argc, char * argv[]) {
int month = 0;
printf("Enter month number ");
scanf("%d",&month);
if(month == 1) {
printf("January\n");
}
if(month == 2) {
printf("February\n");
}
if(month == 3) {
printf("March\n");
}
if(month == 4) {
printf("April\n");
}
if(month == 5) {
printf("May\n");
}
if(month == 6) {
printf("June\n");
}
if(month == 7) {
printf("July\n");
}
if(month == 8) {
printf("August\n");
}
if(month == 9) {
printf("September\n");
}
if(month == 10) {
printf("October\n");
}
if(month == 11) {
printf("November\n");
}
if(month == 12) {
printf("December\n");
}
if(month < 1 ) {
printf("Wrong input\n");
}
if(month > 12 ) {
printf("Wrong input\n");
}
return 0;
}
13. Write a program that reads two numbers and prints the larger number.
#include <stdio.h>
int main (int argc, char * argv[]) {
int num1 = 0, num2 = 0;
printf("Enter first number ");
scanf("%d",&num1);
printf("Enter second number ");
scanf("%d",&num2);
if(num1 > num2) {
printf("%d is larger\n", num1);
}
if(num2 > num1) {
printf("%d is larger\n", num2);
}
return 0;
}
14. Write a program that reads three numbers and prints the largest number.
#include <stdio.h>
int main (int argc, char * argv[]) {
int num1 = 0, num2 = 0, num3 = 0, larger = 0;
printf("Enter first number ");
scanf("%d",&num1);
printf("Enter second number ");
scanf("%d",&num2);
printf("Enter third number ");
scanf("%d",&num3);
if(num1 >= num2) {
larger = num1;
}
if(num2 >= num1) {
larger = num2;
}
if(num3 > larger) {
larger = num3;
}
printf("Largest number is %d\n",larger);
return 0;
}
15. Which of the following if else constructs are syntactically valid.
1.
if (a>b) {
a = a+2;
} else {
b = b+2;
}
Valid
2.
if (a>b)
a = a+2;
else
b = b+2;
Valid
3.
if (a>b)
a = a+2;
else {
b = b+2;
}
Valid
4.
if (a>b) {
a = a+2;
} else
b = b+2;
Valid
16. Trace the control flow of following program for following user inputs
0
10
12
17
200
-9
01: #include <stdio.h>
02: int main (int argc, char * argv[]) {
03: int hour = 0;
04: printf("Enter current hour of day (00-23): ");
05: scanf("%d",&hour);
06: if (hour < 12){
07: printf("Its not noon yet.\n");
08: } else {
09: printf("Its past noon.\n");
10: }
11: printf("Have a good day!\n");
12: return 0;
13: }
0
- After user input, control reaches line 06 with value 0 in hour.
- Control expression of if on line 06 is evaluated, 0 < 12 evaluates to true. Control enters if construct, line 07.
- Message Its not noon yet is printed to the console. Control skips else construct and jumps to line 11.
- Message Have a good day is printed to the console.
- Control advances to end of program and exits.
10
- After user input, control reaches line 06 with value 10 in hour.
- Control expression of if on line 06 is evaluated, 10 < 12 evaluates to true. Control enters if construct, line 07.
- Message Its not noon yet is printed to the console. Control skips else construct and jumps to line 11.
- Message Have a good day is printed to the console.
- Control advances to end of program and exits.
12
- After user input, control reaches line 06 with value 12 in hour.
- Control expression of if on line 06 is evaluated, 12 < 12 evaluates to false. Control jumps to else construct, line 09.
- Message Its past noon yet is printed to the console. Control advances to end of else construct line 11.
- Message Have a good day is printed to the console.
- Control advances to end of program and exits.
17
- After user input, control reaches line 06 with value 17 in hour.
- Control expression of if on line 06 is evaluated, 17 < 12 evaluates to false. Control jumps to else construct, line 09.
- Message Its past noon yet is printed to the console. Control advances to end of else construct line 11.
- Message Have a good day is printed to the console.
- Control advances to end of program and exits.
200
- After user input, control reaches line 06 with value 200 in hour.
- Control expression of if on line 06 is evaluated, 200 < 12 evaluates to false. Control jumps to else construct, line 09.
- Message Its past noon yet is printed to the console. Control advances to end of else construct line 11.
- Message Have a good day is printed to the console.
- Control advances to end of program and exits.
-9
- After user input, control reaches line 06 with value -9 in hour.
- Control expression of if on line 06 is evaluated, -9 < 12 evaluates to true. Control enters if construct, line 07.
- Message Its not noon yet is printed to the console. Control skips else construct and jumps to line 11.
- Message Have a good day is printed to the console.
- Control advances to end of program and exits.
17. Use if else to write a program that reads a non-zero number from the user and prints whether the number is positive or negative.
Note that we have not built any error checking into the program. If user enters 0 as input, we will end up printing number is negative. Adding check for invalid input is left as an exercise.
#include <stdio.h>
int main (int argc, char * argv[]) {
int num = 0;
printf("Enter a non zero number ");
scanf("%d", &num);
if(num > 0) {
printf("Number is positive\n");
} else {
printf("Number is negative\n");
}
return 0;
}
18. Write a program that reads a number from the user and prints whether that number is a multiple of 7 or not.
#include <stdio.h>
int main (int argc, char * argv[]) {
int num = 0;
printf("Enter a number ");
scanf("%d", &num);
if(num%7 == 0) {
printf("Number is multiple of 7\n");
} else {
printf("Number is not a multiple of 7\n");
}
return 0;
}
19. Modify the program for finding largest of three numbers to use if-else.
#include <stdio.h>
int main (int argc, char * argv[]) {
int num1 = 0, num2 = 0, num3 = 0, larger = 0;
printf("Enter first number ");
scanf("%d",&num1);
printf("Enter second number ");
scanf("%d",&num2);
printf("Enter third number ");
scanf("%d",&num3);
if(num1 >= num2) {
larger = num1;
} else {
larger = num2;
}
if(num3 > larger) {
larger = num3;
}
printf("Largest number is %d\n",larger);
return 0;
}
20. What will be the output of following program.
#include <stdio.h>
int main (int argc, char * argv[]) {
int a = 7, b = 9, c = 3, z = 0;
if ((b + c) > z) {
b = b * 2;
z = b % a;
} else {
b = b / 2;
z = a + b;
}
printf ("a=%d, b=%d, c=%d, z=%d\n", a, b, c, z);
return 0;
}
Ans: Condition on line 04 evaluates to true (12 > 0). Control enters if block.
On line 05, value of b becomes 18. Values of a, b, c, d are now 7, 18, 3, and 0 respectively.
On line 06, value of z becomes 4. Values of a, b, c, d are now 7, 18, 3, and 4 respectively.
Else block is skipped, control jumps to line 11. Hence, following output is printed.
a=7, b=18, c=3, z=4
21. Which of the following code snippets are valid.
1.
int a = 5, b = 7, c = 11; (a>b)?b=b+2;c=b*2:c=c*2;
Invalid. Entire ternary operator statement should evaluate to a single value.
2.
int a = 0, b = 0, c = 0; a = (b+c > b-c)?b:c;
Valid.