selection statements selects statements to execute based on the value of an expression the...

Post on 17-Dec-2015

218 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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 statementif (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 exampleint 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");

elseprintf("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

else if (expression)statement

elsestatement

An exampleif (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

Loops

Used to repeat the same instruction(s) over and over again.

C provides some flexible ways of deciding how many times to loop, or when to exit a loop.

for, while, do-while loops.

While loops

while (condition) {

statement(s);}

The statements are executed as long as condition is true

When the condition is no longer true, the loop is exited.

Example - factorial#include <stdio.h>int main(void){

int i,n,fact = 1;printf("Enter a number\n");scanf("%d", &n);i=1; while (i<=n){

fact = fact*i;i++;

}printf("the factorial is %d\n", fact);return 0;

}

This is a counter

Every iteration i is incremented by 1. Equivalent to i=i+1.

Example – fibonacci series

fibonacci.c

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0

Screen

5

lim0

fib11

fib2---

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0

Screen

5

lim0

fib11

fib2---

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1

Screen

5

lim0

fib11

fib2---

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1

Screen

5

lim0

fib11

fib21

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1

Screen

5

lim1

fib11

fib21

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1

Screen

5

lim1

fib11

fib21

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1

Screen

5

lim1

fib11

fib21

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1 1

Screen

5

lim1

fib11

fib21

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1 1

Screen

5

lim1

fib11

fib22

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1 1

Screen

5

lim1

fib11

fib22

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1 1

Screen

5

lim1

fib12

fib22

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1 1

Screen

5

lim1

fib12

fib22

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1 1 2

Screen

5

lim1

fib12

fib22

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1 1 2

Screen

5

lim1

fib12

fib23

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1 1 2

Screen

5

lim2

fib12

fib23

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1 1 2

Screen

5

lim2

fib13

fib23

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1 1 2

Screen

5

lim2

fib13

fib23

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1 1 2 3

Screen

5

lim2

fib13

fib23

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1 1 2 3

Screen

5

lim2

fib13

fib25

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1 1 2 3

Screen

5

lim3

fib13

fib25

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1 1 2 3

Screen

5

lim3

fib15

fib25

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1 1 2 3

Screen

5

lim3

fib15

fib25

fib_next

Fibonacci – step by stepfib1 = 0;fib2 = 1;

printf("%d ", fib1);

while(fib2 < lim){

printf("%d ", fib2);fib_next = fib1 + fib2;fib1 = fib2;fib2 = fib_next;

}

printf("\n");

0 1 1 2 3

Screen

5

lim3

fib15

fib25

fib_next

getchar getchar() gets a single character from

the user. Requires including stdio.h Returns a non-positive number on

failure. Similar to scanf.

char c;

c = getchar();

char c;

scanf(“%c”, &c);

====

putchar

putchar(‘char’) prints out the character inside the brackets.

Requires including stdio.h Similar to printf.

char c;

putchar(c);

char c;

printf(“%c”, c);====

Example – lower-case to upper case.

low2up.c

Low2up – step by step#include <stdio.h>

int main(void){ char c; char upper_c;

printf ("Please enter a string: ");

c = getchar();

Buffer

‘#’

‘@’

c upper_c

Screen

Low2up – step by step#include <stdio.h>

int main(void){ char c; char upper_c;

printf ("Please enter a string: ");

c = getchar();

eS\n

Buffer

‘y’ ‘@’

c upper_c

Screen

Low2up – step by stepwhile (c != '\n' && c >= 0){ if (c >= 'a' && c <= 'z') upper_c = c - 'a' + 'A'; else upper_c = c;

/* Print the converted character. */ putchar(upper_c);

/* Get the next character */c = getchar();

} putchar('\n');

eS\n

Buffer

‘y’ ‘@’

c upper_c

Screen

Low2up – step by stepwhile (c != '\n' && c >= 0){ if (c >= 'a' && c <= 'z') upper_c = c - 'a' + 'A'; else upper_c = c;

/* Print the converted character. */ putchar(upper_c);

/* Get the next character */c = getchar();

} putchar('\n');

eS\n

Buffer

‘y’ ‘@’

c upper_c

Screen

Low2up – step by stepwhile (c != '\n' && c >= 0){ if (c >= 'a' && c <= 'z') upper_c = c - 'a' + 'A'; else upper_c = c;

/* Print the converted character. */ putchar(upper_c);

/* Get the next character */c = getchar();

} putchar('\n');

eS\n

Buffer

‘y’ ‘Y’

c upper_c

Screen

Low2up – step by stepwhile (c != '\n' && c >= 0){ if (c >= 'a' && c <= 'z') upper_c = c - 'a' + 'A'; else upper_c = c;

/* Print the converted character. */ putchar(upper_c);

/* Get the next character */c = getchar();

} putchar('\n');

eS\n

Buffer

‘y’ ‘Y’

c upper_c

Y

Screen

Low2up – step by stepwhile (c != '\n' && c >= 0){ if (c >= 'a' && c <= 'z') upper_c = c - 'a' + 'A'; else upper_c = c;

/* Print the converted character. */ putchar(upper_c);

/* Get the next character */c = getchar();

} putchar('\n');

S\n

Buffer

‘e’ ‘Y’

c upper_c

Y

Screen

Low2up – step by stepwhile (c != '\n' && c >= 0){ if (c >= 'a' && c <= 'z') upper_c = c - 'a' + 'A'; else upper_c = c;

/* Print the converted character. */ putchar(upper_c);

/* Get the next character */c = getchar();

} putchar('\n');

S\n

Buffer

‘e’ ‘Y’

c upper_c

Y

Screen

Low2up – step by stepwhile (c != '\n' && c >= 0){ if (c >= 'a' && c <= 'z') upper_c = c - 'a' + 'A'; else upper_c = c;

/* Print the converted character. */ putchar(upper_c);

/* Get the next character */c = getchar();

} putchar('\n');

S\n

Buffer

‘e’ ‘Y’

c upper_c

Y

Screen

Low2up – step by stepwhile (c != '\n' && c >= 0){ if (c >= 'a' && c <= 'z') upper_c = c - 'a' + 'A'; else upper_c = c;

/* Print the converted character. */ putchar(upper_c);

/* Get the next character */c = getchar();

} putchar('\n');

S\n

Buffer

‘e’ ‘E’

c upper_c

Y

Screen

Low2up – step by stepwhile (c != '\n' && c >= 0){ if (c >= 'a' && c <= 'z') upper_c = c - 'a' + 'A'; else upper_c = c;

/* Print the converted character. */ putchar(upper_c);

/* Get the next character */c = getchar();

} putchar('\n');

S\n

Buffer

‘e’ ‘E’

c upper_c

YE

Screen

Low2up – step by stepwhile (c != '\n' && c >= 0){ if (c >= 'a' && c <= 'z') upper_c = c - 'a' + 'A'; else upper_c = c;

/* Print the converted character. */ putchar(upper_c);

/* Get the next character */c = getchar();

} putchar('\n');

\n

Buffer

‘S’ ‘E’

c upper_c

YE

Screen

Low2up – step by stepwhile (c != '\n' && c >= 0){ if (c >= 'a' && c <= 'z') upper_c = c - 'a' + 'A'; else upper_c = c;

/* Print the converted character. */ putchar(upper_c);

/* Get the next character */c = getchar();

} putchar('\n');

\n

Buffer

‘S’ ‘E’

c upper_c

YE

Screen

Low2up – step by stepwhile (c != '\n' && c >= 0){ if (c >= 'a' && c <= 'z') upper_c = c - 'a' + 'A'; else upper_c = c;

/* Print the converted character. */ putchar(upper_c);

/* Get the next character */c = getchar();

} putchar('\n');

\n

Buffer

‘S’ ‘E’

c upper_c

YE

Screen

Low2up – step by stepwhile (c != '\n' && c >= 0){ if (c >= 'a' && c <= 'z') upper_c = c - 'a' + 'A'; else upper_c = c;

/* Print the converted character. */ putchar(upper_c);

/* Get the next character */c = getchar();

} putchar('\n');

\n

Buffer

‘S’ ‘S’

c upper_c

YE

Screen

Low2up – step by stepwhile (c != '\n' && c >= 0){ if (c >= 'a' && c <= 'z') upper_c = c - 'a' + 'A'; else upper_c = c;

/* Print the converted character. */ putchar(upper_c);

/* Get the next character */c = getchar();

} putchar('\n');

\n

Buffer

‘S’ ‘S’

c upper_c

YES

Screen

Low2up – step by stepwhile (c != '\n' && c >= 0){ if (c >= 'a' && c <= 'z') upper_c = c - 'a' + 'A'; else upper_c = c;

/* Print the converted character. */ putchar(upper_c);

/* Get the next character */c = getchar();

} putchar('\n');

Buffer

‘\n’ ‘S’

c upper_c

YES

Screen

Low2up – step by stepwhile (c != '\n' && c >= 0){ if (c >= 'a' && c <= 'z') upper_c = c - 'a' + 'A'; else upper_c = c;

/* Print the converted character. */ putchar(upper_c);

/* Get the next character */c = getchar();

} putchar('\n');

Buffer

‘\n’ ‘S’

c upper_c

YES

Screen

Low2up – step by stepwhile (c != '\n' && c >= 0){ if (c >= 'a' && c <= 'z') upper_c = c - 'a' + 'A'; else upper_c = c;

/* Print the converted character. */ putchar(upper_c);

/* Get the next character */c = getchar();

} putchar('\n');

Buffer

‘\n’ ‘S’

c upper_c

YES

Screen

Exercise

Input – Two integers – A and B

Output – How many times A contains B This is the result of the integer

division A/B Note –

Do not use the division operator!

Solution#include <stdio.h>

int main(void){

int a, b, res;

printf("Please enter two numbers.\n");scanf("%d%d", &a, &b);

res = 0;while ( (res+1) * b <= a)

res = res + 1;

printf("%d / %d = %d", a, b, res);return 0;

}

Break in a loop

When break is encountered, the loop is exited regardless of whether the condition is still true.

The program then continues to run from the first line after the while loop.

If called within a nested loop, break breaks out of the inner loop only.

Example – counting letters

break.c

Continue

When continue is encountered, the rest of the loop is ignored.

The program then continues to run from the beginning of the loop.

Rarely used. Can usually be replaced by an

appropriate if-else statement.

top related