01_hello.c | Download |
---|---|
#include <stdio.h> int main() { printf( "hello, world\n" ); } /* Discuss: - compilation (Windows) - MinGW (http://www.mingw.org/) - SCITE setup (http://www.scintilla.org/SciTE.html) (installer: http://gisdeveloper.tripod.com/scite.html) "Options" --> "Open cpp properties" Change line from: cc=g++ -pedantic -Os -fno-exceptions -c $(FileNameExt) -o $(FileName).o to: cc=gcc -pedantic -Os -fno-exceptions $(FileNameExt) -o $(FileName).exe - C program: functions & variables - main: special - program begins executing - character string (string constant) - \n - escape sequence - printf: formatted print - see 02_hello.c Exercises (page 8) */ |
|
01_hello.c | Download |
02_hello.c | Download |
---|---|
#include <stdio.h> main() { printf("hello, "); printf("world"); printf("\n"); } |
|
02_hello.c | Download |
03_tempconv.c | Download |
---|---|
#include <stdio.h> /* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } } /* Discuss: - comments - declarations (types) - variables - arithmetic expressions - loops - formatted output - types: basic data types (int, float, char, short, long, double) arrays structs unions pointers to above functions that return above - indentation, braces - see 04_tempconv.c, 05_tempconv.c Exercises (page 13): 1.4 */ |
|
03_tempconv.c | Download |
04_tempconv.c | Download |
---|---|
#include <stdio.h> /* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr, celsius; float lower, upper, step; lower = 0; /* lower limit of temperatuire scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } } |
|
04_tempconv.c | Download |
05_tempconv.c | Download |
---|---|
#include <stdio.h> /* print Fahrenheit-Celsius table */ main() { int fahr; for (fahr = 0; fahr <= 300; fahr = fahr + 20) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32)); } /* Discuss: - for statement - see 06_tempconv.c Exercise 1-5 (page 14) */ |
|
05_tempconv.c | Download |
06_tempconv.c | Download |
---|---|
#include <stdio.h> #define LOWER 0 /* lower limit of table */ #define UPPER 300 /* upper limit */ #define STEP 20 /* step size */ /* print Fahrenheit-Celsius table */ main() { int fahr; for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32)); } /* Discuss: - symbolic constants */ |
|
06_tempconv.c | Download |
07_copy.c | Download |
---|---|
#include <stdio.h> /* copy input to output; */ main() { int c; c = getchar(); while (c != EOF) { putchar(c); c = getchar(); } } /* Discuss: - getchar(): reads next input character from text stream - why returns int? (not char) - see 08_copy.c */ |
|
07_copy.c | Download |
08_copy.c | Download |
---|---|
#include <stdio.h> /* copy input to output; */ main() { int c; while ((c = getchar()) != EOF) putchar(c); } /* Discuss: - assignment is an expression (value is value of lhs after assigment) - common loop idiom (parentheses needed b/c of precedence) - c = getchar() != EOF <===> c = (getchar() != EOF) why returns 0 or 1? Exercise 1-7 (page 17) */ |
|
08_copy.c | Download |
09_count.c | Download |
---|---|
#include <stdio.h> /* count characters in input; */ main() { long nc; nc = 0; while (getchar() != EOF) ++nc; printf("%ld\n", nc); } /* Discuss: - ++, --, post-/pre- - change long to double, printf( "%.0f... for (nc = 0; getchar() != EOF; ++nc) ; empty loop body */ |
|
09_count.c | Download |
10_countline.c | Download |
---|---|
#include <stdio.h> /* count lines in input */ main() { int c, nl; nl = 0; while ((c = getchar()) != EOF) if (c == '\n') ++nl; printf("%d\n", nl); } /* Discuss: - counting lines = counting newline characters - == (equality operator), no warning/error if use = instead! - character constants integer value equal to numerical value in machine's character set (e.g. ASCII) if (c == 10) ... (same thing...) Exercises 1-8, 1-9, 1-10 (page 20) */ |
|
10_countline.c | Download |
11_countword.c | Download |
---|---|
#include <stdio.h> #define IN 1 /* inside a word */ #define OUT 0 /* outside a word */ /* count lines, words, and characters in input */ main() { int c, nl, nw, nc, state; state = OUT; nl = nw = nc = 0; while ((c = getchar()) != EOF) { ++nc; if (c == '\n') ++nl; if (c == ' ' || c == '\n' || c == '\t') state = OUT; else if (state == OUT) { state = IN; ++nw; } } printf("%d %d %d\n", nl, nw, nc); } /* Discuss: - UNIX program wc - nl = nw = nc = 0 <===> nl = (nw = (nc = 0)); - || ==> 'OR', && ==> 'AND' - else statement Exercises 1-11, 1-12 (page 21) */ |
|
11_countword.c | Download |
12_countdigit.c | Download |
---|---|
#include <stdio.h> /* count digits, white space, others */ main() { int c, i, nwhite, nother; int ndigit[10]; nwhite = nother = 0; for (i = 0; i < 10; ++i) ndigit[i] = 0; while ((c = getchar()) != EOF) if (c >= '0' && c <= '9') ++ndigit[c-'0']; else if (c == ' ' || c == '\n' || c == '\t') ++nwhite; else ++nother; printf("digits ="); for (i = 0; i < 10; ++i) printf(" %d", ndigit[i]); printf(", white space = %d, other = %d\n", nwhite, nother); } /* Discuss: - arrays, subscripts - else if - testing for digits */ |
|
12_countdigit.c | Download |
13_power.c | Download |
---|---|
#include <stdio.h> int power(int m, int n); /* test power function */ main() { int i; for (i = 0; i < 10; ++i) printf("%d %d %d\n", i, power(2,i), power(-3,i)); return 0; } /* power: raise base to n-th power; n >= 0 */ int power(int base, int n) { int i, p; p = 1; for (i = 1; i <= n; ++i) p = p * base; return p; } /* Discuss: - functions (encapsulate computations, use without worry about implem.) - function declaration (function prototype), definition - parameter vs. argument (formal argument/actual argument) - arguments, call by value - local variables - call by reference using pointers (later), arrays are call by reference change power: int p; for (p=1; n>0; --n) p = p * base; return p; Exercise 1-15 (page 27) */ |
|
13_power.c | Download |
14_longline.c | Download |
---|---|
#include <stdio.h> #define MAXLINE 1000 /* maximum input line length */ int getline(char line[], int maxline); void copy(char to[], char from[]); /* print the longest input line */ main() { int len; /* current line length */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ max = 0; while ((len = getline(line, MAXLINE)) > 0) if (len > max) { max = len; copy(longest, line); } if (max > 0) /* there was a line */ printf("%s", longest); return 0; } /* getline: read a line into s, return length */ int getline(char s[],int lim) { int c, i; for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n'; ++i) s[i] = c; if (c == '\n') { s[i] = c; ++i; } s[i] = '\0'; return i; } /* copy: copy 'from' into 'to'; assume to is big enough */ void copy(char to[], char from[]) { int i; i = 0; while ((to[i] = from[i]) != '\0') ++i; } /* Discuss: - character arrays (most common use of arrays) - pseudocode while (there's another line) if (it's longer than previous longest) save it save its length print longest line - getline() - fetch next line of input, copy() - to copy new line to save it - strings and null character '\0' terminator Exercise 1-16, 1-18 */ |
|
14_longline.c | Download |
15_longline.c | Download |
---|---|
#include <stdio.h> #define MAXLINE 1000 /* maximum input line size */ /* external variables */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void); /* print longest input line; specialized version */ main() { int len; extern int max; extern char longest[]; max = 0; while ((len = getline()) > 0) if (len > max) { max = len; copy(); } if (max > 0) /* there was a line */ printf("%s", longest); return 0; } /* getline: specialized version */ int getline(void) { int c, i; extern char line[]; for (i = 0; i < MAXLINE - 1 && (c=getchar()) != EOF && c != '\n'; ++i) line[i] = c; if (c == '\n') { line[i] = c; ++i; } line[i] = '\0'; return i; } /* copy: specialized version */ void copy(void) { int i; extern char line[], longest[]; i = 0; while ((longest[i] = line[i]) != '\0') ++i; } /* Discuss: - local vs. global/external variables - local = automatic (created & disappear as function called/exited) - external variables: defined exactly once outside of any functions, declared in functions that want to use - splitting into files, header files */ |
|
15_longline.c | Download |