for loops for loops are controlled by a counter variable. for( c =init_value;c
TRANSCRIPT
For loops
For loops are controlled by a counter variable.
for( c =init_value;c<=fin_value;c+=increment_value)
{loop body;
}
c is a counter.
c is a incremented after every iteration (can also be decreased!)
The factorial example again, this time using for
#include <stdio.h>int main(void){ int i,n,fact = 1; printf("Enter a number\n"); scanf("%d", &n);
for(i=1;i<=n;i++) fact *= i;
printf("the factorial is %d\n", fact); return 0;}
Factorial with for – step by step
#include <stdio.h>int main(void){ int i,n,fact = 1; printf("Enter a number\n"); scanf("%d", &n);
for(i=1;i<=n;i++) fact *= i;
printf("the factorial is %d\n", fact); return 0;}
---
i
3
n
1
fact
Factorial with for – step by step
#include <stdio.h>int main(void){ int i,n,fact = 1; printf("Enter a number\n"); scanf("%d", &n);
for(i=1;i<=n;i++) fact *= i;
printf("the factorial is %d\n", fact); return 0;}
1
i
3
n
1
fact
Factorial with for – step by step
#include <stdio.h>int main(void){ int i,n,fact = 1; printf("Enter a number\n"); scanf("%d", &n);
for(i=1;i<=n;i++) fact *= i;
printf("the factorial is %d\n", fact); return 0;}
1
i
3
n
1
fact
Factorial with for – step by step
#include <stdio.h>int main(void){ int i,n,fact = 1; printf("Enter a number\n"); scanf("%d", &n);
for(i=1;i<=n;i++) fact *= i;
printf("the factorial is %d\n", fact); return 0;}
2
i
3
n
1
fact
Factorial with for – step by step
#include <stdio.h>int main(void){ int i,n,fact = 1; printf("Enter a number\n"); scanf("%d", &n);
for(i=1;i<=n;i++) fact *= i;
printf("the factorial is %d\n", fact); return 0;}
2
i
3
n
2
fact
Factorial with for – step by step
#include <stdio.h>int main(void){ int i,n,fact = 1; printf("Enter a number\n"); scanf("%d", &n);
for(i=1;i<=n;i++) fact *= i;
printf("the factorial is %d\n", fact); return 0;}
3
i
3
n
2
fact
Factorial with for – step by step
#include <stdio.h>int main(void){ int i,n,fact = 1; printf("Enter a number\n"); scanf("%d", &n);
for(i=1;i<=n;i++) fact *= i;
printf("the factorial is %d\n", fact); return 0;}
3
i
3
n
6
fact
Factorial with for – step by step
#include <stdio.h>int main(void){ int i,n,fact = 1; printf("Enter a number\n"); scanf("%d", &n);
for(i=1;i<=n;i++) fact *= i;
printf("the factorial is %d\n", fact); return 0;}
4
i
3
n
6
fact
Factorial with for – step by step
#include <stdio.h>int main(void){ int i,n,fact = 1; printf("Enter a number\n"); scanf("%d", &n);
for(i=1;i<=n;i++) fact *= i;
printf("the factorial is %d\n", fact); return 0;}
4
i
3
n
6
fact
For loops (cont.) Equivalent to while… Any for loop can be
converted to while loop and vice versa But some applications are more natural
to for, and others to while. If we want to perform something for a
predefined number of times, better use for.
If we just wait for something to happen (not after a certain number or iterations), better use while.
Incremental operators
Used as a short-hand for incrementing (or decrementing) variables.i++ or ++i == i = i + 1i-- or --i == i = i – 1i += a == i = i + ai -= a == i = i - ai *= a == i = i * ai /= a == i = i / a
Example – fahrenheit-celsius conversion table/* Print a Fahrenheit-to-Celsius conversion table */
#include <stdio.h> int main (void) {
int fahr;double celsius; int lower = 0, upper = 300;int step = 20;
for(fahr=lower ; fahr<=upper ; fahr += step){
celsius = 5.0*(fahr -32.0)/9.0;printf("%d\t%g\n", fahr, celsius);
}return 0;
}
Nested for loop – rectangle example/* Print a rectangle of *. The height and width are defined by the user */#include <stdio.h>
int main(void){
int i,j;int height, width;
printf("Please enter the two box dimensions: \n");scanf("%d%d",&height,&width);
for (i = 1; i <= height; i++){
for(j = 1; j <= width; j++)printf("*");
printf("\n");}
}
Exercise
Write a program that prints an upside-down half triangle of *.
The height of the pyramid is the input.
*****
*****
****
*
Solution #include<stdio.h>
int main(void){
int i, j, size;
printf(“Please enter a size:\n”);scanf(“%d”,&size);for (i = 1; i <= size; i++){
for(j = i; j <= size; j++)printf("*");
printf("\n");}
return 0;}
Exercise
Write a program accepts a number from the user, and prints out all of the prime numbers up to that number.
(Hint – first write a program that checks whether a given number is prime)
Solution#include <stdio.h>int main(void){
int i, j, last;
printf("enter a number\n");scanf("%d", &last);for(i = 2; i <= last; i++){
for(j = 2 ; j < i; j++)if (i % j == 0)
break;if (j == i)
printf("the number %d is prime\n", i); }return 0;
}
Exercise
Change the former program, so that is displays only the largest prime number which is smaller than or equal to the user’s input.
Solution 1#include <stdio.h>int main(void){
int i, j, last;int found = 0; /* This indicates whether we found the largest prime */
printf("enter a number\n");scanf("%d", &last);i = last;while (!found) /* Loop until we find our guy */{
for(j = 2 ; j <= i; j++) if (i % j == 0) break;
if (j > i) /* If this is true then i is prime */ found = 1;else i--;
}printf("The largest prime not larger than %d is %d.\n", last, i);return 0;
}
Solution 2 (with break)#include <stdio.h>int main(void){
int i, j, last;printf("enter a number\n");scanf("%d", &last);for(i=last;i>1;i--){
for(j = 2 ; j <= i; j++) if (i % j == 0) break;
if (j == i) /* i is prime. We found our guy */ break;
}printf("The largest prime not larger than %d is %d.\n", last, i);return 0;
}
Do while loops
do {statement(s)
} while (expression);
Similar to while loops Except the condition is evaluated after the
loop body The loop body is always executed at least
once, even if the expression is never true (equals zero)
Example – waiting for legal input#include <stdio.h>int main(void){
int i;
printf("Please enter a positive number.\n");do { scanf("%d", &i);
if (i<=0) printf("That's not a positive number! Try again.\n");} while (i<=0);/* The program continues.... */return 0;
}
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: statements
case 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 againswitch (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 the validity of the input!
A cooler 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