Week 2 Laboratory — Sample Solutions

  1. collatz.c

    // collatz.c: test the 3n+1 conjecture of always eventually reaching 1
    #include <stdio.h>
    
    int main(void) {
        int n = 0;
    
        printf("Enter a positive number:\n");
        scanf("%d", &n);
        if (n > 0) {
    	while (n != 1) {
    	    if ((n % 2) == 0) {	// n is even
    		n = n / 2;
    	    } else {
    		n = 3*n + 1;
    	    }
    	    printf("%d\n", n);
    	}
        } else {
    	printf("Not a positive number.\n");
        }
        return 0;
    }
    

  2. fibonacci.c

    // fibonacci.c: compute the first 30 Fibonacci numbers
    #include <stdio.h>
    
    #define MAX 30
    
    int main(int argc, char *argv[]) {
        int fib[MAX];
        int i;
    
        fib[0] = 1;
        fib[1] = 1;
        for (i=2; i<MAX; i++) {
    	fib[i] = fib[i-1] + fib[i-2];
        }
        for (i=0; i<MAX; i++) {
    	printf("fib[%d] = %d\n", i, fib[i]);
        }
    
        return 0;
    }
    

  3. string.c

    // string.c: swap 'A' and 'T' in a string
    #include <stdio.h>
    #include <string.h>
    
    #define MAX_CHARS 128
    
    void convertString(char *);
    
    int main(void) {
        char string[MAX_CHARS];
    
        printf("Enter a string: ");
        fgets(string, MAX_CHARS, stdin);
    
        convertString(string);
        printf("%s", string);
    
        return 0;
    }
    
    void convertString(char *string) {
        int i;
    
        for (i = 0; i < strlen(string); i++) {
    	if (string[i] == 'A') {
    	    string[i] = 'T';
    	} else if (string[i] == 'T') {
    	    string[i] = 'A';
    	}
        }
    }
    

  4. file.c

    // file.c: read file and swap all occurrences of 'A' and 'T'
    #include <stdio.h>
    #include <string.h>
    
    #define MAX_CHARS 128
    
    void convertString(char *);
    
    int main(void) {
        FILE *inputStream;
        char string[MAX_CHARS];
    
        inputStream = fopen("yeast.dna", "r");
        if (inputStream != NULL) {
    	while (fgets(string, MAX_CHARS, inputStream) != NULL) {
    	    convertString(string);
    	    printf("%s", string);
    	}
    	fclose(inputStream);
        }
        return 0;
    }
    
    void convertString(char *string) {
        int i;
    
        for (i = 0; i < strlen(string); i++) {
    	if (string[i] == 'A') {
    	    string[i] = 'T';
    	} else if (string[i] == 'T') {
    	    string[i] = 'A';
    	}
        }
    }
    

  5. floats.c

    // floats.c: determine the greater of two floating point numbers using pointers
    #include <stdio.h>
    
    float *greater(float *, float *);
    
    int main(int argc, char **argv) {
        float x, y;
    
        printf("Enter a number: ");
        scanf("%f", &x);
        printf("Enter a number: ");
        scanf("%f", &y);
    
        printf("The greater number is %f\n", *greater(&x, &y));
    
        return 0;
    }
    
    float *greater(float *x, float *y) {
        float *retval;
    
        if (*x > *y) {
    	    retval = x;
        } else {
    	retval = y;
        }
    
        return retval;
    }