cmpe 150: introduction to computing if and switch statements
TRANSCRIPT
![Page 1: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/1.jpg)
CMPE 150: Introduction to Computing
If and Switch statements
![Page 2: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/2.jpg)
CMPE 150 – Introduction to Computing 2
If statement• The "if statement" is used to break the sequential
flow of execution.• Enforces branching in execution according to the
result of an expression.– There are two possible paths to take.– The expression determines which path should be taken.
Read age
Rest of the program
Message: "You are young"
Message: "You are mature"
age<=25 ?T F
![Page 3: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/3.jpg)
CMPE 150 – Introduction to Computing 3
If statement• Syntax:
if (int_expr)
stat_block1
else
stat_block2
where stat_block is one of the following:• a single statement stat;• the null statement ;• a group of statements enclosed in braces
{ stat1;
...
statn;
}
Text in green is optional
![Page 4: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/4.jpg)
If statementstat0;
if (expr)
{ stat1;
stat2;
}
else
stat3;
stat4;
Notice the indentation.CMPE 150 – Introduction to Computing 4
stat0
expr ?T F
stat1
stat2
stat3
stat4
![Page 5: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/5.jpg)
If statementstat0;
if (expr)
{ stat1;
stat2;
}
stat4;
CMPE 150 – Introduction to Computing 5
stat0
expr ?T F
stat1
stat2
stat4
![Page 6: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/6.jpg)
If statement• Read a number and state whether it is
odd or even.
int num;
scanf("%d", &num);
printf("%d is an ", num);
if (num%2!=0)
printf("odd ");
else
printf("even ");
printf("number.\n");CMPE 150 – Introduction to Computing 6
![Page 7: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/7.jpg)
If statement• Read one character as input; check if it is a
digit; if so, convert it to an integer and display the number that is two times the input number; o/w display an error message.
char ch; int num;
scanf("%c", &ch);if ((‘0’<=ch) && (ch<=‘9’)){ num=ch-’0’; printf("Two times the input is %d \n", 2*num);
}else printf("Input is not a digit! \n");
CMPE 150 – Introduction to Computing 7
![Page 8: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/8.jpg)
Nested-if statements• Remember the syntax:
if (int_expr)
stat_block1
else
stat_block2
• Statement block contains statements.– "if" is also a statement.– So, you can "nest" one if statement in
another.• This structure is called nested-if statements.• You can nest as much as you want.
CMPE 150 – Introduction to Computing 8
![Page 9: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/9.jpg)
Nested-if statements
CMPE 150 – Introduction to Computing 9
stat0
expr1 ?
T
F
stat1
stat2
stat8
stat4
stat5
expr2 ?
expr3 ?
stat6
stat7
T
T F
F
stat0;if (expr1) if (expr2) { stat1; stat2; } else if (expr3) { stat4; stat5; } else stat6;else stat7;stat8;
![Page 10: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/10.jpg)
Nested-if statements
CMPE 150 – Introduction to Computing 10
stat0
expr1 ?
T
F
stat1
stat2
stat8
stat4
stat5
expr2 ?
expr3 ?
stat7
T
T F
F
stat0;if (expr1) if (expr2) { stat1; stat2; } else if (expr3) { stat4; stat5; } else stat6;else stat7;stat8;
IF INDENTATION IS NOT CORRECT, IT IS MISLEADING
![Page 11: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/11.jpg)
Nested-if statements• Remember that the "else" part is
optional.– Thus, some of the if statements may not
have an "else" part.– Then, it is a little bit tricky to find to which
"if" the "else" belongs.• Note that indentation is completely ignored by
the compiler, so it does not help.
• The trick is the following:– "else" belongs to the nearest incomplete
"if"CMPE 150 – Introduction to Computing 11
![Page 12: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/12.jpg)
Else-if statementsif (age<=1) printf("infant");if (age<=3) printf("toddler");if (age<=10) printf("child");if (age<=18) printf("adolescent");if (age<=25) printf("young");if (age<=39) printf("adult");if (age<=65) printf("middle-aged");else printf("elderly");
CMPE 150 – Introduction to Computing 12
![Page 13: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/13.jpg)
Else-if statements• Else-if is a variation of nested-if.• An inner if statement is executed iff all
previous if statements have failed.– Thus, executing an inner if statement implies
that all previous expressions were false.
• Syntax:if (int_expr1)
stat_block1
else if (int_expr2)
stat_block2
...else
stat_blockn
CMPE 150 – Introduction to Computing 13
![Page 14: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/14.jpg)
Else-if statementsif (age<=1) printf("infant");else if (age<=3) printf("toddler");else if (age<=10) printf("child");else if (age<=18) printf("adolescent");else if (age<=25) printf("young");else if (age<=39) printf("adult");else if (age<=65) printf("middle-aged");else printf("elderly");
CMPE 150 – Introduction to Computing 14
![Page 15: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/15.jpg)
Else-if statements• Alternative would be:if (age<=1) printf("infant");if ((1<age) && (age<=3)) printf("toddler");if ((3<age) && (age<=10)) printf("child");if ((10<age) && (age<=18)) printf("adolescent");if ((18<age) && (age<=25)) printf("young");if ((25<age) && (age<=39)) printf("adult");if ((39<age) && (age<=65)) printf("middle-aged");if (65<age) printf("elderly");
CMPE 150 – Introduction to Computing 15
![Page 16: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/16.jpg)
Ternary operator• Ternary operator is similar to the "if"
statement. But it is an operator, not a statement.
• Syntax:int_expr ? value1 : value2
• Eg:a = (b>c) ? b : c;
k = (n!=0) ? m/n : 0;
CMPE 150 – Introduction to Computing 16
![Page 17: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/17.jpg)
Ternary operator• Note that it is not possible to know at
compile time whether value1 or value2 will be used.– Therefore, the type of the expression is the
type of the larger value.
• Eg: In the expression below, if the value of b is 9
a = b / (b%2)?2:3.0;
the value of a is 4.5 (not 4), because we perform a float division (not integer division)
CMPE 150 – Introduction to Computing 17
![Page 18: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/18.jpg)
Example 1• Write a code segment that detects
whether a number is divisible by 6.
if ((num%2==0) && (num%3==0))
printf("%d is divisible by 6 \n",num);
CMPE 150 – Introduction to Computing 18
![Page 19: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/19.jpg)
Example 2• Write a code segment that detects
whether a number is divisible by 3 or 6.
if (num%3==0)
if (num%2==0)
printf("%d is divisible by 6 \n",num);
else
printf("%d is divisible by 3 \n",num);
CMPE 150 – Introduction to Computing 19
![Page 20: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/20.jpg)
Example 3• Write a program that reads two real
numbers and checks if they are equal.(Assume first number is smaller.)#include <stdio.h>#define EPSILON 0.000000001float r1, r2;
int main(){
scanf("%f %f", &r1, &r2); if ((r2-r1)<=EPSILON) printf("The numbers are (almost) equivalent"); return 0;}
CMPE 150 – Introduction to Computing 20
![Page 21: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/21.jpg)
Example 4• Write a program that reads a 3-digit number
from the input char-by-char, and displays its square.#include <stdio.h>char c1, c2, c3;int num;
int main(){ scanf("%c%c%c",&c1,&c2,&c3); num = (c1-'0')*100; num += (c2-'0')*10; num += c3-'0'; num *= num; printf("%d", num); return 0;}
CMPE 150 – Introduction to Computing 21
![Page 22: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/22.jpg)
Switch statement• If you have multiple cases depending
on different values of the same integer expression, switch is easier to use.
• Syntax:switch (int_expr)
{ case constant_int_value1: stat(s);
case constant_int_value2: stat(s); ... default: stat(s);}
• You may have zero or more statements in each case.
CMPE 150 – Introduction to Computing 22
![Page 23: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/23.jpg)
Break statement• Switch statement actually gathers many
statements of several cases.– The case labels denote the specific
statement from which the execution of this group of statements begins.
– All statements till the end of the group are executed sequentially.
• To separate the cases, break statement is used.– break breaks the sequential execution of the
statements and immediately jumps to the end of the switch statement.
CMPE 150 – Introduction to Computing 23
![Page 24: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/24.jpg)
Break statementstat0;switch (expr){ case value1: stat1; stat2; case value2: stat3; stat4; stat5; case value3: stat6; break; case value4: stat7; stat8;}stat9;
CMPE 150 – Introduction to Computing 24
stat0
stat1
stat2
stat3
stat4
stat5
stat6
stat7
stat8
stat9
If expr happens to be value2
![Page 25: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/25.jpg)
Example 6• Write a program that reads a character ('a', 'p', or 'v') and
radius R. It displays the area or perimeter of a circle with radius R, or the volume of a sphere.#include <stdio.h>#define PI 3.14char ch; float R;
int main(){ scanf("%c%f",&ch,&R); switch(ch) { case 'a': printf("Area of circle = %f\n", PI*R*R); break; case 'p': printf("Perimeter of circle = %f\n", 2*PI*R); break; case 'v': printf("Volume of sphere = %f\n", (4/3)*(PI*R*R*R)); break; default: printf("Invalid input\n"); break; } return 0;}
CMPE 150 – Introduction to Computing 25
(4.0/3)
3.141592654
![Page 26: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/26.jpg)
Switch statement• Define the days of the week as an
enumerated type and display them as strings.
enum day_type {MON=1,TUE,WED,THU,FRI,SAT,SUN} day;
scanf("%d", &day);switch (day){ case SUN: printf("Sunday\n"); break; case WED: printf("Wednesday\n"); break; case TUE: printf("Tuesday\n"); break; case THU: printf("Thursday\n"); break; case FRI: printf("Friday\n"); break; case SAT: printf("Saturday\n"); break; case MON: printf("Monday\n"); break; default: printf("Incorrect day\n"); break;}
CMPE 150 – Introduction to Computing 26
![Page 27: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/27.jpg)
Switch statement• Note that without the "break" statement,
execution traverses all cases until the end of the switch statement.
• This allows implementation of OR (if you use it properly.
• Eg:switch (number){ case 1: case 3: case 5: printf("Odd number \n"); break; case 0: case 2: case 4: printf("Even number \n"); break;}
CMPE 150 – Introduction to Computing 27
![Page 28: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/28.jpg)
Switch statement• As long as the cases are separated
with "break"s, their order is not relevant.
• "default" is optional. If the default case is not specified and none of the cases holds, no statement is executed; this is not an error.
• It is a good practice to put a break even after the last case.
CMPE 150 – Introduction to Computing 28
![Page 29: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/29.jpg)
Example 5.1• Write a program that defines a type for
letter grades (AA,BB,CC,DD,F as 4,3,2,1,0), reads a grade and displays corresponding letter grade.#include <stdio.h>
enum grade_type {F,DD,CC,BB,AA};int main(){ enum grade_type g;
scanf("%d", &g); printf("%d", g); return 0;}
CMPE 150 – Introduction to Computing 29
![Page 30: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/30.jpg)
Example 5.2• But, we don't want to display a number. We want
to see the letter grade.#include <stdio.h>enum grade_type {F,DD,CC,BB,AA};int main(){ enum grade_type g;
scanf("%d", &g); switch (g) { case AA: printf("AA \n"); break; case BB: printf("BB \n"); break; case CC: printf("CC \n"); break; case DD: printf("DD \n"); break; case F: printf("F \n"); break; default: printf("Invalid \n"); break; } return 0;}
CMPE 150 – Introduction to Computing 30
![Page 31: CMPE 150: Introduction to Computing If and Switch statements](https://reader030.vdocuments.mx/reader030/viewer/2022032805/56649ef35503460f94c05a17/html5/thumbnails/31.jpg)
Example 5.3• Could we do it without defining an enumerated
type?#include <stdio.h>
int main(){ int g;
scanf("%d", &g); switch (g) { case 4: printf("AA \n"); break; case 3: printf("BB \n"); break; case 2: printf("CC \n"); break; case 1: printf("DD \n"); break; case 0: printf("F \n"); break; default: printf("Invalid \n"); break; } return 0;}
CMPE 150 – Introduction to Computing 31