380 likes | 525 Views
Selection Statements. Selects statements to execute based on the value of an expression The expression is sometimes called the controlling expression Selection statements: if statement switch statement. Selection statements: if.
E N D
Selection Statements • Selects statements to execute based on the value of an expression • The expression is sometimes called the controlling expression • Selection statements: • if statement • switch statement
Selection statements: if • used to execute conditionally a statement or block of code. if (expression) statement • If expression is true, statement is executed (what is true?). • statement can be replaced by a block of statements, enclosed in curly braces.
An example /* This program displays the absolute value of a number given by the user */ #include <stdio.h> int main(void) { double num; printf("Please enter a real number: "); scanf("%lf", &num); if (num<0) num = -num; printf("The absolute value is %g\n", num); return 0; }
If-else statement if (expression) statement1 else statement2 • if expression is true, statement1 is executed. • if expression is false, statement2 is executed • both statements can be (and very often are) replaced by blocks of statements (“compound statements”)
An example (fragment) int first, second, min; /* … */ if (first < second) { min = first; printf ("The first number is smaller than the second.\n"); } else { min = second; printf ("The second number is smaller than the first\n"); } printf("The smaller number is equal to %d\n", min);
True or false • In C, every expression has a numeric value • An expression is ‘true’ when its non-zero • If it is zero, it is false • Therefore, in the following – if (expression) statementstatement is executed if expression is non zero.
More about operators • In C, every expression has a numeric value • When using arithmetical operators (+, -, *, /) this is straight forward • The value of A+B is the sum of A and B • And so on…
More about operators • Expressions with relational operators (<, <=, etc’) have values as well (intuitively, we are used to thinking about them as ‘true’ or ‘false’) • A < B equals zero if A is larger than or equal to B (false), and some non-zero value if A is smaller than B (true) • The exact non-zero value varies (and is not important for that matter)
Relational operators • They are – • A == B (Note the difference from A = B) • A != B • A < B • A > B • A <= B • A >= B • The value of the expression is non-zero if it’s true, zero if it’s false
An example int a, b; printf("Enter two Numbers\n"); scanf("%d%d", &a, &b); if (a == b) { printf("The numbers equal %d\n", a); printf("The expression a == b is %d\n", a == b); } else { printf("The numbers are not equal\n"); printf("The expression a == b is %d\n", a == b); }
The assignment operator = • The assignment operator is also an operator. Hence, expressions involving it have a numeric value • This value equals to whatever appears on the right of the assignment operator • For example – • (x = 4) equals 4 • (y = 0) equals 0
A very common mistake • Very often a programmer might confuse between the equality operator and the assignment operator - • if (x==4) … • if (x=4) … • The second is usually a mistake, but legal in C so the compiler doesn’t call it!
Examples • val.c, eqn_sign.c
Logical operators • Allows to evaluate two or more expressions - • !A – ‘not’ - True when A is not, and vice versa. • A && B – ‘and’ - True when both A and B are true • A || B – ‘or’ (inclusive or) - True when either A or B (or both) are true
A silly example #include <stdio.h> int main(void) { int grade; printf("Please enter your grade: "); scanf("%d", &grade); if (grade<0 || grade>100) printf("This is not a valid grade!\n"); else printf("This is indeed a grade.\n"); return 0; }
Else-if • if statements distinguish between exactly 2 cases and execute different code in each case • The else-if construction allows for a multi-way decision
Else-if if (expression) statement else if (expression) statement elseif (expression) statement else statement
An example if (grade >= 90) printf ("A\n"); else if (grade >= 80) printf ("B\n"); else if (grade >= 70) printf ("C\n"); else if (grade >= 60) printf ("D\n"); else printf ("F\n");
Validating input • When getting input from the user, it is highly recommended to check whether it is valid. • If it’s not, you should display an appropriate message and return a non-zero value. • For example – if (grade<0 || grade>100) { printf(“Invalid input!\n”); return 1; }
The return keyword • For now, used to terminate the program and return a value to the operating system • If the program is successful the return value should be zero, non-zero otherwise • The exact nature of this keyword will become clear in the future
Exercise • Input – • An English letter • Output – • If input is a lowercase letter – the corresponding uppercase letter • If input is an uppercase letter - corresponding lowercase letter • Note – • Remember to check for input validity!
Solution • switch_case.c
Exercise (difficult!) • Write a program such that – • Input – a 3-digit number • Output – the same number with digits sorted • Example – if input is 132, output should be 123 • Note – if input is not a 3-digit number, display an error message and exit!
Solution • Sort_digits.c
The ?: operator • expr1 ? expr2 : expr3 • If expr1 is true (non-zero), expr2 is evaluated. Otherwise, expr3 is evaluated
The ?: operator #include <stdio.h> int main(void) { int i, j, min; printf("Please enter two numbers: "); scanf("%d%d", &i, &j); min = i<j ? i : j; printf("The minimum between %d and %d is %d\n", i, j, min); return 0; }
The switch statement • a multiway conditional statement • similar to the if-else if-else "statement" • allows the selection of an arbitrary number of choices based on an integer value • switch (expression) {case const-expr: statementscase const-expr: statements…default:statements}
The switch statement • expression must have an integral value • when the switch statement is executed: • the expression is evaluated • if a case matches the value of the expression, the program jumps to the first statement after that case label • otherwise, the default case is selected • the default is optional
That grade example again switch (grade/10) { case 10: case 9: printf ("A\n"); break; case 8: printf ("B\n"); break; case 7: printf ("C\n"); break; case 6: printf ("D\n"); break; default: printf ("F\n"); }
Give me a break • when the switch transfers to the chosen case, it starts executing statements at that point • it will “fall through” to the next case unless you “break” out • it causes the program to immediately jump to the next statement after the switch statement
Riddle me this • Suppose a program’s execution reaches the following line – scanf(“%d%c”, &i, &ch); • And suppose the user input is – 100 b • What will be the contents of i and ch? • Answer • i == 100 • ch == ‘ ‘ (there’s a space in there)
Spaces in scanf • One way to overcome this problem is to introduce a space before the %c – scanf(“%d %c”, &i, &ch); • The space tells scanf to ignore all whitespace characters that come after the %d is read
Example – mass conversion • Write a program such that – • Input – • A positive number indicating mass • One of the following characters – o, c, k, p, indicating measurement unit (ounce, carat, kilogram, or pound • Output – • The same mass expressed in grams • convert_gr.c
Exercise • Write a program that accepts a number between 1 and 100 from the user. If there is a coin of that value in cents, it should display its name. Otherwise, it should report that there is no such coin • 1 = cent, 5 = nickel, 10 = dime, 25 = quarter, 100 = dollar • Remember to check for input validity!
Solution • Coins.c
Exercise • Write a program that accepts an real number, followed by an arithmetical operator (+, -, *, /) and then a second real number • The program will calculate the result of the expression and present it on the screen • Example – for the input 10-8, the output will be – 10-8 = 2
Solution • Operation.c