Download C Program Sampler: Fahrenheit to Celsius, Digit Counter, and Power Functions and more Slides Psychology in PDF only on Docsity!
Sample Basic C Programs
Program #1: Fahrenheit and Celsius, Version 1
This prints a table with two columns, the left being Fahrenheit degrees, and the right the corrsponding Celsius tem- peratures.
#include <stdio.h>
/*
- print a table for Fahrenheit to Celsius
- from 0 F to 300 F / void main(void) { int fahr; / fahrenheit temperature / int celsius ; / celsius temperature / register int lower = 0; / begin table here / register int upper = 300; / end table here / register int step = 20; / increment */
/*
- print out the lines for the table / fahr = lower; while(fahr <= upper){ / get corresponding temp in degrees C / celsius = 5 * (fahr - 32) / 9; / print it */ printf("%d\t%d\n", fahr, celsius); fahr += step; }
/*
- say goodbye */ exit(0); }
Program #2: Fahrenheit and Celsius, Version 2
This does the same thing using different control structures and floating point arithmetic.
#include <stdio.h>
#define LOWER 0 /* begin table here / #define UPPER 300 / end table here / #define STEP 20 / increment */
/*
- print a table for Fahrenheit to Celsius
- from 0 F to 300 F
- floating point version / void main(void) { float fahr; / fahrenheit temperature */
/*
- print out the lines for the table */ for(fahr = LOWER; fahr <= UPPER; fahr += STEP) printf("%3.0f\t%6.1f\n", fahr, (5.0/9.0) * (fahr - 32));
/*
- say goodbye */ exit(0); }
Program #4: cat(1), Version 2
This does the same thing, but uses different control structures. Most C programmers would write this program the previous way.
#include <stdio.h>
/*
- copy input to output: long version / void main(void) { int c; / input character */
/*
- copy the input to the output
- one char at a time / do { / read a char / c = getchar(); / write a char (unless it's / / the end of file marker) */ if (c != EOF) putchar(c); } while (c != EOF);
/*
- say goodbye */ exit(0); }
Program #5: A Version of wc(1)
This program counts the number of lines, words, and characters in its input, where a “word” is defined as any sequence of non-whitespace characters (blanks, tabs, and newlines).
#include <stdio.h>
#define IN_WORD 1 /* currently inside a word / #define NOTIN_WORD 0 / currently not in a word */
/*
- count the number of lines, words, and chars in the input
- a word is a maximal sequence of nonspace characters, so
- the quote "+++ --- hi bye 879+3" has 5 words ("+++", "---",
- "hi", "bye", and "879+3") / void main(void) { register int c; / input char / register int nl; / line count / register int nw; / word count / register int nc; / char count / register int state; / in or not in a word? */
/*
- initialize */ nl = nw = nc = 0; state = NOTIN_WORD;
/*
- handle input a char at a time / while((c = getchar()) != EOF){ / got another character / nc++; / is it a newline? / if (c == '\n') nl++; / is it a word separator? / if (c == ' ' || c == '\t' || c == '\n') / YES -- change state / state = NOTIN_WORD; else if (state == NOTIN_WORD){ / NO -- we're now in a word; update / / the counter and state if need be */ state = IN_WORD; nw++; } }
/*
- announce the results and quit */
Program #6: Digit and Space Counter, Version 1
This is similar to the word counting program, but counts digits, whitespace, and everything else (grouped into the cat- egory “other”). Note the array.
#include <stdio.h>
/*
- count the number of each digit, whitespace,
- and all other chars / void main(void) { register int c; / input char / register int nwhite = 0; / whitespace count / register int nother = 0; / other count / register int i; / counter in a for loop / int ndigit[10]; / digit counts */
/*
- initialize the ndigit array */ for(i = 0; i < 10; i++) ndigit[i] = 0;
/*
- handle input a char at a time / while((c = getchar()) != EOF){ / see what it is / if (c >= '0' && c <= '9'){ / it's a digit -- bump the right count / ndigit[c - '0']++; } else if (c == ' ' || c == '\t' || c == '\n'){ / it's whitespace / nwhite++; } else{ / it's neither a digit nor whitespace */ nother++; } }
/*
- announce the results and quit / printf("digits: "); for(i = 0; i < 10; i++){ printf("'%c' %3d\t", i + '0', ndigit[i]); / put 5 digits per line, for neat output */ if (i == 4) printf("\n "); }
putchar('\n'); printf("whitespace: %d\nother: %d\n", nwhite, nother); exit(0); }
putchar('\n'); printf("whitespace: %d\nother: %d\n", nwhite, nother); exit(0); }
Program #8a: Powers of 2 and –
This program prints a table of 2 and -3 raised to the powers 0 to 9 inclusive. It illustrates the use of function calls.
#include <stdio.h>
/*
- prototype (forward declaration) */ int power(int m, int n);
/*
- generate a table of powers of 2 / void main(void) { register int i; / counter in a for loop */
/*
- generate the table */ for(i = 0; i < 10; ++i) printf("%3d %6d %6d\n", i, power(2, i), power(-3, i));
/*