COMP1511 17s1 Code Examples from Lectures on C_basics Introduction to Programming

A simple program demonstrating the use of scanf to sum 2 numbers

#include <stdio.h>

int main(void) {
    int x, y, sum;
    printf("Enter x: ");
    scanf("%d", &x);
    printf("Enter y: ");
    scanf("%d", &y);
    sum = x + y;
    // These 6 printfs can be better replaced by a single printf
    printf("%d", x);
    printf(" + ");
    printf("%d", y);
    printf(" = ");
    printf("%d", sum);
    printf("\n");
    return 0;
}

A simple program demonstrating the use of scanf to sum 2 numbers

#include <stdio.h>

int main(void) {
    int x, y, sum;
    printf("Enter x: ");
    scanf("%d", &x);
    printf("Enter y: ");
    scanf("%d", &y);
    sum = x + y;
    printf("%d + %d = %d\n", x, y, sum);
    return 0;
}

A simple program demonstrating the use of scanf to sum 2 numbers

#include <stdio.h>

int main(void) {
    int x, y;
    printf("Enter x: ");
    scanf("%d", &x);
    printf("Enter y: ");
    scanf("%d", &y);
    printf("%d + %d = %d\n", x, y, x +y);
    return 0;
}

A simple program demonstrating the use of scanf

#include <stdio.h>

int main(void) {
    int x, y;
    int answer;

    printf("Enter x: ");
    scanf("%d", &x);
    printf("Enter y: ");
    scanf("%d", &y);
    answer = x * x + y * y;
    printf("x squared + y squared = %d\n", answer);
    return 0;
}

Convert a temperature in fahrenheit to celsius

#include <stdio.h>

int main(void) {
    double fahrenheit, celsius;

    printf("Enter Fahrenheit temperature: ");
    scanf("%lf", &fahrenheit);
    celsius = 5.0 / 9.0 * (fahrenheit - 32);
    printf("%f Fahrenheit = %f Celsius\n", fahrenheit, celsius);
    return 0;
}

A simple program to check Pythagorean identity

Demonstrates danger of use == with doubles e.g. enter 1 for theta

#include <stdio.h>
#include <math.h>

int main(void) {
    double theta, identity;

    printf("Enter theta: ");
    scanf("%lf", &theta);

    identity = 1 - (sin(theta) * sin(theta) + cos(theta) * cos(theta));

    if (identity == 0.0) {
        printf("Pythagorean identity true for %lf\n", theta);
    } else {
        printf("Pythagorean wrong by %g for %lf\n", identity,  theta);
    }

    return 0;
}

Calculate relativistic-mass of an object

#include <stdio.h>
#include <math.h>

#define SPEED_OF_LIGHT 299792458.0

int main(void) {
    double mass, rest_mass;
    double velocity;
    double ratio;

    printf("Enter rest mass: ");
    scanf("%lf", &rest_mass);

    printf("Enter velocity in metres/second: " );
    scanf("%lf", &velocity);

    // compute velocity as a fraction of speed of light
    ratio = velocity / SPEED_OF_LIGHT;

    if (ratio >= 1.0) {
        printf("Error: velocity exceeds speed of light.\n");
    } else {
        // compute observed mass using Einstein's equation
        mass = rest_mass / sqrt(1.0 - ratio*ratio);
        printf("Observed mass = %1.6f\n", mass);
    }

    return 0;
}

Overflow a 32-bit int compile with gcc or clang to see overflow

#include <stdio.h>

int main(void) {
    int a, b;
    a = 2000000000;
    b = a + a;
    printf("%d", b);
    return 0;
}

Printing binary representation of ints

This is not a programming example - it uses features not taught in this course (or nor not yet taught)

#include <stdio.h>

int main(void) {
    int a, j;

    while (1) {
        printf("Enter an int: ");
        scanf("%d", &a);
        j = 8 * (sizeof a);
        while (j > 0) {
            j = j - 1;
            printf("%d", (a >> j) & 1);
        }
        printf("\n");
    }
    return 0;
}

Printing bytes of a file as binary

This is not a programming example - it uses features not taught in this course (or nor not yet taught)

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    FILE *stream;
    int c, i, j, byteCount;

    for (i = 1; i < argc; i = i + 1) {
        stream = fopen(argv[i], "r");
        if (stream == NULL) {
            perror(argv[i]);  // prints why the open failed
            exit(1);
        }
        c = fgetc(stream);
        byteCount = 0;
        while (c != EOF) {
            printf("%s: byte %4d = ", argv[i], byteCount);
            j = 7;
            while (j >= 0) {
                printf("%d", (c >> j) & 1);
                j = j - 1;
            }
            printf("\n");
            c = fgetc(stream);
            byteCount = byteCount + 1;
        }
    }
    return 0;
}

Demonstrate approximate representation of reals

The value 0.1 can not be precisely represented as a real

As a result a non-zero value is printed

#include <stdio.h>

int main(void) {
    double a, b;
    a = 0.1;
    b = 1 - (a + a + a + a + a + a + a + a + a + a);
    printf("%g\n", b);
    return 0;
}

Demonstrate approximate representation of reals producing error. sometimes if we subtract two approximations which are very close together we can canb get a large relative error

correct answer if x == 0.000000011 (1 - cos(x)) / (x * x) is very close to 0.5 code prints 0.917540 which is wrong by a factor of almost two

#include <stdio.h>
#include <math.h>

int main(void) {
    double x, y;
    x = 0.000000011;
    y = (1 - cos(x))  / (x * x);
    printf("correct answer = ~0.5 but y = %lf\n", y);
    return 0;
}

Convert a measurement in feet to metres

A simple program demonstrating the use of scanf and #define for constants

#include <stdio.h>

#define INCHES_IN_FOOT  12
#define CM_IN_INCH      2.54
#define CM_IN_METRE     100

int main(void) {
    double feet;
    double metres;

    printf("Enter number of feet: ");
    scanf("%lf", &feet);

    metres = feet * INCHES_IN_FOOT * CM_IN_INCH / CM_IN_METRE;

    printf("%.2lf", feet);
    printf(" feet is ");
    printf("%.2lf", metres);
    printf(" metres\n");

    return 0;
}