Chap3

W
Shared by: hedongchenchen
Categories
Tags
-
Stats
views:
1
posted:
8/16/2012
language:
English
pages:
123
Document Sample
scope of work template
							              CS 2073
    Computer Programming w/Eng.
            Applications
                      Ch 3
Control Structures and Data Files

            Turgay Korkmaz
                 Office: SB 4.01.13
              Phone: (210) 458-7346
                Fax: (210) 458-4437
           e-mail: korkmaz@cs.utsa.edu
          web: www.cs.utsa.edu/~korkmaz




                                          1
              Name Addr   Content




Lecture++;
             Lecture      7




                                    2
3.1 Algorithm Development
   So far, we considered very simple programs
    (read, compute, print)
   Top-down Design
       Start from the big picture
       Use a process called divide-and-conquer
       Keep dividing the problem until steps are detailed
        enough to convert to a program
       Refinement with Pseudo-code (English like
        statements) and Flowchart (diagram, graph)

                                                             3
Pseudo-code Notation and
Flowchart Symbols




                           4
Structured Programming
Use simple control structures to organize the
solution to a problem
   Sequence
                                     no   yes


   Selection

                                no

   Repetition            yes




                                                5
Sequence




           6
Selection




            7
Repetition




             8
Extras
   Evaluation of alternative solution
       A problem can be solved in many different ways
       Which is the best (e.g, faster, less memory req)
   Error condition
       Do not trust user! Check the data. A=b/c;
       Be clear about specifications
   Generation of Test Data
       Test each of the error conditions
       Program validation and verification
       Program walkthrough

                                                           9
3.2 Conditional Expressions
   Selection and repetition structures use
    conditions, so we will first discuss them
   A condition is an expression (e.g., x= a > b)
    that can be evaluated to be
       TRUE (any value > 0) or
       FALSE (value of 0)
   Conditional Expression is composed of
    expressions combined with relational and/or
    logical operators

                                                  10
    Relational Operators
   ==    equality                (x == 3)
   !=    non equality            (y != 0)
   <     less than               (x < y)
   >     greater than            (y > 10)
   <=    less than equal to      (x <= 0)
   >=    greater than equal to   (x >= y)

!!! a==b vs. a=b !!!
                                             11
                                4       A
Examples                        2       B
                                -0.01   denum
   A<B
                                ?       D
   fabs(denum) < 0.0001        6       b
   D = b > c;                  4       c
   if (D)                      2       X

        A=b+c;                  1       Y

                                10      K
   Mixing with arithmetic op
       X+Y >= K/3
                                                12
    Logical Operators
   !            not      !(x==0)
   &&           and       (x>=0) && (x<=10)
   ||           or        (x>0) || (x<0)
A        B        A && B A || B    !A      !B
False    False    False    False   True    True
False    True     False    True    True    False
True     False    False    True    False   True
True     True     True     True    False   False
                                                   13
        Examples
   A<B && C>=5
                               4   A
   A+B * 2 < 5 && 4>=A/2          B
                               2
   A<B || C<B && A-2 < 10     6   C
   A < B < C ????
   A<B<C is not the same as
       (A<B) && (B<C)


                                       14
Precedence for Arithmetic,
Relational, and Logical Operators




                                    15
Exercise
   Assume that following variables are declared
    a = 5.5   b = 1.5       k = -3
   Are the following true or false
       a < 10.0 + k
       a + b >= 6.5
       k != a-b
       !(a == 3*b)
       a<10 && a>5
       fabs(k)>3 || k<b-a



                                                   16
       Exercise: Logical Circuit
                                    y1 = x1 && x2;
x1            y1
       AND                          y2 = x3 || x4;
x2                          z1
                       OR           y3 = !x5;
x3           y2                     z1 = y1 || y2;
       OR
x4                                  z2 = y2 && y3
                     AND z2         Without using y1, y2, y3
             y3
x5    NOT                           z1 = x1 && x2 || (x3 || x4);
                                    z2 = (x3 || x4) && !x5;
Write a program that reads x1, x2, x3, x4, x5 and computes/prints z1, z2   17
    Exercise
a

               x


b
C
               18
              Name Addr   Content




Lecture++;
             Lecture      8




                                    19
3.3 Selection Statements

   if
   if else
   switch




                           20
if statement
   if(Boolean expression)
        statement; /* single statement */

   if(Boolean expression) {
        /* more than one statement */
        statement1;
              …
        statement n;
    }                                       21
if statement - examples
 if (x > 0)
     k++;             Name Addr   Content
                         x        9
 if(x > 0) {             y        5
     y = sqrt(x);        k        4
     k++;
 }

 if(x > 0) /* a common mistake */
     y = sqrt(x);
     k++;
                                            22
if else statement
   if(Boolean expression)
         statement;
    else
         statement;

   if(Boolean expression) {
         statement block
    } else {
         statement block
    }

                               23
    if else statement
   What does the following program do?
   Assume that x, y, temp are declared.
                              Name Addr   Content
    if (x > y)                    x       9

      temp = x;                   y       5
                               temp       ?
    else                     if (x > y){
      temp = y;                temp = x;
                             } else {
                               temp = y;
                             }                      24
    Exercise
   Write an if-else statement to find both the maximum
    and minimum of two numbers.
   Assume that x, y, min, max are declared.

    if (x > y) {
                                 Name Addr   Content
      max = x;
      min = y;
                                    x        9   9   3   3   6   6
    } else {                        y        5   5   8   8   6   6
       max = y;                   max        ?   9   9   8   8   6
       min = x;                   min        ?   5   5   3   3   6
    }

                                                                     25
if else statement
Split the following statement into two separate if
statements

if (x > y)                   if (x > y)
  temp = x;                    temp = x;
else
  temp = y;                  if (x <= y)
                               temp = y;


                                                     26
     Flow chart for previous slide
                        if (x > y)
if (x > y)                                      T
  temp = x;               temp = x;   x>y

else
                        if (x <= y)            temp=x
  temp = y;
                          temp = y;
                    T
              x>y
                                                    T
                                      x <= y

     temp=y         temp=x                     temp=y



                                                        27
 nested if-else
if(x > y) {          F            T
                           x>y
       if(y < z) {
              k++;                      T
                             F    y<z
       } else
       else {        j++

              m++;
else }                      m++         k++

       j++;
} else {
       j++;
}
                                              28
         Exercise
int x=9, y=7, z=2, k=0, m=0, j=0;    F            T
                                           x>y
if(x > y)
          if(y < z)
                                                        T
                    k++;                     F    y<z
          else                       j++
                    m++;
else
                                            m++         k++
          j++;

What are the values of j, k and m?




                                                              29
       Exercise: Find the value of a
                                               T
                                    a>0
int a = 750;
if (a>0)                                                T
                                           a >= 1000
    if (a >= 1000)
        a = 0;
    else               a =a+3                   T
                                     a < 500
        if (a <500)                                     a=0
            a =a*2;
        else                    a =a*10        a =a*2
            a =a*10;
else
    a =a+3;
                                                              30
      Exercise: Find the value of a
int a = 750;
if (a>0) {                           a>0
                                                T
    if (a >= 1000) {
        a = 0;
                                                        T
    } else {                                a >= 1000

        if (a <500) {
            a =a*2;     a =a+3                   T
                                      a < 500
        } else {                                        a=0
            a =a*10;
        }                        a =a*10        a=a*2
    }
} else {
    a =a*3;
}                                                             31
  Indentation
   int a = 750;          int a = 750;
   if (a>0)              if (a>0)
       if (a >= 1000)    if (a >= 1000)
           a = 0;        a = 0;
       else              else
           if (a <500)   if (a <500)
Good           a=a*2;    a=a*2;
           else          else
               a=a*10;   a=a*10; Not good
   else                  else
       a =a+3;           a = a+3;
                                            32
Indentation (cont’d)
    What is the output of the following programs
      int a = 5, b = 3;
if (a>10)                             if (a>10) {
     a = 50;                               a = 50;
     b = 20;                 Not good b = 20;
                                      }
printf(" a = %d, b = %d\n",a, b);     printf(" a = %d, b = %d\n",a, b);

if (a>10)                              if (a>10) {
     a = 50;                               a = 50;
b = 20;                         Good       b = 20;
                                       }
printf(" a = %d, b = %d\n",a, b);      printf(" a = %d, b = %d\n",a, b);

                                                                      33
    Exercise: Region in a plane
       Write a program that reads a point
        (x, y) from user and prints its region
                           For example
Region 2    Region 1       Enter x y: 3 -1
                            This point is in Region 4
Region 3   Region 4

                           Enter x y: -1 -5
                            This point is in region 3
                           Enter x y: 0 5 ???????
                                                        34
              Name Addr   Content




Lecture++;
             Lecture      9




                                    35
Switch Statement
switch(expression) {
      case constant:
            statement(s);
            break;
      case constant:
            statement(s);
            break;
       default:      /* default is optional */
            statement(s);
}
                                                 36
    Switch Statement
   Expression must be of type integer or character
   The keyword case must be followed by a constant
   break statement is required unless you want all subsequent
    statements to be executed.
        switch (op_code) {
             case ‘N’:
               printf(“Normal\n”);
               break;
             case ‘M’:
               printf(“Maintenance Needed\n”);
                break;
             default:
                printf(“Error\n”);
                break;
         }                                                       37
      Exercise
     Convert the switch statement into if statement.

switch (op_code) {
  case ‘N’:                              if (op_code == ‘N’)
       printf(“Normal\n”);                   printf(“Normal\n”);
       break;                            else if (op_code == ‘M’)
  case ‘M’:                                  printf(“Maintenance Needed\n”);
       printf(“Maintenance Needed\n”);   else
       break;                                printf(“Error\n”);
  default:
       printf(“Error\n”);
       break;
}


                                                                          38
     Exercise
Convert the following nested if/else statements to
a switch statement         switch(rank) {
                                             case 1:
   if (rank==1 || rank==2)
      printf("Lower division \n");           case 2:
   else                                        printf("Lower division \n");
   {                                           break;
      if (rank==3 || rank==4)                case 3:
         printf("Upper division \n");
      else                                   case 4:
      {                                        printf("Upper division \n");
         if (rank==5)                          break;
            printf("Graduate student \n");   case 5:
         else
            printf("Invalid rank \n");          printf("Graduate student \n");
      }                                         break;
   }                                         default:
                                              printf("Invalid rank \n");
                                      }                                          39
More selection examples




                          40
       Write if-else statement
                                                 T
                                    score > 70

              You fail                                           You pass

                             T                                              T
          age > 18                                               age > 18



                                                     Excellent              Good job
Don’t worry              Very bad
                                                        job



    Good luck next time



                                                                                  41
if (score > 70) {
    printf(“You Pass\n”);
    if (age > 18) {
          printf(“Good job \n”);
    } else {
          printf(“Excellent job\n”);
    }
} else {
    printf(“You Fail\n”);
    if (age > 18) {
          printf(“ Very bad \n”);
    } else {
          printf(“ Don’t worry \n”);
    }
     printf(“ Good luck next time \n”);
}
                                          42
                                   get b, c from user
                                   a=b+c


                             F                                   T
                                      a <= 10 and b-c > 6

                                                                        Print “RIGTH”, a, b, c
              c != b          T                                         b= 5 + c * 2



                       Print “LEFT-RIGTH”, a, b, c                                          T
          F                                                  F               a*b<=12
                       c= 5 + c * 2



                                               Print “RIGTH-LEFT”, a, b, c
   Print “LEFT-LEFT”, a, b, c                  a= 10 - c * c
   b= a * -c




                                               c = a+b
                                               Print “FINAL”, a, b, c




Print “RIGHT”, a, b, c means
printf(“RIGHT a=%lf b=%lf c=%lf \n”,a, b, c);
                                                                                                 43
a=b+c;
if (a<=10 && b-c>6) {
           printf("RIGHT a=%lf b=%lf c=%lf \n", a, b, c);
           b=5+c*2;
           if (a*b<=12) {
           } else {
              printf("RIGHT-LEFT a=%lf b=%lf c=%lf \n",a, b, c);
              a=10-c*c;
           }
} else {
           if (c != b) {
              printf("LEFT-RIGHT a=%lf b=%lf c=%lf \n",a, b, c);
              c=5+c*2;
            }
            printf("LEFT-LEFT a=%lf b=%lf c=%lf \n",a, b, c);
            b=a*-c;
}
c=a+b;
printf("Final a=%lf b=%lf c=%lf \n",a, b, c);
                                                                   44
        Exercise: which task takes
        more time
   Suppose we have two tasks A and B
       A takes Ah hours, Am minutes, and As seconds
       B takes Bh hours, Bm minutes, and Bs seconds
   User enters Ah Am As Bh Bm Bs
   Write if-else statements to print out which
    task takes more time?


                                                   45
Max, Min, Median
   Write a program that reads 3 numbers a, b and c
    from user and computes minimum, median and
    maximum of the numbers.

   Example:
       a = 2, b = 5, c = 3
            minimum = 2, maximum = 5, median = 3
       a = 2, b = 2, c = 3
            minimum = 2, maximum = 3, median = 2




                                                      46
      Another if-else  flowchart
if( A > 8) {                                T
   A=b+c;                             A>8


   if(A < 4)        A=b-c                       A=b+c
     B=b*c;
   if(A > 8)                                            T

     B=b/c;            A< 5
                              T                  A< 4


} else {    B=b%c             B=b+c
                                                        B=b*c


   A=b-c;
   if(A < 5)                                            T

     B=b+c;
                                                 A> 8

                    A=B
   else                                                 B=b/c


     B=b%c;
   A=B;
                                                                47
}
Exercise: Assign Letter Grade
   Given a score and the following grading scale write a
    program to find the corresponding grade.

      90-100         A
      80-89          B
      70-79          C
      60-69          D
      0-59           F



                                                        48
Solution-1
if ((score >= 90) && (score <=100))
 grade = 'A';
else if ((score >= 80) && (score <= 89))
 grade = 'B';
else if ((score >= 70) && (score <= 79))
 grade = 'C';
else if ((score >= 60) && (score <= 69))
 grade = ‘D';
else if ((score >= 0) && (score <= 59))
 grade = ‘F';
else
 printf("Invalide Score\n");



                                           49
 Solution-2
if ((score >= 0) && (score <= 100))
     if (score >= 90)
           grade = 'A';
     else if (score >= 80)
           grade = 'B';
     else if (score >= 70)
           grade = 'C';
     else if (score >= 60)
           grade = ‘D';
     else
           grade = ‘F';
 else
    printf("Invalide Score\n");

                                      50
Triangle inequality
   Suppose we want to check if we can
    make a triangle using a, b, c

                   |a-b| <= c |a-c| <= b |b-c| <= a
                   a+b >= c   a+c >= b   b+c >= a
    c       a



        b



                                                      51
Charge for money transfer
   Suppose you transfer $N and bank’s
    charge occurs as follows.
                   $10       if N  $500
           $10  2% of N
                             if 500  N  1000
    cost  
           $15  0.1% of N   if 1000  N  10000
           
                    $30      Otherwise
   Write a program that reads N and
    computes cost

                                                    52
   Compute Queuing Delay
      Write C program that computes and
       prints out average delay in a queuing
       system, where the average delay is
       given as follows
                    2
                          (1    ) if 0    1
                                  2 2
AvgDelay  1   2(1   )
            
                                       if   1

                                                  53
#include <stdio.h>
int main(void)
{
   /* Declare variables. If needed, you can declare more*/
   double rho, mu, sigma, AvgDelay;

     printf("Enter rho(utilization), mu(service time) and "
         "sigma (standard deviation of service time) : ");
     scanf("%lf %lf %lf", &rho, &mu, &sigma);
    /* Compute and print the average delay using rho, mu, sigma */

         if( rho > 0 && rho < 1) {
              AvgDelay = (rho / (1 - rho)) –
                         rho*rho / (2 * (1-rho)) *
                         (1-mu*mu*sigma*sigma);
              printf("AvgDelay = %lf \n", AvgDelay);
         } else if (rho >=1){
              printf("AvgDelay is infinity \n");
         } else
              printf("rho cannot be negative \n");
    system("pause");
    /* Exit program. */
    return 0;
                                                                54
}
Spell out a number in text
using if-else and switch
 Write a program that reads a number
  between 1 and 999 from user and spells
  out it in English.
For example:
 453        Four hundred fifty three
 37         Thirty seven
 204        Two hundred four

                                      55
              Name Addr   Content




Lecture++;
             Lecture      10




                                    56
Loop (Repetition) Structures




                               60
Problem: Conversion table
degrees  radians
                                Degrees to Radians
                                    0 0.000000
                                   10 0.174533
                                   20 0.349066
                                   30 0.523599
                                  …
                                  340 5.934120
                                 350 6.108653
radians = degrees * PI / 180;    360 6.283186

                                                     61
                                        #include <stdio.h>
     Sequential                         #define PI 3.141593
                                        int main(void)
     Solution                           {
                                          int degrees=0;
                                          double radians;
                                           printf("Degrees to Radians \n");

                                          degrees = 0;
                                          radians = degrees*PI/180;
                                          printf("%6i %9.6f \n", degrees, radians);
degrees = ???
                                          degrees = 10;
radians = degrees*PI/180;
                                          radians = degrees*PI/180;
printf("%6i %9.6f \n", degrees, radians);
                                          printf("%6i %9.6f \n", degrees, radians);
                                          degrees = 20;
                                          radians = degrees*PI/180;
                                          printf("%6i %9.6f \n", degrees, radians);
                                        …
        Not a good solution               degrees = 360;
                                          radians = degrees*PI/180;
                                          printf("%6i %9.6f \n", degrees, radians);
                                        }                                       62
         Loop
         Solution
                                            #include <stdio.h>
                                            #define PI 3.141593
                                            int main(void)
                                            {
                                              int degrees=0;
                                              double radians;
                                                printf("Degrees to Radians \n");

                                             while (degrees <= 360) {
degrees = ???
radians = degrees*PI/180;                           radians = degrees*PI/180;
printf("%6i %9.6f \n", degrees, radians);           printf("%6i %9.6f \n", degrees, radians);
                                                    degrees += 10;
                                                }
                                            }                            degrees+=10
                                                                            means
                                                                     degrees= degrees+10 63
Loop (Repetition) Structures
   while statement
   do while statement
   for statement
   Two new statements used with loops
       break and continue




                                         64
while statement
   while(expression)
       statement;

   while(expression) {
       statement;
       statement;
             …
    }


                          65
Example
#include <stdio.h>
#define PI 3.141593

int main(void)
{
  int degrees=0;
  double radians;

  printf("Degrees to Radians \n");
  while (degrees <= 360)
  {
    radians = degrees*PI/180;
    printf("%6i %9.6f \n", degrees, radians);
    degrees += 10;
  }
return 0;
}
                                                66
do while
   do
        statement;
    while(expression);
   do {
        statement1;
        statement2;
               ...
    } while(expression);
   note - the expression is tested after the statement(s)
    are executed, so statements are executed at least
    once.

                                                         67
Example
#include <stdio.h>
#define PI 3.141593

int main(void)
{
  int degrees=0;
   double radians;

    printf("Degrees to Radians \n");
    do
    {
      radians = degrees*PI/180;
      printf("%6i %9.6f \n",degrees,radians);
      degrees += 10;
    } while (degrees <= 360);
    return 0;
}                                               68
for statement
   for(initialization ; test ; increment or decrement )
         statement;

   for(initialization ; test ; increment or decrement )
    {
         statement;
         statement;
                 …
    }

                                                           69
Example
#include <stdio.h>
#define PI 3.141593

int main(void)
{
  int degrees;
  double radians;

    printf("Degrees to Radians \n");
    for (degrees=0; degrees<=360; degrees+=10)
    {
      radians = degrees*PI/180;
      printf("%6i %9.6f \n", degrees, radians);
    }
    return 0;
}

                                                  70
for statement

         initialize
                          test
        Increment or
        decrement

                           true
         statement(s)
           statement(s)




                                  71
    Examples
 int sum =0, i;
 for( i=1 ; i < 7;i=i+2 ){
                             ?135 7      i
        sum = sum+i;
 }
                             0 1 4       sum
                                     9
 int fact=1, n;
 for( n=5 ; n>1 ; n--){
      fact = fact * n;
 }
                             5
                                         n
n--; means n=n-1;            1           fact
n++; means n=n+1;
                                                72
    Exercise
Determine the number of times that each of the
following for loops are executed.

for (k=3; k<=10; k++) {
       statements;
}
                                                  final  initial 
for (k=3; k<=10; ++k) {                           increment   1
                                                                  
       statements;
}

for (count=-2; count<=5; count++) {
       statements;
}
                                                                       73
       Example
   What will be the output of the following program, also show
    how values of variables change in the memory.
int sum1, sum2, k;
sum1 = 0;                                0 2 6                    sum1

sum2 = 0;
for( k = 1; k < 5; k++) {                0 1 4                    sum2
    if( k % 2 == 0)
      sum1 =sum1 + k;                    1 2 3 4 5                k
    else
      sum2 = sum2 + k;
}
printf(“sum1 is %d\n”, sum1); sum1 is 6
printf(“sum2 is %d\n”, sum2); sum2 is 4


                                                                         74
      For vs. while loop
Convert the following for loop to while loop

        for( i=5; i<10; i++) {
           pritntf(“ i = %d \n”, i);
        }

        i=5;
        while(i<10){
           pritntf(“ i = %d \n”, i);
           i++;
        }

                                               75
break statement
   break;
       terminates loop
       execution continues with the first statement following the
        loop

    sum = 0;                          sum = 0;
    for (k=1; k<=5; k++) {            k=1;
                                      while (k<=5) {
       scanf(“%lf”,&x);                    scanf(“%lf”,&x);
       if (x > 10.0)                     if (x > 10.0)
           break;                            break;
       sum +=x;                          sum +=x;
                                         k++;
    }                                 }
    printf(“Sum = %f \n”,sum);        printf(“Sum = %f \n”,sum);

                                                                     76
continue statement
   continue;
      forces next iteration of the loop, skipping
       any remaining statements in the loop
                                 sum = 0;
    sum = 0;                     k=1; = 0;
                                  sum
                                 while (k<=5) {
                                  k=1;
    for (k=1; k<=5; k++) {            scanf(“%lf”,&x);
                                  while (k<=5) {
       scanf(“%lf”,&x);                (x > 10.0){
                                    if scanf(“%lf”,&x);
       if (x > 10.0)                    k++;
                                     if (x > 10.0)
           continue;                    continue;
                                         continue;
                                    }sum +=x;
       sum +=x;                     sum +=x;
                                     k++;
    }                             } k++;
    printf(“Sum = %f \n”,sum);   }printf(“Sum = %f \n”,sum);
                                 printf(“Sum = %f \n”,sum);
                                                           77
 Example: what will be the
 output
int main()
{                                       a   =   5   b   =   5   c   =   10
  int a, b, c;                          a   =   5   b   =   6   c   =   11
  a=5;                                  a   =   4   b   =   4   c   =   8
  while(a > 2) {                        a   =   4   b   =   5   c   =   9
    for (b = a ; b < 2 * a ; b++ ) {    a   =   4   b   =   6   c   =   10
        c = a + b;                      a   =   4   b   =   7   c   =   11
        if (c < 8) continue;            a   =   3   b   =   5   c   =   8
        if (c > 11) break;
        printf( “a = %d b = %d c = %d   \n”, a, b, c);
    } /* end of for-loop */
    a--;
  } /* end of while loop */
}


                                                                             78
Example: A man walks
   Suppose a man (say, A) stands         N
    at (0, 0) and waits for user to
    give him the direction and
    distance to go.
   User may enter N E W S for
                                              E
    north, east, west, south, and W
    any value for distance.
   When user enters 0 as
    direction, stop and print out     S
    the location where the man
    stopped


                                              79
float x=0, y=0;
 char direction;
 float distance;
 while (1) {
      printf("Please input the direction as N,S,E,W (0 to exit): ");
      scanf("%c", &direction);           fflush(stdin);
      if (direction=='0'){ /*stop input, get out of the loop */
         break;
      }
      if (direction!='N' && direction!='S' && direction!='E' && direction!='W') {
         printf("Invalid direction, re-enter \n");
         continue;
      }
      printf("Please input the mile in %c direction: ", direction);
      scanf ("%f", &distance); fflush(stdin);
      if (direction == 'N'){                /*in north, compute the y*/
         y = y + distance;
      } else if (direction == 'E'){         /*in east, compute the x*/
         x = x + distance;
      } else if (direction == 'W'){         /*in west, compute the x*/
         x= x - distance;
      } else if (direction == 'S'){         /*in south, compute the y*/
         y = y- distance;
      }
 }
 printf("\nCurrent position of A: (%4.2f, %4.2f)\n", x, y); /* output A's location */   80
              Name Addr   Content




Lecture++;
             Lecture      13




                                    81
More loop examples




                     82
    Exercise
   What is the output of the
    following program?          Output

    for (i=1; i<=5; i++) {      ****
        for (j=1; j<=4; j++){   ****
                                ****
            printf(“*”);        ****
        }                       ****

        printf(“\n”);
    }

                                         83
     Exercise
   What is the output of the
    following program?            Output

    for (i=1; i<=5; i++) {        *
          for (j=1; j<=i; j++){   **
                                  ***
               printf(“*”);       ****
          }                       *****
          printf(“\n”);
    }

                                           84
      Example: nested loops to
      generate the following output
                What/how
               int i, j; do you need to
                 change i th 5; i++){
               for(i=1; in <= following
i=1   *             printf("i=%d
                 program? j <=", i); {
                    for(j=1;      i; j++)
i=2   ++               (i=1; 2 == i++) {
                  for if (i % i<=5;0)
                     for (j=1; j<=i; j++){
                          printf("+ ");
i=3   ***              else printf(“*”);
                     }    printf("* ");
i=4   ++++          }printf(“\n”);
                  } printf("\n");
i=5   *****    }

                                        85
 Exercise: Modify the following
 program to produce the output.

for (i=A; i<=B; i++) {
                               Output
      for (j=C; j<=D; j++) {
                               *****
          printf(“*”);         ****
                               ***
      }                        **
      printf(“\n”);            *

}


                                        86
    Exercise
   Write a program using loop statements to
    produce the following output.


                      Output

                          *
                         **
                        ***
                       ****
                      *****

                                               87
Example
   Write a program that prints in two columns n even
    numbers starting from 2, and a running sum of
    those values. For example suppose user enters 5
    for n, then the program should generate the
    following table:
Enter n (the number of even numbers): 5
Value Sum
 2        2
 4        6
 6       12
 8       20
10      30
                                                    88
#include <stdio.h>
int main(void)
{
   /* Declare variables.   */
   int n;
   int sum, i;

    printf("Enter n ");
    scanf("%d",&n);

    printf("Value \t Sum\n");
    sum = 0;
    for(i=1; i <=n; i++){
      sum = sum + 2*i;
      printf("%d \t %d\n", 2*i, sum);
    }
    return 0;
}                                       89
Compute xy when y is integer
   Suppose we don’t have pow(x,y) and y
    is integer, write a loop to compute xy
    printf(“Enter x, y :”);
    scanf(“%d %d”, &x, &y);
    res=1;
    for(i=1; i<=y; i++){
        res = res * x;
    }                                        90
        Exercise: sum
   Write a program to compute the following
    n

i
i 1
          1  2  3  ...  n   total  2  4  6  ... 2n

Enter n                           Enter n

total=0;                          total=0;

for(i=1; i<=n; i++)               for(i=1; i<=n; i++)

    total = total + i ;             total = total + 2 * i ;

print total                       print total
                                                              91
    Exercise: sum
           Write a program to compute the following
        m

    x
     i 0
               i
                    x  x  x  x  x  x
                     0    1    2         3       4              m

                                   Enter x and m
Enter x and m                      total=0; sofarx=1;
                                   for(i=0; i<=m; i++) {
total=0;
                                       total = total +sofarx;
for(i=0; i<=m; i++)
                                       sofarx = sofarx * x;
  total = total + pow(x, i);       }
print total                        print total
                                                                    92
     Exercise: ln 2
   Write a program to compute the following
          1 1 1 1 1 1 1      1
    ln 2          
          1 2 3 4 5 6 7      n
       Enter n
       ln2=0;
       for(i=1; i<=n; i++)
         if ( i % 2 == 0)
                ln2 = ln2 - 1.0 / i;
         else
                 ln2 = ln2 + 1.0 / i;
       print total                             93
Exercise: ex
   Write C program that reads the value of x and n from
    the keyboard and then approximately computes the
    value of ex using the following formula:

                            2        3                 n
      x x     x      x
e  1 
    x
                
      1! 2!   3!     n!
   Then compare your approximate result to the one
    returned by exp(x) in C library, and print out whether
    your approximation is higher or lower.
                                                        94
int    i, n;
double x, ex;
double powx, fact;
printf("Enter the value of x and n : ");
scanf("%lf %d",&x, &n);
/* Write a loop to compute e^x using the above formula */
ex=1.0;   fact=1.0;    powx=1.0;
for(i=1; i<=n; i++){
    powx = powx * x;
    fact = fact * i;
    ex = ex + powx / fact;
}
printf("Approx value of e^x is %lf when n=%d\n",ex, n);
/* Check if ex is higher/lower than exp(x) in math lib.*/
if(ex < exp(x))
   printf("ex est is lower than exp(x)=%lf\n",exp(x));
else if (ex > exp(x))
   printf("ex est is higher than exp(x)=%lf\n",exp(x));
else
   printf("ex est is the same as exp(x)\n");            95
   Exercise: sin x
       Compute sin x using
               3      5      7                     2 n 1
       x x   x  x            x
sin x        (1) n

       1! 3! 5! 7!         (2n  1)!
 printf(“Enter x n :”); scanf(“%lf %d”, &x, &n);
 total=0; powx=x; factx=1;
 for(i=0; i <= n; i++){
    k= 2*n+1;
    if (i%2==0) total= total - powx/factx;
    else total= total + powx/factx;
    powx= powx * x * x;
    factx = factx * k * (k-1);
 }
 printf( “sin(%lf) is %lf\n”,x, total);
                                                            96
   For vs. while loop : Convert the
   following for loop to while loop
for( i=5; i<10; i++) {
   printf(“AAA %d \n”, i);
   if (i % 2==0) continue;
   pritntf(“BBB %d \n”, i);
}       i=5;
        while(i<10) {
           printf(“AAA %d \n”, i);
           if (i % 2==0) {
              i++;
              continue;
           }
           pritntf(“BBB %d \n”, i);
           i++;
                                      97
        }
Skip
   Study Section 3.5 from the textbook




                                          98
              Name Addr   Content




Lecture++;
             Lecture      14




                                    99
3.6 Data Files
   So far, we used scanf and printf to
    enter data by hand and print data on
    the screen
   What if we have 1000 data points to
    enter? Can we still enter them by hand?
   What if the output has several lines and
    we want to store the output results or
    use them with other programs?

                                          100
Read Access to Data Files




                            101
         Read Access to Data Files
   #include <stdio.h>
   File pointer must be defined in C program
    FILE *sf;
   File pointer must be associated with a specific file using the
    fopen function
   If the program and data file are in the same directory
           sf = fopen(“sensor1.dat”, “r”);
   Else give the full path

    sf = fopen(“C:\turgay\H\Teaching\15b-FALL07-cs2073\prog\sensor1.dat”, “r”);



                                                                                  102
Read from Data Files
Input file - use fscanf instead of scanf
#include <stdio.h>
FILE *sf;
double t, motion;
     sf = fopen(“sensor1.dat”, “r”);
while( ???? ){
  fscanf( sf , “%lf %lf” , &t, &motion);
}                                          t
                              2 3 4
                             4.4 3.5 6.3   motion
                                           sf
                                                103
       Create New Data Files
       Write Access to Data Files
    #include <stdio.h>
    File pointer must be defined in C program
     FILE *bf;
    File pointer must be associated with a specific file using the
     fopen function
    If the program and data file are in the same directory
           bf = fopen(“balloon.dat”, “w”);
    Else give the full path

    bf = fopen(“C:\turgay\H\Teaching\15b-FALL07-cs2073\prog\balloon.dat”, “w”);




                                                                                  104
   Write to Data Files
Output file - use fprintf instead of printf
#include <stdio.h>
FILE *bf;
double time=6.5, height=5.3;
bf = fopen(“balloon.dat”, “w”);
fprintf(    bf        , “t: %f h: %f\n”, time, height);

  6.5 7.1 8.3    time

  5.3 8.3 3.7    height          t: 6.500000 h: 5.300000
                                 t: 7.100000 h: 8.300000
                 bf              t: 8.300000 h: 3.700000   105
At the end, Use fclose
fclose(sf); fclose(bf);




                          106
Example
   Read 6 values from a file named
    my_data.txt and write their average
    into another file named avg-of-6.txt

    65                          4

    4                               avg-of-6.txt
                      program
    234
    5
        my_data.txt
                                                   107
Example: average grade
    Suppose we keep the id and three HW grades
     of 36 students in a file named grades.txt
    Write a program to compute average grade
     for each student and write each students avg
     into another file named avg-hw.txt
    1 5 10 15                    1 10
                                 2 20
    2 10 20 30       program     …
    …                            36 10

    36 4 6 20                      avg-hw.txt

        grades.txt                              108
              Name Addr   Content




Lecture++;
             Lecture      15




                                    109
Reading Data Files
When to stop
 Counter controlled loop
       First line in file contains count
       Use for loop
   Trailer signal or Sentinel signal
       Data ends when a special data value is seen -999
       Use while loop
   End of file controlled loop
       When file is created EOF is inserted
       Use while loop
       feof(fileptr) > 0 when EOF reached
       fscanf cannot read as many values as you wanted


                                                           110
      Check what
      fopen, fscanf, fprintf return
FILE *fp;
fp=fopen(“data.txt”, “r”);
if (fp==NULL){              if (fp=fopen(“data.txt”, “r”)) == NULL){
   printf(“Program cannot open the file\n”);
   return -1;
}

N=fscanf(fp, “%d %d %d”, &v1, &v2, &v3);
/* N is the number of values read successfully */

while(fscanf(fp, “%d %d %d”, &v1, &v2, &v3) == 3) {
  /* process v1 v2 v3 */
}

                                                                  111
     Counter controlled loop
     Usually first line in file contains the count

#include <stdio.h>
int main()
{
  FILE *scorefile;
  int score, count, i, sum=0;
                                                              6
    if((scorefile = fopen("scores2.txt","r")) == NULL) ){
                                                              56
      printf(“Program cannot open the file\n”);               78
      exit(-1);                                               93
    }                                                         24
    fscanf(scorefile,"%d", &count);                           85
    for (i=1; i<=count; i++) {                                63
       fscanf(scorefile,"%d", &score);
       sum = sum + score;                                scores2.txt
    }
    printf(“Average score %lf \n",(double)sum/count);
    fclose(scorefile);
    return(0);
}
                                                                   112
     Trailer signal or Sentinel signal
#include <stdio.h>
int main()
{
  FILE *scorefile;
  int score, count=0, i, sum=0;                               56
                                                              78
    if((scorefile = fopen("scores3.txt","r")) == NULL) ){     93
      printf(“Program cannot open the file\n”);
                                                              24
      exit(-1);
    }                                                         85
    fscanf(scorefile,"%d", &score);                           63
    while(score >= 0) {                                       -999
      count++;                                            scores3.txt
      sum = sum + score;
      fscanf(scorefile,"%d", &score);
    }
    printf(“Average score %lf \n",(double)sum/count);
    fclose(scorefile);
    return(0);                                                    113
}
     End of file controlled loop
#include <stdio.h>
int main()
{
  FILE *scorefile;
  int score, count=0, i, sum=0;

    if((scorefile = fopen("scores4.txt","r")) == NULL) ){        56
      printf(“Program cannot open the file\n”);                  78
      exit(-1);                                                  93
    }                                                            24
    while (fscanf(scorefile,"%d",&score) == 1) {                 85
      count++;                                                   63
      sum = sum + score;
    }                                                       scores4.txt
    printf(“Average score %lf \n",(double)sum/count);
    fclose(scorefile);
                                       while (feof(scorefile) <= 0) {
    return(0);
                                          fscanf(scorefile,"%d",&score);
}                                         count++;
                                          sum = sum + score;
                                        }                            114
Exercise
   In previous three programs, we found
    average.
   Suppose, we want to also know how
    many data points are greater than
    average.
   Change one of the previous programs
    to determine the number of data points
    that are greater than average.

                                         115
    Exercise
   Given a file of integers. Write a program that finds the minimum
    number in another file.

   Algorithm to find minimum in a file:                      File
    open file
    set minimum to a large value                              56
    while (there are items to read)                           78
          read next number x from file                        93
          if (x < min)                                        24
                                                              85
              min = x
                                                              63
    display the minimum
    close file
                        Solution available on the next page

                                                                       116
#include <stdio.h>
int main()
{
  FILE *scorefile;
  int score;
  int min;
    scorefile = fopen("scores.txt","r");
    if (scorefile == NULL)
      printf("Error opening input file\n");
    else
      {
        min = 110;
        while (feof(scorefile) <= 0) {
          fscanf(scorefile,"%d",&score);
          if (score < min)
            min = score;
        }
      }
    printf("Min = %d\n",min);
    fclose(scorefile);
    system("pause");
    return(0);
}                                             117
    Exercise
   Given a file of integers. Write a program that searches for
    whether a number appears in the file or not.

   // algorithm to check for y in a file                         File
    open file
    set found to false                                            56
    while (there are items to read and found is false)            78
          read next number x from file                            93
          if (x equals y)                                         24
                                                                  85
              set found to true
                                                                  63
              Display found message to user
     Display not found message to user
    close file

                         Solution available on the next page
                                                                         118
#include <stdio.h>
int main()
{
  FILE *scorefile;
  int score, num, found;
 printf("Please Enter a number\n");
 scanf("%d", &num);
 scorefile = fopen("scores.txt","r");
 if (scorefile == NULL)
   printf("Error opening input file\n");
 else{
       found = 0;
       while ((feof(scorefile) <= 0) && (found == 0)) {
         fscanf(scorefile,"%d",&score);
         if (score == num)
            found = 1;
       }
       if (found == 0)
         printf("%d does not appear in the file\n",num);
       else
         printf("%d appears in the file\n",num);
 }
 fclose(scorefile);
 system("pause");                                       119
Exercise
   Change the previous program to count
    how many times the given number
    appears in the file?



        Instead of fount =1; put fount++;




                                            120
         Read/Write Example
    Suppose we have a data file that contains worker ID, the number of
     days that a worker worked, and the number of hours the worker
     worked each day.
    We would like to find out how much to pay for each worker. To
     compute this, find the total number of hours for each worker and
     multiply it by 7 dollar/hour.
    For instance, your program should process the following input.txt and
     generate the corresponding output.txt as follows:
Id      numofD       hour1   hour2   hour3            Id total-hour         payment
1         2            3       8                      1                11     77
2         3            5       7     6       progra   2                18     126
3         1            2                     m        3                2      14
4         2            5       1                      4                6      42
5         3            1       3     2                5                6      42
         input.txt                                        output.txt


                                                                                      121
#include <stdio.h>
int main(void)
{
   FILE *infp, *outfp;
   int ID, numofD, hour, i, total_hour;
   if ((infp = fopen("input.txt", "r"))==NULL){
       printf("Input file cannot be opened\n");
       return -1;
   }
   if ((outfp = fopen("output.txt", "w"))==NULL){
       printf("Output file cannot be opened\n");
       return -1;
   }
   while(fscanf(infp, "%d %d",&ID, &numofD)==2) {
        total_hour=0;
        for(i=1; i <= numofD; i++){
          fscanf(infp,”%d”,&hour);
          total_hour +=hour;
       }
       fprintf(outfp, "%3d %3d     %4d\n",
                       ID, total_hour, total_hour*7);
     }
   fclose(infp);    fclose(outfp);
   return 0;                                            122
      Read/write Example
   Suppose we have a data file that contains student ID and his/her
    homework grades for hw1, hw2, hw3, and hw4.
   We would like to find out min, max and average grade for each
    student and write this information into another file.
   For instance, your program should process the following input.txt
    and generate the corresponding output.txt as follows:

     Id   hw1     hw2        hw3    hw4           Id      min      max    avg
     1    20      30        28     18               1      18       30   24.00
     2    35      50        27     36     prog      2      27       50   37.00
     3    17      20        34     44               3      17       44   28.75
     4    20      50        14     12               4      12       50   24.00
     5    33      15        30     20               5      15       33   24.50
                input.txt                               output.txt




                                                                                 123
#include <stdio.h>
int main(void)
{
   FILE *infp, *outfp;
   int     i,ID, hw, max, min;
   double sum;
   if ((infp = fopen("input.txt", "r"))==NULL){
       printf("Input file cannot be opened\n");
       return -1;
   }
   if ((outfp = fopen("output.txt", "w"))==NULL){
       printf("Output file cannot be opened\n");
       return -1;
   }
   while(fscanf(infp, "%d %d",&ID, &hw)==2) {
     sum=max=min=hw;
     for(i=1; i <= 3; i++){
        fscanf(infp,”%d”,&hw);
        sum = sum + hw;
        if (hw > max) max = hw;
        if (hw < min) min = hw;
     }
     fprintf(outfp, "%3d \t %3d \t %4d \t %3.2lf\n",
                        ID, min, max, sum/4);
   }
   fclose(infp);    fclose(outfp);
   return 0;                                           124
}
    Eliminate out of order records
        Suppose we have a data file that has 5 columns in each row, namely
         student ID, hw1, hw2, hw3, hw4.
        We are told that most rows in this file are sorted in an increasing order
         based on the ID field. Write a program to determine the students
         whose IDs are not in order and print the IDs and homework grades of
         such students into another file.
2           4    3       3   2

3            3   1       1   1

5            3   5       8   3
                                                        1        4 4 1 5
1            4   4       1   5
                                  program               4        5 4 6 3
7            3       5   3   3

8            1       2   4   7

4           5        4   6   3

10          2        3   2   9

12          4        8   3   4

                                                                               125
More example
   Study 3.7 and 3.8 from the textbook




                                          126

						
Related docs
Other docs by hedongchenchen
Donley PE 10.8-10.19
Views: 392  |  Downloads: 0
DoMN YOG Rego form 2 pilgrims
Views: 206  |  Downloads: 0
Donchian
Views: 0  |  Downloads: 0
Donation Requests 101006f
Views: 0  |  Downloads: 0
Donation_Request
Views: 0  |  Downloads: 0
Donalyn-Miller-Book-list
Views: 0  |  Downloads: 0
don't judge
Views: 0  |  Downloads: 0
Domestic Service Groups
Views: 0  |  Downloads: 0
domainsandmeasuresnovember2012_tcm77-286624
Views: 0  |  Downloads: 0
domainsandmeasuresfinal_tcm77-287743
Views: 0  |  Downloads: 0