/**********************************************************************
A. Treibergs                                                      2-8-6
Program that opens a text file called "output.txt", writes to it, and 
closes it. The file can be read by any text editor or program that 
reads text files.
write_file.c
**********************************************************************/
# include <stdlib.h>
# include <stdio.h>
# include <math.h>
int 
main(void)
{
    int i;
    FILE *fp;                            /* Declaration of file variable */
    fp = fopen ( "output.txt", "w" );    /* Before a file can be used, it must be opened. */
                                         /* fopen returns a pointer to the file. */
                                         /* "w" for writing files, "r" for reading. */
    fprintf (fp, " Angle \t\t Sine \n" );        
    fprintf (fp, "-------  ---------------\n" );
    for ( i = 0; i <= 90; i++ )
                fprintf ( fp, "%6d \t %f21.15\n", i, sin( i * M_PI / 180.0 ) );
    fclose ( fp );                        /* closing returns file to system. */
                                          /* Newly written data may be lost without closing the file */
    return EXIT_SUCCESS;
}
/**********************************************************************
A. Treibergs                                                      2-8-6
Program that opens a text file called "data.txt" reads from it, performs 
a calculation and closes the file. "data.txt" is assumed to be a text file
that contains double precision numbers separated by white space (line feeds,
tabs or blanks). The program will continue reading one number at a time 
until the end of file is reached. The program counts the number of data 
observations, and computes the mean of the sample.
read_file.c
**********************************************************************/
# include <stdlib.h>
# include <stdio.h>
# define FILENAME "data.txt"             /* macro for file name. You type it once here. */
                                         /* define inserts "data.txt" at every occurrence of FILENAME */
int 
main(void)
{
    int n;
    double x, sum;  
    FILE *fp;                            /* Declaration of file variable */
    n=0;
    sum=0.0;
    fp = fopen ( FILENAME, "r" );    /* Before a file can be used, it must be opened. */
    if( fp == NULL)
             {
              printf("Unable to read the file \"%s\"\n", FILENAME);
             }
    else
             {
              while( (fscanf(fp, "%lf", &x)) ==  1  )  /* fscanf reads x, returns number of vars read */
                 {
                       sum = sum + x;
                       n = n + 1;
                 }
              printf(" The data in file \"%s\" had %d observations\n with mean = %f\n",FILENAME, n,sum/n);
             }
 
     fclose ( fp );    /* closing returns file to system. */
    
    return EXIT_SUCCESS;
}
1 2 3 4 5 6 7 8 9 1.012345678e1 -1.0 -2 -3 -4 -5 -6 -7.0 -8 -9
a.out <data2.txt
A data file that contains typographical errors, data2.txt is given after the program. The program reads only the data on the uncorrupted lines.
/**********************************************************************
A. Treibergs                                                     2-13-6
Program that opens a text file for reading. Inside the program the file is called 
"stdin" which is normally reserved for console.
To associate a data file name to stdin, on the call, add a pipe naming the input file:
a.out <data2.txt
This program expects two double precision number on each line, terminated by a \n.
It reads lines until it hits an end-of-file. If the data is corrupted so the
program cant read the numbers, it skips to the next record=line.
We could have used scanf to convert the incoming stream. In this program
however, we read the record in as a string, and then convert the string to numbers.
This handles garbage in the data better than directly using scanf.
Try corrupting the data file to see what happens.
read_file.c
**********************************************************************/
# include <stdlib.h>
# include <stdio.h>
int 
main(void)
{
    int  lines=0, m;
    double x,y;
    char inrecord[100];           /* More stable to read the input line as char string */
    while( fgets(inrecord,99,stdin) != NULL)   /*  fgets picks up input string terminated by nextline. 
                                                   fgets returns NULL when it tries to read an end-of-file. */
    {
        printf("%s\n",inrecord);               /* We just dump the incoming string, to see what happens with garbage chars. */
        m=sscanf(inrecord, "%lf %lf", &x,&y);  /* sscanf converts incoming stream from string inrecord, just as scanf
                                               /* converts incoming from stdin, using the format conversion specifier string. */
        if (m < 2) continue;                   /* sscanf returns the number of variables successfully converted. It returns -1 
                                               /* if it tries to convert an end of file. Here we skip to next loop if all vars not right. */
        printf("%22.15f %22.15f  %d\n", x, y,m); /* here all vars are present and correct. We just print them to see. */
        lines++;
    }
    printf(" %d records successfully read.\n",lines);
    
    return EXIT_SUCCESS;
}
1.0 3.3 2.1 3.x 3.5 5.1 6.6 3e1 hh7.7 12 2.2 0.7e1 9.4 15.2
/**********************************************************************
A. Treibergs                                                      2-9-6
Euclid's Algorithm. Given positive integers m,n (m>n) find positive
integers so that
     m  =    q_1    n      +   r_1
     n  =    q_2   r_1     +   r_2
    r_1 =    q_3   r_2     +   r_3
        .
        .
        .
r_(n-2) =    q_n   r_(n-1) +   r_n
r_(n-1) =  q_(n+1) r_n     +    0.
Then  gcd(m,n) = r_n (>0).
euclid.c
**********************************************************************/
# include <stdio.h>
# include <stdlib.h>
int 
main(void) 
{
   int m, n, p, q, r;
   printf ( "Euclid's Algorithm\n\n Enter two positive integers : ");
   scanf ( "%d %d", &n, &m);
   p=abs (m);
   q=abs (n);
        
   if ( p+q > 0 )
   {
           if( q == 0 )                        /* swap p and q if q is zero */
           {
                    r = p;
                    p = q;
                    q = r;
            }
           do                                 /* do Euclid's algorithm */
           {                             
                    r = p % q;
                    printf ( "%15d = %d * %d  +  %d\n", p, p/q, q, r);
                    p = q;
                    q = r;
           }
           while ( r != 0);
           printf ( " The greatest common divisor is %d.\n", p);
           if (p == 1)
                    printf ( " The numbers are relatively prime.\n");
    }
    else
           printf ( "At least one number must be nonzero.\n");
    return EXIT_SUCCESS;
}
/**********************************************************************
A. Treibergs                                                      2-9-6
Euclid's Algorithm via recursive functions
euclid2.c
**********************************************************************/
# include <stdio.h>
# include <stdlib.h>
int 
gcd(int a, int b)
{
   int q, res;
   q = a % b;
   if (q == 0)
          res = b;
   else
          res = gcd ( b, q );
  return ( res );
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
int 
main(void) 
{
   int n, m, g;
   printf ("Recursive Euclid's Algorithm\n\n Enter two positive integers : ");
   scanf ("%d %d", &n, &m );
   g = gcd( m, n );
   printf ( " The largest common divisor is %d\n", g );
   if ( g == 1)
           printf ( " The numbers are relatively prime.\n");
   return EXIT_SUCCESS;
}
/**********************************************************************
A. Treibergs                                                     2-13-6
Program that opens a text file. Inside the program the file is called 
"stdout." the prog writes to it and closes it. 
To identify the file name, on the call
a.out >dat3.txt
You can print the file, e.g., via
cat dat3.txt
The file can be read by any text editor or program that 
reads text files.
today.c
**********************************************************************/
# include <stdlib.h>
# include <stdio.h>
# include <math.h>
int 
main(void)
{
    int i;
    fprintf (stdout, " Angle \t\t Sine \n" );        
    fprintf (stdout, "-------      -----------------\n" );
    for ( i = 0; i <= 90; i++ )
                fprintf ( stdout, "%6d \t %21.15f\n", i, sin( i * M_PI / 180.0 ) );
    fclose ( stdout );                        /* closing returns file to system. */
                                          /* Newly written data may be lost without closing the file */
    return EXIT_SUCCESS;
}
 Angle 		 Sine 
-------      ---------------
     0 	     0.000000000000000
     1 	     0.017452406437284
     2 	     0.034899496702501
     3 	     0.052335956242944
     4 	     0.069756473744125
     5 	     0.087155742747658
     6 	     0.104528463267653
    . . . . . . .